web-dev-qa-db-fra.com

React Native, AppStore demande une valeur NSLocationAlwaysUsageDescription

J'ai une application avec React Native. J'ai téléchargé correctement sur l'App Store, mais aujourd'hui l'application est rejetée avec le message suivant:

Clé Info.plist manquante - Cette application tente d'accéder aux données sensibles à la confidentialité sans description d'utilisation. Le fichier Info.plist de l'application doit contenir une clé NSLocationAlwaysUsageDescription avec une valeur de chaîne expliquant à l'utilisateur comment l'application utilise ces données.

Clé Info.plist manquante - Cette application tente d'accéder aux données sensibles à la confidentialité sans description d'utilisation. Le fichier Info.plist de l'application doit contenir une clé NSLocationWhenInUseUsageDescription avec une valeur de chaîne expliquant à l'utilisateur comment l'application utilise ces données.

Mon application n'utilise aucun type de service de localisation. Les packages npm n'ont pas changé depuis la dernière version publiée sur l'App Store ni mis à jour, ce sont les mêmes versions.

Je ne comprends donc pas pourquoi Apple dit que j'essaie d'accéder à l'emplacement de l'utilisateur.

Il s'agit d'un changement dans le magasin Apple? Comment puis-je vérifier où mon application essaie d'accéder à l'emplacement de l'utilisateur?

Ceci est mon packages.json

  "dependencies": {
    "axios": "^0.17.1",
    "lodash": "^4.17.4",
    "moment": "^2.18.1",
    "react": "^16.0.0",
    "react-addons-shallow-compare": "^15.5.2",
    "react-native": "0.53.0",
    "react-native-drawer": "^2.3.0",
    "react-native-elements": "^0.19.0",
    "react-native-fetch-blob": "^0.10.5",
    "react-native-fs": "^2.3.3",
    "react-native-linear-gradient": "^2.0.0",
    "react-native-onesignal": "^3.0.7",
    "react-native-orientation": "^3.0.0",
    "react-native-pdf": "^3.0.0",
    "react-native-progress": "^3.4.0",
    "react-native-render-html": "^3.8.1",
    "react-native-router-flux": "^4.0.0-beta.28",
    "react-native-vector-icons": "^4.1.1",
    "react-native-video": "^2.0.0",
    "react-native-video-controls": "^2.0.0",
    "react-redux": "^5.0.4",
    "redux": "^3.6.0",
    "redux-thunk": "^2.2.0"
  }

Je vous remercie.

21
David Rojo

Comme @TylerTheCompiler l'a souligné dans les commentaires, cela fonctionne à nouveau. J'ai de nouveau téléchargé la même compilation et maintenant l'application est acceptée. C'est donc un problème d'Apple.

1
David Rojo

Apple scanne votre binaire pour tous les appels aux API liées à la confidentialité comme ils le décrivent ici .

Dans la liste ci-dessus, l'appel de méthode qui déclenche l'exigence de NSLocationAlwaysUsageDescription est CLLocationManager requestAlwaysAuthorization. À partir d'une recherche rapide de ma base de code RN 0.46, cet appel apparaît dans react-native/Libraries/Geolocation/RCTLocationObserver.m ainsi que dans le react-native-permissions donc même si vous n'appelez pas ce code à partir du JS, le fait qu'il existe dans le binaire provoquera Apple pour le marquer.

La solution la plus simple consiste simplement à ajouter une entrée plist pour NSLocationAlwaysUsageDescription même si elle n'apparaîtra jamais à l'utilisateur si vous ne demandez jamais la permission. J'ai eu ce problème ce matin en téléchargeant sur l'App Store et après avoir ajouté le drapeau, mon application n'a passé en revue aucun problème.

Techniquement, dissocier libRCTGeolocation de votre projet Xcode devrait également fonctionner, même si je n'ai pas testé cela, je ne peux donc pas garantir que votre application fonctionnera toujours correctement.

18
Jordan Duncan

Supprimez simplement RCTGeolocation.xcodeproj de votre dossier Bibliothèques dans le panneau gauche de Xcode, si vous êtes vraiment certain que vous ne dépendez d'aucun emplacement géographique. La suppression de .xcodeproj dissociera les bibliothèques.

1
goodhyun