Erreur de connexion Appstore: chaîne de but manquante dans le fichier Info.plist

154

J'ai soumis mon application pour examen à l'App Store Connect. Bien que l'application soit toujours en cours d'examen, j'ai reçu un e-mail m'informant que je dois corriger une erreur. Voici le contenu du message:

Cher développeur,

Nous avons identifié un ou plusieurs problèmes avec une livraison récente pour votre application XXXXX. Votre livraison a réussi, mais vous souhaiterez peut-être corriger les problèmes suivants lors de votre prochaine livraison:

"Chaîne d'objectif manquante dans le fichier Info.plist. Le code de votre application fait référence à une ou plusieurs API qui accèdent aux données utilisateur sensibles. Le fichier Info.plist de l'application doit contenir une clé NSLocationAlwaysUsageDescription avec une chaîne d'objectif destinée à l'utilisateur expliquant clairement et complètement pourquoi votre application a besoin à partir du printemps 2019, toutes les applications soumises à l'App Store qui accèdent aux données utilisateur devront inclure une chaîne d'objectif. Si vous utilisez des bibliothèques externes ou des SDK, elles peuvent référencer des API qui nécessitent une chaîne d'objectif. Pendant que votre application peut ne pas utiliser ces API, une chaîne d'objectif est toujours requise. Vous pouvez contacter le développeur de la bibliothèque ou du SDK et lui demander de publier une version de son code qui ne contient pas les API.

Après avoir corrigé les problèmes, vous pouvez utiliser Xcode ou Application Loader pour télécharger un nouveau fichier binaire sur iTunes Connect.

Meilleures salutations,

L'équipe App Store

Mon application est entièrement construite avec Expo et je ne sais pas comment accéder et modifier le fichier Info.plist.

Une idée?

John Doe
la source
3
J'ai le même problème avec la dernière version, étant donné que je n'utilise même pas les services de localisation dans mon application. Et Apple n'a aucun document officiel sur ce changement.
huong
3
+1 A fait une version pour la même application il y a 2 jours et tout va bien. 2 jours plus tard, je viens de changer quelques lignes de code pour faire une nouvelle version (je n'ai pas ajouté plus de pods ou quelque chose du genre) et j'ai reçu ce message
Tiago Ornelas
2
Nous avons connu le même problème. Je soupçonne que c'est un bogue dans le processus d'approbation (espérons-le). Je vais ignorer pour le week-end et j'espère que c'est réglé lundi.
AMB
2
J'ai rencontré le même problème pour le moment, bien que notre application n'ait pas vraiment besoin de services de localisation en permanence. Il a juste besoin de NSLocationWhenInUseUsageDescription pour lequel nous avons déjà une chaîne de but. Ce n'est probablement qu'un problème du côté d'Apple?
ilight
3
Et à la mode Apple, le lien qu'ils fournissent dans l'e-mail pour le réparer est rompu.
gwalshington

Réponses:

45

Si vous utilisez Expo, vous pouvez ajouter une résolution en ajoutant infoPlist à app.json comme ceci:

  "expo": {
     "ios": {
       "bundleIdentifier": "com.app.myapp",
       "infoPlist": {
         "NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
       },
     },
   }

Documents de l'Expo

Gwalshington
la source
25
En fait, ce n'est PAS "un message pour apaiser Apple", mais pour faire savoir à l'utilisateur QUE faites-vous avec les données générées par l'utilisateur (emplacement) dans ce cas. C'est une question de confidentialité et je pense qu'il est bon d'être juste envers les utilisateurs de vos applications.
Lookaji
4
Je t'ai eu! Je pensais à des débutants qui pourraient être tentés d'en sortir ainsi! Je ne voulais pas paraître grincheux :) bravo!
Lookaji
@gwalshington Je n'ai pas d'objet expo dans app.json
Heemanshu Bhalla
@HeemanshuBhalla hmm, je ne sais pas pourquoi. Dans mon app.json, c'est en haut et le premier objet déclaré. C'est là que vous déclarez le numéro de version, l'identifiant du bundle, etc. Si vous avez éjecté l'application, peut-être qu'elle a l'air légèrement différente?
gwalshington
2
Quel texte taper si nous ne collectons pas de données de localisation? Nous devons inventer un mensonge: S
Primož Kralj
62

EDIT Avril 2019 : Vous devez maintenant ajouter ces deux clés, car le printemps 2019 a commencé. Notez qu'il NSLocationAlwaysUsageDescriptionest désormais obsolète (depuis iOS 11) et a été remplacé par NSLocationAlwaysAndWhenInUseUsageDescriptionet NSLocationWhenInUseUsageDescription. Si vous souhaitez prendre en charge une version inférieure à iOS 11, vous devrez utiliser les trois valeurs.

Pour résumer, vous devez:

  • Ajouter NSLocationAlwaysAndWhenInUseUsageDescriptionAND NSLocationWhenInUseUsageDescriptionpour iOS 11 et plus
  • Et ajoutez NSLocationAlwaysUsageDescriptionsi vous souhaitez prendre en charge iOS 10 et moins
  • Et enfin, vous pouvez ajouter NSLocationUsageDescriptionsi vous souhaitez prendre en charge iOS 8 et moins.


Vous pouvez soumettre votre application même si vous avez reçu ce message!

Je viens de faire face au même problème hier, même si l'application n'utilise pas la fonctionnalité de localisation. Il peut être lié à un cadre inclus dans le projet qui possède cette fonctionnalité facultative.

Je peux confirmer que mon application a été approuvée même sans la touche NSLocationAlwaysUsageDescriptionetNSLocationWhenInUseUsageDescriptioninfo.plist

En effet, comme Apple l'a déclaré dans le mail:

À partir du printemps 2019, toutes les applications soumises à l'App Store qui accèdent aux données des utilisateurs devront inclure une chaîne d'objectif.

Donc, la seule chose à faire est d'ajouter cette clé (pour le moment c'est mieux, pour ne pas l'oublier) dans votre projet afin qu'elle soit incluse dans votre prochaine mise à jour .

Ajoutez simplement deux nouvelles entrées dans your info.plist, with NSLocationAlwaysUsageDescriptionet NSLocationWhenInUseUsageDescriptionas et une brève description de la raison pour laquelle vous les utilisez comme valeur (même si vous ne les utilisez pas vraiment ...).

AnthoPak
la source
2
Dans votre édition d'avril 2019, êtes-vous sûr de ne pas avoir annulé la dépréciation? D'après ce que je vois, NSLocationUsageDescription est celui qui est obsolète. En regardant ici: developer.apple.com/library/archive/documentation/General/…
apricity
L'e-mail que j'ai reçu d'Apple mentionne NSLocationAlwaysUsageDescription, donc je pense qu'il l'a inversé.
Dror Bar
@apricity @DrorBar Désolé les gars, en effet j'avais fait une erreur. Il n'a pas été inversé mais il y avait toujours une erreur, NSLocationAlwaysUsageDescriptiondevrait être remplacé par NSLocationAlwaysAndWhenInUseUsageDescriptionet NSLocationWhenInUseUsageDescription , et non par NSLocationUsageDescription(comme je l'ai écrit précédemment, désolé…). J'ai mis à jour ma réponse pour ajouter un résumé du processus.
AnthoPak
48

J'ai quelques applications dans le magasin et j'ai essayé de distribuer une version pour le contrôle qualité et la même chose s'est produite dans deux applications différentes. Je pense que c'est un nouveau critère pour accepter les téléchargements de builds sur Appstore connect.

La solution est simple, ajoutez les lignes suivantes dans le fichier .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS: Dans mon cas, je n'ai utilisé aucune fonctionnalité de localisation, mais j'ai ajouté ces lignes afin de se conformer aux directives de connexion Appstore. Btw après avoir reçu cet e-mail, je pourrais tester l'application même quand ils ont dit que la version avait des problèmes.

J'espère que ce travail pour vous les gars.

vroldan
la source
5
Wow, je viens de recevoir ceci, j'ai réalisé que tout le monde l'obtient aussi!
Cameron A. Ellis
La première clé a changé à partir de maintenant pour<key>NSLocationUsageDescription</key>
Hudi Ilfeld
1
Devons-nous réarchiver après avoir mis à jour le fichier info.plist?
Bishoy Hanna
Dois-je augmenter la version ou le numéro de version du bundle pour télécharger un nouveau binaire?
Dror Bar
20

C'est une nouvelle exigence d'Apple, même si vous n'utilisez pas de localisation. Si vous souhaitez ajouter les autorisations dans Xcode, recherchez «Confidentialité - Description de l'utilisation de l'emplacement» et «Confidentialité - Description de l'utilisation de l'emplacement lors de l'utilisation» et tapez une chaîne personnalisée pour chacun d'eux.

entrez la description de l'image ici

Juan José Ramírez
la source
1
Dans une autre mise à jour de l'application, Apple a également demandé cette autorisation: "Confidentialité - Description de l'utilisation de l'emplacement toujours"
Juan José Ramírez
2
Donc si je n'utilise pas ces fonctionnalités, qu'est-ce que je dois y écrire, un mensonge, quelque chose comme "collecter l'emplacement pour une utilisation future, peut-être"?
Ruslan Shashkov
oui, Apple vous contactera s'ils ont des questions
Juan José Ramírez
Je ne suis pas en mesure de trouver la liste des propriétés d'informations dans mon xcode 10.1, vous auriez dû mentionner où le trouver, j'ai recherché les paramètres de construction à la fois pour les cibles et le projet
Awais Nasir
1
Okay So Targets-> Info-> Custom ios Target Properties was the exact location
Awais Nasir
15

Pour plus de simplification, vous pouvez ajouter ces lignes dans votre info.plist. Ces erreurs surviennent car à partir du printemps 2019, toutes les applications soumises à l'App Store qui accèdent aux données utilisateur devront inclure une chaîne d'objectif.

  1. Ouvrez info.plist comme code source.
  2. Ajoutez ces lignes suivantes dans votre plist

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
Sachin Nautiyal
la source
2
J'ai dû supprimer des espaces supplémentaires dans les balises <key>, puis cela a fonctionné.
innich
@innich merci de l'avoir signalé, j'ai changé de réponse.
Sachin Nautiyal
8
## Utilisez cette clé dans le fichier info.plist

NSLocationAlwaysUsageDescription Votre emplacement est requis pour les avantages xyz pour vous NSLocationWhenInUseUsageDescription Votre emplacement est requis pour les avantages xyz pour vous

Sumit Sharma
la source
8

Nous avons reçu le même e-mail et nous n'utilisons pas du tout CoreLocation. Après une recherche rapide, nous avons constaté que Parse SDK pouvait utiliser CoreLocation. Dans l'e-mail d'Apple, ils disent clairement:

Si vous utilisez des bibliothèques externes ou des SDK, ils peuvent référencer des API qui nécessitent une chaîne d'objectif.

Cela signifie qu'à la minute où votre code ou toute autre bibliothèque ou SDK peut utiliser CoreLocation, même si vous ne l'utilisez pas, vous devez fournir une description de confidentialité pour «Lors de l'utilisation» et «Toujours utiliser».

C'est aussi quelque chose de nouveau d'Apple et pour l'instant ce n'est qu'un avertissement, mais il sera nécessaire à partir du printemps 2019 pour les nouvelles soumissions.

sebleclerc
la source
C'est juste stupide ... Si je ne l'utilise pas, cela pourrait empêcher les gens de télécharger mon application juste à cause de cela. -_-
Mayoul
3
Pas vraiment. L'alerte vous demandant d'utiliser votre localisation ne s'affichera que si quelque part dans le code le CLLocationManager.requestWhenInUseAuthorization()est appelé. Apple a analysé chaque code d'application pour voir si une telle fonction pouvait être appelée. S'il n'est jamais appelé, l'alerte n'apparaîtra pas.
sebleclerc
6

Ce problème se produit car vous n'avez pas inclus

 <NSLocationAlwaysUsageDescription>

pour votre application. J'ai rencontré le même problème lorsque j'ai essayé de soumettre mon application sur l'AppStore. Une fois l'application traitée, j'ai reçu le même courrier. Je viens d'ajouter la description et maintenant c'est résolu.

J'espère que cela t'aides.

Sachin Nautiyal
la source
Cela m'a aidé. Si vous utilisez Location dans votre application (ou peut-être juste toujours), vous devez ajouter cette ligne et une chaîne en dessous. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
MaylorTaylor
6

Il existe les cas suivants:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

Apple déclare à:

Ajoutez la NSLocationWhenInUseUsageDescriptionclé et la NSLocationAlwaysAndWhenInUseUsageDescriptionclé à votre fichier Info.plist .

et:

Si votre application prend en charge iOS 10 et versions antérieures, ajoutez le NSLocationAlwaysUsage

NSLocationUsageDescriptionsemble mort, la seule référence sur le site ADC est: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Donc, pour être sûr, utilisez les 3 premiers.

ingconti
la source
3

Ces réponses vous indiquent toutes comment vous conformer aux règles de l'App Store pour éviter l'avertissement, mais le vrai correctif serait que l'Expo vous permette de désactiver l'exigence de SDK pour les services de localisation à moins que vous ne les utilisiez réellement - je ne sais pas si c'est possible.

Calvin
la source
3

même problème le 19 février, j'ai reçu un e-mail avec un tas d'autorisations que je n'utilise pas, je suppose qu'ils proviennent de plugins. Apple dit en mars 19 que c'est une exigence, je les ajoute donc dans info.plst et je les télécharge à nouveau.

C'est vraiment ridicule.

Panda Power
la source
2
Plus d'un commentaire vraiment ...?
Steve
3

Je suis également confronté au même problème, mais après 27 heures, j'ai reçu l'e-mail sur approuvé même si je n'ai rien fait. Attendez donc environ 24 heures au lieu de refaire tout ce processus.

Abdul Qayum
la source
1
Oui, c'est un bug!
Danh Huynh
2

J'avais <key>NSLocationWhenInUseUsageDescription </key> au lieu de <key>NSLocationWhenInUseUsageDescription</key>

veillez à supprimer les espaces blancs de fin

Michael van de Waeter
la source
2

Veuillez consulter l'e-mail que vous avez reçu de ** App Store Connect **

Identifiez la clé manquante entrez la description de l'image ici

Instructions

  1. Ouvrez le fichier info.plist.

  2. Ajoutez et recherchez la clé manquante parmi les options fournies (par exemple, Contacts = Confidentialité - Description de l'utilisation des contacts)

  3. Ajouter une description d'utilisation:

$ (PRODUCT_NAME) doit avoir accès aux contacts pour "Fournir la raison ici".

Exemple:

Zeus
la source
1
monsieur j'ai eu la même erreur, mais pourquoi ajouter à info.plist en fait je ne suis pas utilisé la fonction de contact dans mon application, alors pourquoi nous devons l'ajouter?
Kapil soni le
@Kapilsoni Veuillez vous assurer que vous n'accédez pas à une ou plusieurs API ayant accès à des données utilisateur sensibles
Zeus
1
: monsieur, je n'ai utilisé que la caméra et l'emplacement dans mon application?
Kapil soni le
2

Avec Xcode 11 copiez la clé NSLocationAlwaysUsageDescription et ajoutez-la à Info-> Custom iOS Target Properties-> Cliquez +en bas à gauche de cet onglet et insérez comme valeur une sorte de description comme This app requires location access to function properly..

Daniel Danielecki
la source
2

"Chaîne d'objectif manquante dans le fichier Info.plist. Le code de votre application fait référence à une ou plusieurs API qui accèdent aux données utilisateur sensibles. Le fichier Info.plist de l'application doit contenir une clé NSLocationAlwaysUsageDescription avec une chaîne d'objectif destinée à l'utilisateur expliquant clairement et complètement pourquoi votre application a besoin à partir du printemps 2019, toutes les applications soumises à l'App Store qui accèdent aux données utilisateur devront inclure une chaîne d'objectif. Si vous utilisez des bibliothèques externes ou des SDK, elles peuvent référencer des API qui nécessitent une chaîne d'objectif. Pendant que votre application peut ne pas utiliser ces API, une chaîne d'objectif est toujours requise. Vous pouvez contacter le développeur de la bibliothèque ou du SDK et lui demander de publier une version de son code qui ne contient pas les API.

Ouvrez info.plist comme code source.
Ajoutez ces lignes suivantes dans votre plist

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
Supriya
la source
1

Mon application l'a également , et je ne fais rien à ce sujet, mais elle peut bien fonctionner, la prochaine fois que je pense que je devrais ajouter une telle clé dans plist, faites simplement une description

liunianhuaguoyanxi
la source
1

Une réponse courte au problème ci-dessus -

NSLocationAlwaysUsageDescription doit être mis à jour avec la description suivante dans le fichier Info.plist

{Votre nom d'application} doit accéder à l'emplacement pour suggérer des zones d'épidémie de dengue.

Soman Dubey
la source
0

Dans notre cas, nous utilisions NSLocationWhenInUseUsageDescriptiondans notre application, mais pas NSLocationAlwaysUsageDescription.

En lisant les commentaires ici (merci matt-oakes), il ressemble àNSLocationAlwaysUsageDescription soit utilisé par l'un des frameworks de dépendances que nous utilisons.

En exécutant notre application, il n'affiche pas le modal d'autorisation NSLocationAlwaysUsageDescription réel, il semble donc simplement gérer cela en arrière-plan.

Donc, en résumé, l'ajout NSLocationAlwaysUsageDescriptionà Info.plist a corrigé l'e-mail d'avertissement et n'a changé aucun comportement dans l'application 👍🏻

Harry Bloom
la source