Application rejected due to missing usage descriptions (Xcode8)

So, today I received this mail, stating that the latest version of my application was rejected by iTunes Connect due to some missing usage descriptions. To be precise:

This application attempts to access sensitive data without a description of use. The Info.plist application must contain the NSContactsUsageDescription key with a string value that tells the user how the application uses this data.

This application attempts to access sensitive data without a description of use. The Info.plist application must contain the NSCalendarsUsageDescription key with a string value that tells the user how the application uses this data.

This application attempts to access sensitive data without a description of use. The Info.plist application must contain the NSPhotoLibraryUsageDescription key with a string value that tells the user how the application uses this data.

This application attempts to access sensitive data without a description of use. The Info.plist application must contain the NSBluetoothPeripheralUsageDescription key with a string value that tells the user how the application uses this data.

This application attempts to access sensitive data without a description of use. The Info.plist application must contain the NSMicrophoneUsageDescription key with a string value that tells the user how the application uses this data.

This application attempts to access sensitive data without a description of use. The Info.plist application must contain the NSMotionUsageDescription key with a string value that tells the user how the application uses this data.

Once these problems are fixed, you can re-add the corrected binary.

I realized that they became mandatory for iOS 10, but the only problem is that my application does not request permission to access any of them. I thought the description was only required if you really requested permission?

Is it because one of my dependencies (Cocoapods) may contain some code to request these permissions? Or are these descriptions mandatory even if I never ask to see a calendar, contacts, etc.?

+90
ios ios10 xcode8 itunesconnect
Sep 09 '16 at 16:23
source share
6 answers

Descriptions are mandatory for any content that you or any framework you associate with an access attempt. Errors are generated when you try to access the content if a description of the use has not been provided, therefore, if you receive these errors, your application should request them. You must find out why your application or its infrastructure requires them and add the appropriate usage descriptions to your info.plist application.

Or, ideally, if you don’t need access, see if there is a way not to request it (or use frameworks that are done unnecessarily).

+33
Sep 09 '16 at 16:28
source share

iOS 10 should add permission to info.plist, just browse this BLOG: - settings-in-ios-10, you will get all the ideas.

Add permission to the info.plist database in your error log.

Note. Specify the correct reason for permission in the string value, otherwise Apple will reject the application again.

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> 

enter image description here

+139
Sep 27 '16 at 6:14
source share

You can add to your info.plist, for example:

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

and etc.

Hope will help someone ...

+9
Oct 06 '16 at 9:05
source share

I had the same problem, and it turned out that if any infrastructure you are referencing has code that requests this permission (even if your application never requests them), usage descriptions are needed. But, according to my test, if you do not request them, they will not appear in the permissions list of your application.

+6
Jan 10 '17 at 18:17
source share

Calendar: Key: Privacy - Using Calendars Description
Value: $ (PRODUCT_NAME) calendar events

Reminder: Key: Privacy - Reminders Use Description
Value: $ (PRODUCT_NAME) reminder to use

Contact : Key: Privacy - Contact Us Description
Value: $ (PRODUCT_NAME) uses the contact

Photo: Key: Privacy - Using Photo Library Description
Value: $ (PRODUCT_NAME) use of photos

Bluetooth Sharing: Key: Privacy - Using a Bluetooth Peripheral Description
Value: $ (PRODUCT_NAME) Bluetooth Peripheral Use

Microphone: Key: Privacy - Using a Microphone Description
Value: $ (PRODUCT_NAME) uses a microphone

Camera: Key: Privacy - Using Camera Description
Value: using the $ (PRODUCT_NAME) function

Location: Key: Privacy - Location Always Description of Use
Value: using position $ (PRODUCT_NAME)

Key: Privacy - Location by Use Use Description
Value: using position $ (PRODUCT_NAME)

Hit: Key: Privacy - Health Usage Description Value: $ (PRODUCT_NAME) share usage

Key: Confidentiality - Health Update Usage Description
Value: $ (PRODUCT_NAME) using heath update

HomeKit: Key: Privacy - HomeKit Usage Description
Value: $ (PRODUCT_NAME) for home use.

Media Library: Key: Confidentiality - Media Library Description

Value: $ media card (PRODUCT_NAME) uses

Movement: Key: Confidentiality - Use of Movement Description
Value: $ (PRODUCT_NAME) traffic usage

Speech Recognition: Key: Confidentiality - Speech Recognition Usage Description
Value: $ (PRODUCT_NAME) speech usage

SiriKit: Key: Privacy - Siri Usage Description
Value: $ (PRODUCT_NAME) siri use

TV Provider: Key: Confidentiality - Using Provider Provider Description
Value: $ (PRODUCT_NAME) Using tvProvider

+3
Oct 14 '17 at 6:36 on
source share

For those who are wondering why all these permission settings appeared in your application, first of all, this may be due to CocoaPods or Carthage - they connected all these permissions. I just updated my application to use cordova-plugin-firebasex, which has an extensive installation of Cocoapods (and dependencies). You can disable these permissions BEFORE you install cocoapods in your project by placing PermissionsConfiguration.xcconfig at the root of your project - you can learn more about it here: https://cocoapods.org/pods/Permission#installation

All this surprised me when a new version of my application was rejected due to the absence of 7 access keys / lines in the Info.plist file. Then I had to rummage around in my project to find the reason for this, since my application does not need these permissions (or they are not).

It may exist, but at the moment I can’t find a way to remove permissions after integrating the modules ... I will have to delve into how to do this without starting my project again.

0
Aug 22 '19 at 19:41
source share



All Articles