itunesconnect - apple app store connect
¿Qué hace que se requiera NSCalendarsUsageDescription? (4)
Cuando subo a iTunes Connect, mi aplicación recibe el error de que no se proporciona la privacidad de NSCalendarsUsageDescription
. Soy consciente de que esta información ahora es obligatoria, sin embargo, no sé qué y dónde utiliza mi aplicación algo que requeriría esta descripción de uso de la privacidad.
¿Qué hace / usa mi aplicación que requiere una NSCalendarsUsageDescription
?
Dear developer,
We have discovered one or more issues with your recent delivery for "MyApp". To process your delivery, the following issues must be corrected:
This app attempts to access privacy-sensitive data without a usage description. The app''s Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.
Once these issues have been corrected, you can then redeliver the corrected binary.
Regards,
The App Store team
Edición: No es un duplicado debido al hecho de que la solución no funcionó como ya comenté en la primera respuesta Y el hecho de que el posible duplicado en realidad no responde a la pregunta de qué (en general) hace necesaria esta descripción de uso.
Actualice su archivo Info.plist agregando una base de permisos en su correo de rechazo o registro de errores.
NSCameraUsageDescription
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera use.</string>
NSContactosUsuarioDescripción
<key>NSContactsUsageDescription</key>
<string>$(PRODUCT_NAME) contacts use.</string>
NSPhotoLibraryUsageDescription
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) photos and video use.</string>
NSBluetoothPeripheralUsageDescription
<key>NSBluetoothPeripheralUsageDescription</key>
<string>$(PRODUCT_NAME) bluetooth use.</string>
NSMicrophoneUsageDescription
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) microphone use.</string>
NSMotionUsageDescription
<key>NSMotionUsageDescription</key>
<string>$(PRODUCT_NAME) motion use.</string>
NSLocationAlwaysUsageDescription
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
NSLocationUsageDescription
<key>NSLocationUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
NSLocationWhenInUseUsageDescription
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
NSRemindersUsageDescription
<key>NSRemindersUsageDescription</key>
<string>$(PRODUCT_NAME) reminders use.</string>
NSSiriUsageDescription
<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) siri use.</string>
NSVideoSubscriberAccountUsageDescription
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>$(PRODUCT_NAME) video use.</string>
NSSpeechRecognitionUsageDescription
<key>NSSpeechRecognitionUsageDescription</key>
<string>$(PRODUCT_NAME) speech recognition use.</string>
NSCalendarsUsageDescription
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) user your calendar.</string>
O
Resolución del rechazo de la aplicación de datos sensibles a la privacidad
https://developer.apple.com/library/content/qa/qa1937/_index.html
La actualización a la nueva versión de AdMob SDK solucionó mi problema.
Puede intentar usar la herramienta nm
para buscar símbolos específicos de EventKit en sus binarios de frameworks, algo como:
nm YourFramework.framework/YourFramework | grep EK # EK is a prefix for EventKit classes
O de una sola línea (busque archivos sin extensión, también ignore CodeResources para reducir la salida irrelevante):
find YourApp/Frameworks ! -name ''*CodeResources*'' -type f ! -name "*.*" -exec nm -o -- {} + | grep EK
Si hay tal, verás algo como:
0000000000003fdb t -[ClusterPrePermissions EKEquivalentEventType:]
U _OBJC_CLASS_$_EKEventStore
Según documentación de manzanas:
NSCalendarsUsageDescription (String - iOS) Esta tecla le permite describir la razón por la que su aplicación accede a los calendarios del usuario. Cuando el sistema solicita al usuario que permita el acceso, esta cadena se muestra como parte de la alerta.
luego pasa a explicar cómo implementarlo:
Importante: Para proteger la privacidad del usuario, una aplicación de iOS enlazada en o después de iOS 10.0, y que accede a los calendarios del usuario, debe declarar de forma estática la intención de hacerlo. Incluya la clave NSCalendarsUsageDescription en el archivo Info.plist de su aplicación y proporcione una cadena de propósito para esta clave. Si su aplicación intenta acceder a los calendarios del usuario sin una cadena de propósito correspondiente, su aplicación se cerrará.
Básicamente simplemente inserte esto en su archivo info.plist
<key>NSCalendarsUsageDescription</key>
<string>purpose for using calendar</string>
Puedes leer más sobre las claves de cacao here