15

I'm trying to upload an update for an existing App with XCode 8. After the upload I have received this email:

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

I know about the new privacy policy for iOS 10 and also how to add the needed description. My problem is: I'm not using the Calendar in my app.

Is there a way to find out why Apple thinks I use the Calendar? Maybe it's used by the AdMobSDK from Google?

rmaddy
  • 314,917
  • 42
  • 532
  • 579
Stefan
  • 5,203
  • 8
  • 27
  • 51

4 Answers4

15

If you use the EventKit framework, this can trigger the automated rejection you received from Apple. One solution is to remove that framework.

Many Advertising SDKs, such as Tapjoy (before version 11.8.1) and AdMob, have EventKit as a required framework.

If you have EventKit framework in your application because it is necessary for your advertising SDK, I have seen this rejection avoided with the following modification to the .plist file:

<key>NSCalendarsUsageDescription</key>
<string>Some ad content may access calendar</string>
Zachary Drake
  • 1,356
  • 1
  • 8
  • 12
14

I've sent an email to Google complaining about this and hopefully it will get resolved in future versions of the AdMob SDK. Until then you can workaround by adding NSCalendarsUsageDescription to your info.plist. I also had to do the same with NSBluetoothPeripheralUsageDescription.

Edit: Very important to also add the NSPhotoLibraryUsageDescription one as well see: https://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/UmeVUDrcDaw

Update Sep 18, 2016: Google has released version 7.11.0 which removes the need to have any of these.

lysergic-acid
  • 19,570
  • 21
  • 109
  • 218
Stephen
  • 1,427
  • 1
  • 17
  • 42
1

Stephen and Zachary Drake's answers are right :)

On my side, my xcode project gets generated each time so here's a way to set these values from command line using PlistBuddy (I also needed NSCameraUsageDescription):

/usr/libexec/PlistBuddy -c "Add :NSCameraUsageDescription string" ./Info.plist || true
/usr/libexec/PlistBuddy -c "Set :NSCameraUsageDescription 'not used'" ./Info.plist

/usr/libexec/PlistBuddy -c "Add :NSCalendarsUsageDescription string" ./Info.plist || true
/usr/libexec/PlistBuddy -c "Set :NSCalendarsUsageDescription 'Some ad content may access calendar'" ./Info.plist

/usr/libexec/PlistBuddy -c "Add :NSPhotoLibraryUsageDescription string" ./Info.plist || true
/usr/libexec/PlistBuddy -c "Set :NSPhotoLibraryUsageDescription 'Some ad content may access photo library'" ./Info.plist
Community
  • 1
  • 1
GabLeRoux
  • 16,715
  • 16
  • 63
  • 81
  • A downvote without comment . This answer is exactly the same as [Zachary Drake's answer](https://stackoverflow.com/a/39481987/1092815), but using the command line and the above was very useful when Unity3d didn't support adding these from the UI. – GabLeRoux Dec 22 '17 at 03:11
  • 1
    thanks, this is what I had been googling for! Specifically: ```/usr/libexec/Plistbuddy -c "Set :NSBluetoothPeripheralUsageDescription 'Connects via BLE to user device'" ./Info.plist``` – Mark Terrill Mar 17 '19 at 23:58
0

using Xcode V9 with build target IOS 10.0, I had to add this to the local.plist not the main app plist:

 {
     "NSCalendarsUsageDescription" = "This App needs to use your calendar";
 }