iOS 10 - Changements dans la demande des autorisations de l'appareil photo, du microphone et de la bibliothèque de photos provoquant le blocage de l'application

104

iOS 10 nécessite désormais l'autorisation de l'utilisateur pour accéder à la médiathèque, aux photos, à l'appareil photo et à d'autres matériels comme ceux-ci. La solution pour cela est d'ajouter leurs clés info.plistavec une description pour l'utilisateur de la façon dont nous utilisons leurs données,

Je n'ai pu trouver que quelques clés

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

Je veux savoir s'il y a plus de clés également pour d'autres matériels, comme iOS 10 si vous n'avez pas fourni la info.plistdescription des clés appropriée, votre application plantera si elle est construite à l'aide de XCode-8 beta.

Syed Ali Salman
la source
n'est-ce pas iOS 10 sous NDA?
sage444
Je ne suis pas certain de cela.
Syed Ali Salman

Réponses:

138

[Liste des clés de confidentialité MISE À JOUR pour iOS 13 - voir ci-dessous]

Il existe une liste de tout ce Cocoa Keysque vous pouvez spécifier dans votre Info.plistfichier:

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

(Xcode: Target -> Info -> Propriétés de la cible iOS personnalisée)

iOS avait déjà besoin d'autorisations pour accéder au microphone, à la caméra et à la bibliothèque multimédia plus tôt (iOS 6, iOS 7), mais depuis l'application iOS 10 plantera si vous ne fournissez pas la description de la raison pour laquelle vous demandez l'autorisation (cela ne peut pas être vide).

Clés de confidentialité avec exemple de description: feuille de triche

La source

Vous pouvez également ouvrir en Info.plisttant que code source: code source

La source

Et ajoutez des clés de confidentialité comme ceci:

<key>NSLocationAlwaysUsageDescription</key>
<string>${PRODUCT_NAME} always location use</string>

Liste de toutes les clés de confidentialité: [MISE À JOUR vers iOS 13]

NFCReaderUsageDescription
NSAppleMusicUsageDescription
NSBluetoothAlwaysUsageDescription
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSFaceIDUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryAddUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription

Mise à jour 2019:

Au cours des derniers mois, deux de mes applications ont été rejetées lors de l'examen car la description de l'utilisation de l'appareil photo ne précisait pas ce que je fais des photos prises.

J'ai dû changer la description de ${PRODUCT_NAME} need access to the camera to take a photoà ${PRODUCT_NAME} need access to the camera to update your avatarmême si le contexte de l'application était évident (l'utilisateur a tapé sur l'avatar).

Il semble qu'Apple accorde maintenant encore plus d'attention aux descriptions d'utilisation de la confidentialité, et nous devrions expliquer en détail pourquoi nous demandons la permission.

KlimczakM
la source
2
oui, mais cependant le changement est que l'application va maintenant planter si vous n'avez pas fourni de description sur les raisons pour lesquelles nous demandons l'autorisation. S'il vous plait corrigez moi si je me trompe.
Syed Ali Salman le
1
@Syed Ali Salman Vous avez raison - il plantera depuis iOS10, maintenant vraiment votre question. Mettra à jour la réponse. :)
KlimczakM
1
J'espère qu'Apple décidera si c'est obligatoire ou non. Selon la documentation Apple, ce n'est pas:Explain why your app needs the information if it’s not obvious. You can add custom text to the system-provided permission request alert. Make the text specific and polite, so people don’t feel pressured. Keep the text short, and use sentence case. There’s no need to include your app name. The system already identifies your app as the one making the request.
sumofighter666
J'ai déjà commenté le fait de pouvoir laisser ces valeurs vides pour simplement afficher le message généré par le système, et bien que cela fonctionne correctement, il semble qu'Apple rejettera automatiquement votre binaire si vous incluez ces clés mais ne leur définissez pas de valeur .
Stonz2
13
Il me semble que c'est un non-sens total de la part d'Apple , de laisser une application planter quand elle n'a pas de description d'autorisation ... Quelle mauvaise expérience utilisateur! (Anonyme) se plaint d'un flux rapide dans la revue AppStore ... Et bien sûr, le Simultor se comporte différemment ...
Gabriel
65

Veuillez trouver ci-dessous les codes pour un exemple d'autorisation de demande d'ios 10 pour info.plist.
Vous pouvez modifier votre message personnalisé.

    <key>NSCameraUsageDescription</key>
    <string>${PRODUCT_NAME} Camera Usage</string>

    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>${PRODUCT_NAME} BluetoothPeripheral</string>

    <key>NSCalendarsUsageDescription</key>
    <string>${PRODUCT_NAME} Calendar Usage</string>

    <key>NSContactsUsageDescription</key>
    <string>${PRODUCT_NAME} Contact fetch</string>

    <key>NSHealthShareUsageDescription</key>
    <string>${PRODUCT_NAME} Health Description</string>

    <key>NSHealthUpdateUsageDescription</key>
    <string>${PRODUCT_NAME} Health Updates</string>

    <key>NSHomeKitUsageDescription</key>
    <string>${PRODUCT_NAME} HomeKit Usage</string>

    <key>NSLocationAlwaysUsageDescription</key>
    <string>${PRODUCT_NAME} Use location always</string>

    <key>NSLocationUsageDescription</key>
    <string>${PRODUCT_NAME} Location Updates</string>

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>${PRODUCT_NAME} WhenInUse Location</string>

    <key>NSAppleMusicUsageDescription</key>
    <string>${PRODUCT_NAME} Music Usage</string>

    <key>NSMicrophoneUsageDescription</key>
    <string>${PRODUCT_NAME} Microphone Usage</string>

    <key>NSMotionUsageDescription</key>
    <string>${PRODUCT_NAME} Motion Usage</string>

    <key>kTCCServiceMediaLibrary</key>
    <string>${PRODUCT_NAME} MediaLibrary Usage</string>

    <key>NSPhotoLibraryUsageDescription</key>
    <string>${PRODUCT_NAME} PhotoLibrary Usage</string>

    <key>NSRemindersUsageDescription</key>
    <string>${PRODUCT_NAME} Reminder Usage</string>

    <key>NSSiriUsageDescription</key>
    <string>${PRODUCT_NAME} Siri Usage</string>

    <key>NSSpeechRecognitionUsageDescription</key>
    <string>${PRODUCT_NAME} Speech Recognition Usage</string>

    <key>NSVideoSubscriberAccountUsageDescription</key>
    <string>${PRODUCT_NAME} Video Subscribe Usage</string>

iOS 11 et plus, si vous souhaitez ajouter une photo / image à votre bibliothèque, vous devez ajouter cette clé

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>
Ilesh P
la source
Merci, sa vraie réponse, juste Apple dit "Il n'est pas nécessaire d'inclure le nom de votre application. Le système identifie déjà votre application comme celle qui fait la demande."
Yucel Bayram
2
C'est la réponse que je cherchais
Dinesh Phalwadiya
19

Vous devez ajouter cette autorisation dans Info.plist pour iOS 10.

Photo:

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

Microphone :

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

Caméra :

Key       :  Privacy - Camera Usage Description   
Value   :  $(PRODUCT_NAME) camera use
Kirit Modi
la source
Les bonnes clés sont comme NSPhotoLibraryUsageDescription.
BangOperator