Aplicación rechazada debido a que faltan descripciones de uso (Xcode8)

91

Recibí este correo hoy diciendo que iTunes Connect rechazó la última versión de mi aplicación debido a que faltaban algunas descripciones de uso. Para ser exacto:

Esta aplicación intenta acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener una clave NSContactsUsageDescription con un valor de cadena que explique al usuario cómo la aplicación utiliza estos datos.

Esta aplicación intenta acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener una clave NSCalendarsUsageDescription con un valor de cadena que explique al usuario cómo la aplicación usa estos datos.

Esta aplicación intenta acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener una clave NSPhotoLibraryUsageDescription con un valor de cadena que explique al usuario cómo la aplicación utiliza estos datos.

Esta aplicación intenta acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener una clave NSBluetoothPeripheralUsageDescription con un valor de cadena que explique al usuario cómo la aplicación utiliza estos datos.

Esta aplicación intenta acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener una clave NSMicrophoneUsageDescription con un valor de cadena que explique al usuario cómo la aplicación utiliza estos datos.

Esta aplicación intenta acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener una clave NSMotionUsageDescription con un valor de cadena que explique al usuario cómo la aplicación usa estos datos.

Una vez que se hayan corregido estos problemas, puede volver a enviar el binario corregido.

Me di cuenta de que estos se han vuelto obligatorios con iOS 10, pero el único problema es que mi aplicación no solicita permiso para acceder a ninguno de estos ... Pensé que la descripción solo era obligatoria si realmente solicitabas un permiso.

¿Es porque una de mis dependencias (Cocoapods) podría contener algún código para solicitar estos permisos? ¿O son estas descripciones obligatorias incluso si nunca solicito ver el calendario, los contactos, etc. de los usuarios?

KimHafr
fuente
3
Según mi experiencia, estos son necesarios solo si solicita los permisos. Entonces, tal vez alguna dependencia esté haciendo esto por ti. Además, TODOS estos permisos huelen a pescado, especialmente si su aplicación es una simple lista de tareas pendientes. ¿Quizás alguna dependencia se está convirtiendo en phishing?
Eimantas
¿Podrías publicar tu PodFiley la lista de las bibliotecas que usas (si usas algunos cocoapods externos)?
Julien Quere
Fue github.com/nickoneill/PermissionScope .. ¡Gracias por tu ayuda!
KimHafr
Su uso espectáculo explicado y: iosdevcenters.blogspot.com/2016/09/...
Saeid
Tengo exactamente el mismo problema y supongo que es causado por: pod 'ReactNativePermissions',: path => '../node_modules/react-native-permissions'
luky

Respuestas:

33

Las descripciones son obligatorias para cualquier contenido que usted o cualquier marco que vincule contra el intento de acceso. Los errores se generan al intentar acceder al contenido si no se proporcionó una descripción de uso, por lo que si recibe esos errores, su aplicación debe estar solicitándolos. Debe descubrir por qué su aplicación o sus marcos los requieren y agregar descripciones de uso adecuadas al info.plist de su aplicación.

O más idealmente, si no necesita acceso, vea si hay una manera de no solicitarlo (o use marcos que lo necesiten innecesariamente).

Matthew Seaman
fuente
11
Por mi vida, no podría imaginar que agregaría una biblioteca solicitando todos estos permisos. Pero era tan obvio cuando lo encontré: github.com/nickoneill/PermissionScope
KimHafr
1
Sí, un marco como ese podría no ser una gran idea porque hace que su aplicación declare muchos más permisos de los que necesita.
Matthew Seaman
3
Supongo que esto es más una característica que un error. ITunes Connect detecta que en algún lugar de su aplicación, alguien podría solicitar permisos. En ese caso, debe completar las descripciones de uso para todos estos, en caso de que realmente pueda invocar parte del código en permissionscope. También me gusta el marco y no estoy listo para reemplazarlo. Así que rellené un texto falso y la aplicación fue aprobada. Lo
envié
15
¿Necesita una forma de detectar qué marco solicita esos permisos?
neobie
5
Neobie: ¿descubrió cómo puede detectar los marcos que solicitan los permisos?
Nitesh
140

iOS 10 debe agregar permiso en info.plist solo revise este BLOG: - settings-in-ios-10 ya tiene una idea.

Agregue permiso en la base del archivo info.plist en su registro de errores .

Nota: Escriba la razón adecuada para el permiso en el valor de la cadena; de lo contrario, Apple rechazará la aplicación nuevamente.

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSContactsUsageDescription

<key>NSContactsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSBluetoothPeriféricoUsoDescripción

<key>NSBluetoothPeripheralUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMicrophoneUsageDescription

<key>NSMicrophoneUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMotionUsageDescription

<key>NSMotionUsageDescription</key>
    <string>$(PRODUCT_NAME) motion use.</string>

NSLocationAlwaysUsageDescription

<key>NSLocationAlwaysUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationUsageDescription

<key>NSLocationUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationWhenInUseUsageDescription

<key>NSLocationWhenInUseUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSRemindersUsageDescription

<key>NSRemindersUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSiriUsageDescription

<key>NSSiriUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSVideoSubscriberAccountUsageDescription

<key>NSVideoSubscriberAccountUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSpeechRecognitionUsageDescription

<key>NSSpeechRecognitionUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSCalendarsUsageDescription

<key>NSCalendarsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

ingrese la descripción de la imagen aquí

Mitul Marsoniya
fuente
¿No debería ser "$ {PRODUCT_NAME}" en lugar de "$ (PRODUCT_NAME)"? "{}" en vez de "()".
barra invertida-f
@ backslash-f, compruebe el archivo plist existente en el nuevo proyecto y debería serlo $(PRODUCT_NAME). Puede ver la propiedad predeterminada como Bundle nameen el archivo plist.
Jayesh Thanki
1
Tenga en cuenta que una descripción genérica como esta ya no le permitirá aprobar la tienda de aplicaciones. Nos criticaron dos veces por descripciones similares. Tienes que describir el uso real para un humano
O'Rooney
9

Puede agregar en su info.plist como:

<key>NSCalendarsUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>Explain the reasons for accessing...</string>

etc.

La esperanza ayudará a alguien ...

mgyky
fuente
6

Tuve el mismo problema, y ​​parece que si algún marco al que se vincula tiene un código que solicita este permiso (incluso si su aplicación nunca lo solicita), las descripciones de uso son necesarias. Pero según mi prueba, si no los solicita, no aparecerán en la lista de permisos de su aplicación.

Ventas Dielson
fuente
3

Calendario: Clave: Privacidad - Calendarios Descripción del uso
Valor: $ (PRODUCT_NAME) eventos del calendario

Recordatorio: Clave: Privacidad - Recordatorios Descripción del uso
Valor: $ (PRODUCT_NAME) uso del recordatorio

Contacto : Clave: Privacidad - Contactos Descripción del uso
Valor: $ (PRODUCT_NAME) uso del contacto

Foto: Clave: Privacidad - Descripción del uso de la biblioteca de fotos
Valor: $ (PRODUCT_NAME) uso de la foto

Uso compartido de Bluetooth: Clave: Privacidad - Uso de periféricos de Bluetooth Descripción
Valor: $ (PRODUCT_NAME) Uso de periféricos de Bluetooth

Micrófono: Clave: Privacidad - Descripción del uso del micrófono
Valor: $ (PRODUCT_NAME) uso del micrófono

Cámara: Clave: Privacidad - Descripción del uso de la cámara
Valor: $ (PRODUCT_NAME) uso de la cámara

Ubicación: Clave: Privacidad - Ubicación Siempre Descripción del uso
Valor: $ (PRODUCT_NAME) uso de la ubicación

Clave: Privacidad - Ubicación cuando está en uso Uso Descripción
Valor: $ (PRODUCT_NAME) uso de ubicación

Salud: Clave: Privacidad - Uso compartido de salud Descripción
Valor: $ (PRODUCT_NAME) uso compartido de salud

Clave: Privacidad - Descripción del uso de actualizaciones de salud
Valor: $ (PRODUCT_NAME) uso de actualizaciones de salud

HomeKit: Clave: Privacidad - Descripción del uso de HomeKit
Valor: $ (PRODUCT_NAME) uso del kit para el hogar

Biblioteca de medios: Clave: Privacidad - Uso de la biblioteca de medios Descripción
Valor: $ (PRODUCT_NAME) uso de la biblioteca de medios

Movimiento: Clave: Privacidad - Uso de movimiento Descripción
Valor: $ (PRODUCT_NAME) uso de movimiento

Reconocimiento de voz: Clave: Privacidad - Uso del reconocimiento de voz Descripción
Valor: $ (PRODUCT_NAME) uso de voz

SiriKit: Clave: Privacidad - Descripción del uso de Siri
Valor: $ (PRODUCT_NAME) siri use

Proveedor de TV: Clave: Privacidad - Uso del proveedor de TV Descripción
Valor: $ (PRODUCT_NAME) tvProvider use

Trinadh Koya
fuente
0

Para cualquiera que se pregunte por qué, de repente, su aplicación ahora tiene todas estas configuraciones de permisos en primer lugar, podría deberse a CocoaPods o Carthage: pusieron ganchos a todos estos permisos. Acabo de actualizar mi aplicación para usar cordova-plugin-firebasex, que tiene una instalación extensa de Cocoapods (y dependencias). Puede desactivar estos permisos ANTES de instalar cocoapods en su proyecto colocando un PermissionsConfiguration.xcconfig en la raíz de su proyecto; puede leer más sobre esto aquí: https://cocoapods.org/pods/Permission#installation

Todo esto me sorprendió cuando la nueva versión de mi aplicación fue rechazada y faltaban 7 claves / cadenas de permisos en el archivo Info.plist. Luego tuve que profundizar en mi proyecto para encontrar qué estaba causando esto, ya que mi aplicación no necesita ni usa ninguno de estos permisos (nunca lo hizo).

Puede existir, pero en este momento no puedo encontrar una manera de eliminar los permisos después de la integración de los pods ... tendré que investigar cómo hacer esto sin comenzar mi proyecto de nuevo.

rolinger
fuente