iOS 10 - Mudanças na solicitação de permissões de câmera, microfone e biblioteca de fotos fazendo com que o aplicativo trave

103

iOS 10, agora requer permissão do usuário para acessar a biblioteca de mídia, fotos, câmera e outros hardwares como estes. A solução para isso é adicionar suas chaves info.plistcom uma descrição para o usuário de como estamos usando seus dados,

Eu só consegui encontrar algumas chaves

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

Eu quero saber se há mais chaves também para outro hardware, iOS 10 caso você não tenha fornecido info.plista descrição das chaves adequadas, seu aplicativo irá travar se for construído usando o XCode - 8 beta.

Syed Ali Salman
fonte
o iOS 10 não está sob o NDA?
sage444 de
Eu não tenho certeza sobre isso.
Syed Ali Salman

Respostas:

138

[Lista de chaves de privacidade ATUALIZADA para iOS 13 - veja abaixo]

Há uma lista de tudo o Cocoa Keysque você pode especificar em seu Info.plistarquivo:

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

(Xcode: Target -> Info -> Custom iOS Target Properties)

O iOS já exigia permissões para acessar o microfone, a câmera e a biblioteca de mídia anteriormente (iOS 6, iOS 7), mas como o aplicativo iOS 10 travará se você não fornecer a descrição por que está solicitando a permissão (não pode ser vazio).

Chaves de privacidade com descrição de exemplo: folha de dicas

Fonte

Como alternativa, você pode abrir Info.plistcomo código-fonte: Código fonte

Fonte

E adicione chaves de privacidade como esta:

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

Lista de todas as chaves de privacidade: [ATUALIZADO para iOS 13]

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

Atualização 2019:

Nos últimos meses, dois dos meus aplicativos foram rejeitados durante a revisão porque a descrição de uso da câmera não especificava o que eu faço com as fotos tiradas.

Tive que alterar a descrição de ${PRODUCT_NAME} need access to the camera to take a photopara ${PRODUCT_NAME} need access to the camera to update your avatar, embora o contexto do aplicativo fosse óbvio (o usuário tocou no avatar).

Parece que a Apple agora está prestando ainda mais atenção às descrições de uso de privacidade e devemos explicar em detalhes por que estamos pedindo permissão.

KlimczakM
fonte
2
sim, mas, no entanto, a mudança é que o aplicativo agora travará se você não tiver fornecido uma descrição sobre o motivo pelo qual estamos pedindo permissão. Por favor corrija-me se eu estiver errado.
Syed Ali Salman
1
@Syed Ali Salman Você está certo - vai travar desde o iOS10, agora realmente entendi sua pergunta. Atualizará a resposta. :)
KlimczakM
1
Espero que a apple decida se é obrigatório ou não. De acordo com a documentação da Apple, não é: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 01 de
Eu comentei anteriormente sobre ser capaz de deixar esses valores em branco para exibir apenas a mensagem gerada pelo sistema e, embora funcione bem funcionalmente, parece que a Apple rejeitará automaticamente seu binário se você incluir essas chaves, mas não definir um valor para elas .
Stonz2
13
Parece-me um total absurdo da Apple deixar um aplicativo travar quando falta uma descrição de permissão ... Que experiência de usuário ruim! (Anônimo) reclama que flui rápido na revisão da AppStore ... E é claro que o Simultor se comporta de maneira diferente ...
Gabriel
65

Encontre abaixo os códigos para o exemplo de solicitação de permissão do iOS 10 para info.plist.
Você pode modificar para sua mensagem personalizada.

    <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 mais, se você deseja adicionar foto / imagem à sua biblioteca, você deve adicionar esta chave

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>
Ilesh P
fonte
Obrigado, é a verdadeira resposta, apenas a Apple diz "Não há necessidade de incluir o nome do seu aplicativo. O sistema já identifica seu aplicativo como aquele que está fazendo a solicitação."
Yucel Bayram
2
Essa é a resposta que eu estava procurando
Dinesh Phalwadiya
19

Você tem que adicionar essa permissão em Info.plist para iOS 10.

Foto :

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

Microfone:

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

Câmera :

Key       :  Privacy - Camera Usage Description   
Value   :  $(PRODUCT_NAME) camera use
Kirit Modi
fonte
As teclas certas são como NSPhotoLibraryUsageDescription.
BangOperator