NSCameraUsageDescription dans le crash de l'exécution d'iOS 10.0?

154

Utilisation de la iOS 10.0dernière version bêta. J'avais essayé d'utiliser Appareil photo pour scanner le code-barres dans mon application, et il s'est écrasé avec cette erreur d'exécution.

Cette application est tombée en panne, car elle a tenté d'accéder à des données sensibles à la confidentialité sans description d'utilisation. Le fichier Info.plist de l'application doit contenir une clé NSCameraUsageDescription avec une valeur de chaîne expliquant à l'utilisateur comment l'application utilise ces données.

Mettez cette clé dans le plist, mais il s'est toujours écrasé?

user3069232
la source
6
J'ai le même problème, ajouté le NSCameraUsageDescription dans info.plist, mais se bloque toujours avec le même message. Avez-vous réussi à le résoudre? Apparemment, personne qui a répondu à ce problème n'a compris qu'il plante même si vous avez déjà ajouté la clé.
CarmenA
Si vous avez ajouté l'entrée au fichier info.plist correct, mais que cela a toujours échoué, cela peut être dû au fait que Xcode ne parvient parfois pas à remarquer les modifications apportées aux fichiers de ressources tels que info.plist, images, audio, films, etc. Vous devrez peut-être effectuer un nettoyez ou supprimez le produit de génération d'application du dossier Données dérivées pour forcer Xcode à utiliser la dernière version.
Walt Sellers

Réponses:

227

Après iOS 10, vous devez définir et fournir une description d'utilisation de toutes les données sensibles à la confidentialité du système auxquelles votre application accède dans Info.plist comme ci-dessous:

Calendrier

Key    :  Privacy - Calendars Usage Description    
Value  :  $(PRODUCT_NAME) calendar events

Rappel :

Key    :   Privacy - Reminders Usage Description    
Value  :   $(PRODUCT_NAME) reminder use

Contact :

Key    :   Privacy - Contacts Usage Description     
Value  :  $(PRODUCT_NAME) contact use

Photo:

Key    :  Privacy - Photo Library Usage Description    
Value  :  $(PRODUCT_NAME) photo use

Partage Bluetooth:

Key    :  Privacy - Bluetooth Peripheral Usage Description     
Value  :  $(PRODUCT_NAME) Bluetooth Peripheral use

Microphone :

Key    :  Privacy - Microphone Usage Description    
Value  :  $(PRODUCT_NAME) microphone use

Caméra :

Key    :  Privacy - Camera Usage Description   
Value  :  $(PRODUCT_NAME) camera use

Emplacement :

Key    :  Privacy - Location Always Usage Description   
Value  :  $(PRODUCT_NAME) location use

Key    :  Privacy - Location When In Use Usage Description   
Value  :  $(PRODUCT_NAME) location use

Heath:

Key    :  Privacy - Health Share Usage Description   
Value  :  $(PRODUCT_NAME) heath share use

Key    :  Privacy - Health Update Usage Description   
Value  :  $(PRODUCT_NAME) heath update use

AccueilKit:

Key    :  Privacy - HomeKit Usage Description   
Value  :  $(PRODUCT_NAME) home kit use

Médiathèque :

Key    :  Privacy - Media Library Usage Description   
Value  :  $(PRODUCT_NAME) media library use

Mouvement :

Key    :  Privacy - Motion Usage Description   
Value  :  $(PRODUCT_NAME) motion use

Reconnaissance de la parole :

Key    :  Privacy - Speech Recognition Usage Description   
Value  :  $(PRODUCT_NAME) speech use

SiriKit:

Key    :  Privacy - Siri Usage Description  
Value  :  $(PRODUCT_NAME) siri use

Fournisseur de télévision:

Key    :  Privacy - TV Provider Usage Description   
Value  :  $(PRODUCT_NAME) tvProvider use

Vous pouvez obtenir des informations détaillées dans ce lien.

Bhoopi
la source
1
Privacy - Photo Library Usage Descriptionl'a fait pour l'erreurNSPhotoLibraryUsageDescription
Bruno Bieri
Im nouveau sur Apple Development et ce problème était ennuyeux. Heureux je suis tombé dessus. À votre santé!
user2529011
1
@MaylorTaylor: Oui, vous devez l'ajouter.
Bhoopi
111

Comme Apple a changé la façon dont vous pouvez accéder à tous les types de données privées des utilisateurs dans iOS 10.

Vous devez ajouter la Privacy - Camera usage descriptionclé " " à votre application Info.plistet ses informations d'utilisation qui s'appliquent à votre application, comme dans l'exemple ci-dessous que j'avais fourni que j'ai utilisé pour scanner les codes à barres.

Pour plus d'informations, veuillez trouver la capture d'écran ci-dessous.

entrez la description de l'image ici

Ramkrishna Sharma
la source
62

Vous devez ajouter cette clé ci-dessous dans info.plist.

NSCameraUsageDescription Ou Privacy - Camera usage description

Et ajoutez une description de l'utilisation.

Des captures d'écran détaillées sont disponibles dans ce lien

Bluewings
la source
On dirait qu'il a déjà ajouté cela mais qu'il a toujours le crash. C'est le même problème que j'ai où même si ce KVP est dans le plist, il plante toujours comme si ce n'était pas le cas.
43

Vous pouvez également ouvrir Info.plist en tant que code source et ajouter ceci:

<key>NSCameraUsageDescription</key>
<string>Camera usage description</string>
ayalcinkaya
la source
4
au cas où quelqu'un cherche à localiser le "NSCameraUsageDescription", ajoutez "NSCameraUsageDescription" = "Requires access to the camera";dans votre fichier infoPlist.strings localisé
Khurram Shehzad
30

Utilisez ces valeurs brutes et copiez-les dans info.plist

    <key>NSCalendarsUsageDescription</key>
      <string>$(PRODUCT_NAME) calendar events</string>
    <key>NSRemindersUsageDescription</key>
      <string>$(PRODUCT_NAME) reminder use</string>
    <key>NSCameraUsageDescription</key>
      <string>This app requires to access your photo library to show image on profile and send via chat</string>
    <key>NSMicrophoneUsageDescription</key>
      <string>This app requires to access your microphone to record video with your voice send via chat</string>
    <key>NSPhotoLibraryUsageDescription</key>
      <string>This app requires to access your photo library to show image on profile and send via chat</string>
    <key>NSContactsUsageDescription</key>
       <string>$(PRODUCT_NAME) contact use</string>
    <key>NSLocationAlwaysUsageDescription</key>
      <string>$(PRODUCT_NAME) location use</string>
    <key>NSLocationWhenInUseUsageDescription</key>
      <string>$(PRODUCT_NAME) location use</string>
Zeeshan
la source
de vous avez ces noms de clés bruts?
Omar N Shamali
C'est bien. Cela m'a évité de faire beaucoup de clics dans xCode
MaylorTaylor
26

l'interface utilisateur xcode a un peu changé d'une version à l'autre, voici donc où vous mettez à jour le plist pour la version 9.0 beta 4 si cela aide Projet -> Cible -> Infoentrez la description de l'image ici

user3325025
la source
2
Cela devrait être la réponse acceptée! J'avais ce même problème sur XCode 9.2, bien que j'aie déjà ajouté <key>NSCameraUsageDescription</key>à info.plist .
psantos
2
Réponse définitivement acceptée !! J'ai deux cibles dans mon projet, et j'ai essayé de l'ajouter <key>NSCameraUsageDescription</key>au deuxième info.plist fichier , mais sans effet, et je peux confirmer que XCode (10.1) ne prend certainement pas en compte ces changements en exécutant git status , parce que mon info.plist pour une autre cible n'a pas changé. Donc, la bonne façon est de passer par le projet-> Cible-> Info . Merci mec!
bra.Scène
4

Un autre exemple auquel j'ai été confronté en essayant d'utiliser la caméra était qu'il était encore occupé à planter, _CRASHING_DUE_TO_PRIVACYmême après avoir ajouté la "Description de l'utilisation de la caméra". Après avoir échoué à obtenir quoi que ce soit de tangible de la pile d'appels, est passé à l '"Organisateur" et a examiné les rapports de plantage sur l'appareil. J'ai trouvé qu'il se plaignait en fait de la confidentialité en raison de l'absence de "Description de l'utilisation du microphone". J'ai ajouté cela et je me suis débarrassé d'une telle panne cryptique.

Yoku
la source
4

Pour ceux qui obtiennent toujours l'erreur même si vous avez ajouté les clés appropriées dans Info.plist:

Assurez-vous d'ajouter la clé dans le fichier Info.plist correct. La nouvelle version de xCode a apparemment 3 Info.plist.

L'un se trouve sous le dossier avec le nom de votre application, ce qui a résolu le problème pour moi.

Le deuxième est sous YourappnameTests et le troisième sous YourappnameUITests.

J'espère que ça aide.

Vetuka
la source
2

Si vous utilisez Ionic, vous pouvez le résoudre directement à partir de config.xml en ajoutant une balise ios à l'intérieur de la plateforme:

<platform name="ios">
.
.
.
    <config-file target="*-Info.plist" parent="NSPhotoLibraryUsageDescription">
        <string>photo library usage description</string>
    </config-file>
    <config-file target="*-Info.plist" parent="NSCameraUsageDescription">
        <string>camera usage description</string>
    </config-file>
.
.
.
</platform>

Je voudrais également remercier la réponse @BHUPI.

Victor Tavares
la source
1

J'ai vérifié le plist et j'ai trouvé qu'il ne fonctionnait pas, seulement dans les informations "projet", vous devez ajouter le "Confidentialité - Caméra ....", alors cela devrait fonctionner. J'espère vous aider.

Mark90
la source
0

J'ai eu le même problème et je n'ai pas pu trouver de solution. Mark90 a raison, il y a beaucoup de fichiers info.plist et vous devriez éditer le bon. Allez dans Projet, sous TARGETS, sélectionnez le projet (pas les tests), dans la barre d'onglets, sélectionnez Info et ajoutez l'autorisation sous " Propriétés de la cible iOS personnalisée ".

Michael Marinos Likouras
la source