checkApp

Stores

ITMS-90683 : Missing purpose string in Info.plist

Ressource protégée sans texte d'usage dans Info.plist.

Que signifie le rejet ITMS-90683 ?

C'est le refus d'Apple pour un build qui peut accéder à la caméra, à la localisation, aux contacts ou à une autre ressource protégée sans qu'une phrase dans Info.plist explique pourquoi. Il découle du binaire, pas de ce que fait l'app : un plugin qui lie la caméra impose l'exigence même si rien ne l'ouvre jamais, si bien qu'un build qui tourne parfaitement sur un téléphone n'atteint jamais TestFlight. Nous nommons la clé et le plugin qui l'a introduite.

D'où cela vient dans une app Flutter

App Store Connect cherche dans chaque binaire les frameworks liés à la caméra, aux photos, à la localisation, aux contacts, au Bluetooth et aux autres ressources protégées, que l'app les demande un jour ou non. Dans une app Flutter, c'est généralement un plugin qui les apporte : image_picker la caméra et la photothèque, geolocator la localisation, camera et mobile_scanner la caméra. Installé via CocoaPods, permission_handler ne compile une autorisation que si sa macro PERMISSION_… vaut 1 dans ios/Podfile ; via Swift Package Manager, seulement si sa clé figure déjà dans Info.plist.

Comment corriger

  1. Lancez la vérification gratuite du build sur le .ipa. Elle nomme la clé manquante et le plugin qui en a besoin.
  2. Si l'app utilise cette ressource, ajoutez la clé dans ios/Runner/Info.plist avec une phrase qui explique à quoi elle sert.
  3. Sinon, retirez le plugin ou, pour permission_handler, mettez la macro de cette autorisation à 0.
  4. Une traduction dans InfoPlist.strings ne remplace pas la clé dans Info.plist lui-même.

La vérification gratuite du build lit votre .ipa dans le navigateur et nomme la cause de ce rejet et des autres, sans rien envoyer.

Ou faites vérifier le build entier : l'audit de conformité aux stores coûte 190 €, en 2 jours ouvrés.

Tous les codes de rejet