Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What makes NSCalendarsUsageDescription required?

When I upload to iTunes Connect, my app gets the error that the NSCalendarsUsageDescription privacy is not provided. I am aware that this information is now mandatory, however I am not aware what and where my app uses something that would require this privacy usage description.

What is my app doing/using that it requires a 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

Edit: Not a duplicate because of the fact that the solution didn't work as I already commented on the first answer AND the fact that the possible duplicate doesn't actually answer the question what (generally) makes this usage description required.

like image 927
Martin Polak Avatar asked Sep 24 '16 13:09

Martin Polak


4 Answers

Update you Info.plist file by adding permission base on your rejection mail or error log.

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>     <string>$(PRODUCT_NAME) camera use.</string> 

NSContactsUsageDescription

<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> 

OR

Resolving the Privacy-Sensitive Data App Rejection

https://developer.apple.com/library/content/qa/qa1937/_index.html

like image 108
Sachin Nikumbh Avatar answered Nov 07 '22 05:11

Sachin Nikumbh


You could try using nm tool to look for EventKit specific symbols in your frameworks binaries, something like:

nm YourFramework.framework/YourFramework | grep EK # EK is a prefix for EventKit classes

Or one-liner (look for files without extension, also ignore CodeResources to reduce irrelevant output):

find YourApp/Frameworks ! -name '*CodeResources*' -type f ! -name "*.*" -exec nm -o -- {} + | grep EK

If there is such you will see something like:

0000000000003fdb t -[ClusterPrePermissions EKEquivalentEventType:]
                 U _OBJC_CLASS_$_EKEventStore

To learn more about nm run man nm in your terminal.

The nm tool is useful when you want to see which symbols a given binary contains. There are plenty of options that you can give to nm but most of the time it is enough to run it without any arguments to answer questions like: is symbol X present in a given binary?

like image 33
Stanislav Pankevich Avatar answered Nov 07 '22 04:11

Stanislav Pankevich


According to apples documentation:

NSCalendarsUsageDescription (String - iOS) This key lets you describe the reason your app accesses the user’s calendars. When the system prompts the user to allow access, this string is displayed as part of the alert.

it then goes on to explain how to implement it:

Important: To protect user privacy, an iOS app linked on or after iOS 10.0, and which accesses the user’s calendars, must statically declare the intent to do so. Include the NSCalendarsUsageDescription key in your app’s Info.plist file and provide a purpose string for this key. If your app attempts to access the user’s calendars without a corresponding purpose string, your app exits.

Basically just insert this into you info.plist file

 <key>NSCalendarsUsageDescription</key>
<string>purpose for using calendar</string>

you can read more about cocoa keys here

like image 20
Dustin Spengler Avatar answered Nov 07 '22 04:11

Dustin Spengler


Update to new version of AdMob SDK solved my issue.

like image 39
thatzprem Avatar answered Nov 07 '22 03:11

thatzprem