iOS 10: modifiche alla richiesta di autorizzazioni per fotocamera, microfono e libreria di foto che causano l'arresto anomalo dell'applicazione


103

iOS 10, ora richiede l'autorizzazione dell'utente per accedere a libreria multimediale, foto, fotocamera e altro hardware come questi. La soluzione per questo è aggiungere le loro chiavi info.plistcon una descrizione per l'utente di come stiamo utilizzando i loro dati,

Sono riuscito a trovare solo poche chiavi

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

Voglio sapere se ci sono più chiavi anche per altro hardware, come nel iOS 10 caso in cui non avessi fornito info.plistla descrizione corretta delle chiavi, la tua applicazione andrà in crash se costruita usando XCode - 8 beta.


iOS 10 non è sotto NDA?
sage444

Non sono sicuro di questo.
Syed Ali Salman

Risposte:


138

[Elenco chiavi privacy AGGIORNATO a iOS 13 - vedi sotto]

C'è un elenco di tutto Cocoa Keysciò che puoi specificare nel tuo Info.plistfile:

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

(Xcode: Target -> Informazioni -> Proprietà target iOS personalizzate)

iOS richiedeva già le autorizzazioni per accedere a microfono, fotocamera e libreria multimediale in precedenza (iOS 6, iOS 7), ma poiché l'app iOS 10 si arresta in modo anomalo se non si fornisce la descrizione del motivo per cui si richiede l'autorizzazione (non può essere vuoto).

Chiavi privacy con descrizione di esempio: bigino

fonte

In alternativa, puoi aprire Info.plistcome codice sorgente: codice sorgente

fonte

E aggiungi chiavi di privacy in questo modo:

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

Elenco di tutte le chiavi per la privacy: [AGGIORNATO a iOS 13]

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

Aggiornamento 2019:

Negli ultimi mesi, due delle mie app sono state rifiutate durante la revisione perché la descrizione dell'utilizzo della fotocamera non specificava cosa fare con le foto scattate.

Ho dovuto cambiare la descrizione da ${PRODUCT_NAME} need access to the camera to take a photoa ${PRODUCT_NAME} need access to the camera to update your avataranche se il contesto dell'app era ovvio (l'utente ha toccato l'avatar).

Sembra che Apple stia ora prestando ancora più attenzione alle descrizioni dell'utilizzo della privacy e dovremmo spiegare in dettaglio perché chiediamo il permesso.


2
sì, ma comunque il cambiamento è che l'applicazione ora andrà in crash se non hai fornito una descrizione del motivo per cui chiediamo il permesso. Perfavore, correggimi se sbaglio.
Syed Ali Salman

1
@Syed Ali Salman Hai ragione: andrà in crash da iOS10, ora ricevi davvero la tua domanda. Aggiornerà la risposta. :)
KlimczakM

1
Spero che Apple decida se è obbligatorio o meno. Secondo la documentazione Apple non è: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

In precedenza ho commentato sulla possibilità di lasciare questi valori vuoti per visualizzare solo il messaggio generato dal sistema e, sebbene funzioni correttamente, sembra che Apple rifiuterà automaticamente il tuo binario se includi queste chiavi ma non imposti un valore per loro .
Stonz2

13
Mi sembra che sia una totale assurdità da parte di Apple , lasciare che un'app si blocchi quando manca una descrizione dell'autorizzazione ... Che esperienza utente scadente! (Anonimo) si lamenta del flusso veloce nella recensione dell'AppStore ... E ovviamente il Simultor si comporta in modo diverso ...
Gabriel

65

Di seguito sono riportati i codici per ios 10 richiesta di autorizzazione di esempio per info.plist.
Puoi modificare il tuo messaggio personalizzato.

    <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 e più, se vuoi aggiungere foto / immagini alla tua libreria, devi aggiungere questa chiave

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>

Grazie, è la sua vera risposta, solo Apple dice "Non è necessario includere il nome della tua app. Il sistema identifica già la tua app come quella che effettua la richiesta."
Yucel Bayram

2
Questa è la risposta che stavo cercando
Dinesh Phalwadiya

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.