iOS 10 Error on Submit

Just tried to upload our app and got the following errors:


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.


This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription 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 NSBluetoothPeripheralUsageDescription key with a string value explaining to the user how the app uses this data.



Just started getting this with the GM Seed and no prior versions. Note that we're not accessing the Calendar, Photo Library, or Bluetooth, so am very confused.


I've also verified we're not linking to the EventKit, EventKitU, Photos, PhotosUI, or to the CoreBluetooth frameworks.


Anyone else seeing this?


rob.

Accepted Reply

Starting with iOS 10, purpose strings are required for access to any protected class of data from within your app, including usage of those protected data classes by any 3rd party library your app uses. If you are receiving a message about a missing purpose string for a data class you don't recognize, consult with your 3rd party library vendors about their usage of that protected data class.


For more detailed information, consult the following resources:

Replies

Yes, I'm seeing that too. Do you use Firebase or AdMob? I'm wondering if that's why...

I can see in AdMob's module.modulemap file that it references the libraries associated with these permissions:


framework module GoogleMobileAds {
  umbrella header "GoogleMobileAds.h"

  export *
  module * { export * }

  link framework "AdSupport"
  link framework "AudioToolbox"
  link framework "AVFoundation"
  link framework "CoreBluetooth"
  link framework "CoreGraphics"
  link framework "CoreMedia"
  link framework "CoreMotion"
  link framework "CoreTelephony"
  link framework "CoreVideo"
  link framework "EventKit"
  link framework "EventKitUI"
  link framework "Foundation"
  link framework "GLKit"
  link framework "MediaPlayer"
  link framework "MessageUI"
  link framework "OpenGLES"
  link framework "SafariServices"
  link framework "StoreKit"
  link framework "SystemConfiguration"
  link framework "UIKit"

I'm seeing the error about NSPhotoLibraryUsageDescription, but not the others. We access the camera, and have that usage description, but don't access the photo library.


Some 3rd party code we use: Crittercism, Adobe Target, Mitek MiSnap, Contentful, Realm.


We did not see this error when uploading to TestFlight with Xc8 beta 6.

i just started facing this issue too with the GM release. I received an email saying:


"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 NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.


Once the required corrections have been made, you can then redeliver the corrected binary.

Regards,

The App Store team"


I don't use admob, but do use GoogleSignIn via cocoapods which did install Firebase with it.

Is there something we can do other than having to define these keys as my app has nothing to do with camera / photos etc and hence I don't want users to think we are using them.

I don't use admob, but do use GoogleSignIn via cocoapods which did install Firebase with it

Received the same message and I have admob.

Received the exact same message after uploading to itunes connect using the GM Seed. Not accessing any camera / photos features.

I am too receiving that for NSCalendarsUsageDescription, NSBluetoothPeripheralUsageDescription and NSMicrophoneUsageDescription. My app uses neither of those features, so I guess it has to do with some third party lib.

In my case, maybe GoogleMobileAds SDK and FBAudienceNetwork are trigger.


nm Pods/Google-Mobile-Ads-SDK/GoogleMobileAdsSdkiOS-7.5.0/GoogleMobileAds.framework/GoogleMobileAds  | grep OBJC_CLASS | grep EKEvent
                 U _OBJC_CLASS_$_EKEvent
                 U _OBJC_CLASS_$_EKEventEditViewController
                 U _OBJC_CLASS_$_EKEventStore
                 U _OBJC_CLASS_$_EKEventStore

nm Pods/FBAudienceNetwork/FBAudienceNetwork.framework/FBAudienceNetwork | grep UIImagePickerController
                 U _OBJC_CLASS_$_UIImagePickerController

I'm seeing the NSCalendarsUsageDescription rejection as well with Xcode 8 GM.


Third party code I'm using: AdColony, UnityAds, Vungle, Chartboost, OneSignal.

I use AdMob and get an issue referring to NSCalendarsUsageDescription. D a m n you Google!

For us the NSPhotoLibraryUsageDescription was solved by not using the BlocksKit/UIKit subpod, which contains an extension to UIImagePickerController that we didn't need

FWIW, I was able to resolve the NSPhotoLibraryUsageDescription need by eliminating some old code that used to pop up a UIImagePickerController. I never called this code anymore, as my app no longer supports having user avatars, but it seems that some of the calls triggered a static analyzer.


The bluetooth and calendar ones seem to be caused by AdMob, and it's unclear what we can do about that at this point. I hope Google releases an update that lifts these dependencies, and I plan to hold off on updates until that happens or I see what other developers do.

I noticed that we are using UIImagePickerController to detect if a camera and video are available. I've nm'd all of the third party libs and scoured our code and that's the only thing I can see that might be triggering the NSPhotoLibraryUsageDescription message. I can't validate that that is the cause at the moment, but I'm suspicious.


We never access the photo library; all we do is:

   let hasCamera = UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)
   let mediaTypes = UIImagePickerController.availableMediaTypes(for: UIImagePickerControllerSourceType.camera)

but maybe Apple's scanner is flagging the entire UIImagePickerController class as requiring the photo library usage string.


Some 3rd party code we use: Crittercism, Adobe Target, Mitek MiSnap, Contentful, Realm.

Not using AdMob or anything like that. We only get the NSPhotoLibraryUsageDescription error on submission, and that just started with Xc8GM.

For the NSPhotoLibraryUsageDescription one, try scouring your own code. I'm now successfully submitting with AdMob without needing that description, and I had to eliminate some deprecated code that used UIImagePickerController to get to that point.