Aller au contenu
Narvy

ITMS-90683 : texte d'usage manquant ou vide dans l'Info.plist

Chaque ressource protégée à laquelle votre application ou ses SDK peuvent accéder exige un texte d'usage dans l'Info.plist (NS…UsageDescription). S'il manque ou est vide, l'envoi reçoit ITMS-90683 et l'application plante au premier accès. Ajoutez pour chaque clé une phrase précise, destinée à l'utilisateur.

E-mail App Store ConnectITMS-90683
ITMS-90683: Missing purpose string in Info.plist - Your app's code references one or more APIs that access sensitive user data, or the app has one or more entitlements that permit such access. The Info.plist file for the "<App>.app" bundle should contain a NSHealthShareUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data.
Console Xcode, plantage à l'exécution
This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSHealthShareUsageDescription key with a string value explaining to the user how the app uses this data.

Ce que cela signifie

iOS affiche le texte d'usage dans la demande d'autorisation. App Store Connect le signale quand le code référence une API protégée ou que l'application a un entitlement qui donne cet accès, même si la référence vient d'un SDK que l'application n'appelle jamais. L'App Review vérifie ensuite le texte lui-même au titre de la règle 5.1.1 : il doit expliquer clairement et complètement pourquoi l'application a besoin des données.

Ce que vérifie le contrôle, à partir de l'IPA : chaque clé NS…UsageDescription présente est renseignée (sauf si un InfoPlist.strings localisé peut la fournir), et les entitlements HealthKit, HomeKit et NFC sont accompagnés de leurs clés. Il ne déduit pas le besoin d'une clé à partir de l'usage des API.

Échéance

Pas de date : la clé a toujours été exigée pour la ressource protégée.

Corriger

1. Ajouter la clé indiquée dans l'e-mail

Info.plist
<key>NSHealthShareUsageDescription</key>
<string>Reads your step count to show daily progress.</string>
<key>NSHealthUpdateUsageDescription</key>
<string>Saves the workouts you record in the app.</string>

Écrivez précisément ce que l'utilisateur y gagne. Les textes d'un mot ("Santé", "Caméra") sont un motif de refus fréquent à l'App Review.

2. La traduire

Traduisez la clé dans InfoPlist.strings (ou le String Catalog) pour chaque langue livrée. Un fichier localisé peut fournir le texte quand la valeur de base est vide, ce que le contrôle signale comme non déterminé plutôt qu'en échec.

3. Entitlements sans fonctionnalité

Si l'application a l'entitlement HealthKit, HomeKit ou NFC sans fonctionnalité qui l'utilise, retirez la capacité dans Xcode au lieu d'écrire un texte d'usage.

Vérifier avant de soumettre

Déposez l'IPA sur la page de contrôle des stores. Elle exécute APPSTORE-PURPOSE-STRINGS avec les dates de cette page, puis supprime le fichier : rien de l'application n'est conservé. Le même moteur tourne hors ligne dans la CLI Narvy et renvoie le code 1 quand un point bloquant est trouvé, ce qui permet de bloquer un job de CI.

Hors ligne, depuis un terminal (narvy-cli 1.2.0 ou plus)
narvy store-check MyApp.ipa --lang fr

Contrôler un build dans le navigateur

Questions fréquentes

Mon application n'utilise jamais la caméra. Pourquoi Apple demande-t-il NSCameraUsageDescription ?

Parce qu'un SDK lié référence l'API de la caméra. Apple demande le texte même si votre code ne l'appelle jamais : ajoutez-en un honnête, ou retirez le SDK.

Pourquoi l'entitlement Siri n'est-il pas vérifié ?

L'entitlement Siri sert aussi aux intents et raccourcis qui ne demandent jamais l'autorisation Siri, et des applications de l'App Store le livrent sans NSSiriUsageDescription. Le vérifier produirait de fausses alertes.