iOS 10: los cambios en la solicitud de permisos de la cámara, el micrófono y la biblioteca de fotos hacen que la aplicación se bloquee

103

iOS 10, ahora requiere permiso de usuario para acceder a la biblioteca de medios, fotos, cámara y otro hardware como estos. La solución para esto es agregar sus claves info.plistcon una descripción para el usuario de cómo estamos usando sus datos,

Solo pude encontrar algunas llaves

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

Quiero saber si hay más claves también para otro hardware, por ejemplo, iOS 10 si no ha proporcionado info.plistuna descripción adecuada de las claves, su aplicación se bloqueará si se compila con XCode - 8 beta.

Syed Ali Salman
fuente
¿No está iOS 10 bajo NDA?
sage444
No estoy seguro de esto.
Syed Ali Salman

Respuestas:

138

[Lista de claves de privacidad ACTUALIZADA para iOS 13 - ver más abajo]

Hay una lista de todo lo Cocoa Keysque puede especificar en su Info.plistarchivo:

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

(Xcode: Target -> Info -> Propiedades de destino personalizadas de iOS)

iOS ya requería permisos para acceder al micrófono, la cámara y la biblioteca de medios anteriormente (iOS 6, iOS 7), pero dado que la aplicación iOS 10 se bloqueará si no proporciona la descripción de por qué solicita el permiso (no puede ser vacío).

Claves de privacidad con descripción de ejemplo: cheatsheet

Fuente

Alternativamente, puede abrir Info.plistcomo código fuente: código fuente

Fuente

Y agregue claves de privacidad como esta:

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

Lista de todas las claves de privacidad: [ACTUALIZADO 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

Actualización 2019:

En los últimos meses, dos de mis aplicaciones fueron rechazadas durante la revisión porque la descripción del uso de la cámara no especificaba lo que hago con las fotos tomadas.

Tuve que cambiar la descripción de ${PRODUCT_NAME} need access to the camera to take a photoa ${PRODUCT_NAME} need access to the camera to update your avataraunque el contexto de la aplicación era obvio (el usuario tocó el avatar).

Parece que Apple ahora está prestando aún más atención a las descripciones de uso de la privacidad, y deberíamos explicar en detalle por qué pedimos permiso.

KlimczakM
fuente
2
sí, pero sin embargo, el cambio es que la aplicación ahora se bloqueará si no ha proporcionado una descripción sobre por qué estamos solicitando permiso. Por favor, corríjame si estoy equivocado.
Syed Ali Salman
1
@Syed Ali Salman Tienes razón: se bloqueará desde iOS10, ahora realmente entiendes tu pregunta. Actualizará la respuesta. :)
KlimczakM
1
Espero que Apple decida si es obligatorio o no. Según la documentación de Apple, no es: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
Anteriormente comenté acerca de poder dejar estos valores en blanco para mostrar el mensaje generado por el sistema, y ​​aunque funciona bien funcionalmente, parece que Apple rechazará automáticamente su binario si incluye estas claves pero no establece un valor para ellas .
Stonz2
13
Me parece que es una tontería total por parte de Apple , dejar que una aplicación simplemente se bloquee cuando no tiene una descripción de permiso ... ¡Qué mala experiencia de usuario! (Anónimo) las quejas fluyen rápido en la revisión de la AppStore ... Y, por supuesto, el Simultor se comporta de manera diferente ...
Gabriel
65

A continuación, encontrará los códigos para la muestra de solicitud de permiso de ios 10 info.plist.
Puede modificar su mensaje personalizado.

    <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 y más, si desea agregar una foto / imagen a su biblioteca, debe agregar esta clave

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>
Ilesh P
fuente
Gracias, su verdadera respuesta, simplemente Apple dice "No es necesario incluir el nombre de su aplicación. El sistema ya identifica su aplicación como la que realiza la solicitud".
Yucel Bayram
2
Esa es la respuesta que estaba buscando
Dinesh Phalwadiya
19

Debe agregar este permiso en Info.plist para iOS 10.

Foto:

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

Micrófono:

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

Cámara:

Key       :  Privacy - Camera Usage Description   
Value   :  $(PRODUCT_NAME) camera use
Kirit Modi
fuente
Las teclas de la derecha son como NSPhotoLibraryUsageDescription.
BangOperator