Fix Apple's privacy-sensitive data permission errors

When uploading your freshly developed application for iOS 10 on iTunesConnect, you might come across a most peculiar error where the application appeared as being processed on your iTunesConnect dashboard before disappearing.

Before the application completely disappears from the dashboard, you should receive an email from itunesconnect@apple.com describing the encountered errors right after the application disappears from your iTunesConnect dashboard:

From: iTunes Store <itunesconnect@apple.com>
Subject: iTunes Connect: Your app "My iOS10 App" (Apple ID: XXXXXXXX) has one or more issues
To: me@bam.tech

Dear developer,

We have discovered one or more issues with your recent delivery for "My iOS10 App". 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 NSContactsUsageDescription key with a string value explaining to the user how the app uses this data.

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.

/!\ Warning: If you don't receive the email, make sure you have Admin rights for the team uploading the app.

These issues listed are caused by iOS 10's new custom permission messages feature. Since iOS 10, it is expected that you write custom messages for the native features permission modals.

In order to fix these issues, you can open your Info.plist file using Xcode and add the corresponding keys and values for each native feature. Keys should look like this:

Key: Privacy - <NATIVE_FEATURE_NAME> Usage Description
Value: $(PRODUCT_NAME) needs to access the <NATIVE_FEATURE_NAME>

where NATIVE_FEATURE_NAME represents the native feature your application requires access to such as (Contacts, Microphone, Bluetooth, Camera...).

Info.plist example

If you are using Cordova, you might encounter this error without having added yourself or using in the app the specific native features. In this specific case, you can use a generic example as shown in the example above. If you do use the native feature causing the issue, you should set an actual description to provide your users with explanation about why you need to access this specific feature. This description will be displayed in the request permission popup.

modal_example

N.B. If you open the Info.plist file, the keys should look like : NS<NATIVE_FEATURE_NAME>UsageDescription.

There you go! Rebuild and run your app to see your new custom messages before shipping it to iTunesConnect.