由于缺lessNSCalendarsUsageDescription,iTunes Connect上传被拒绝,并且无效的二进制文件

我试图用XCode 8上传现有应用程序的更新。上传之后,我收到了以下电子邮件:

“这个应用程序试图访问隐私敏感的数据,没有使用描述。应用程序的Info.plist必须包含一个NSCalendarsUsageDescription键和一个string值,向用户解释应用程序如何使用这些数据。

我知道iOS 10的新隐私政策,以及如何添加所需的描述。 我的问题是:我没有在我的应用程序中使用日历。

有没有办法找出为什么苹果认为我使用日历? 也许它是由Google的AdMobSDK使用的?

我向Google发送了一封电子邮件,抱怨这个问题,并希望在将来的AdMob SDK版本中解决这个问题。 在此之前,您可以通过将NSCalendarsUsageDescription添加到您的info.plist中来解决这个问题。 我也必须做同样的NSBluetoothPeripheralUsageDescription。

编辑:添加NSPhotoLibraryUsageDescription也非常重要: https ://groups.google.com/forum/#!category-topic/google-admob-ads-sdk/ios/UmeVUDrcDaw

更新2016年9月18日:Google已经发布了版本7.11.0,它不需要任何这些。

如果您使用EventKit框架,这可能会触发您从Apple收到的自动拒绝。 一个解决scheme是删除该框架。

Tapjoy(版本11.8.1之前)和AdMob等许多广告软件开发工具包都将EventKit作为必需的框架。

如果您的应用程序中有EventKit框架,因为它是您的广告SDK所必需的,我已经看到这种拒绝,并对.plist文件进行了以下修改:

 <key>NSCalendarsUsageDescription</key> <string>Some ad content may access calendar</string> 

斯蒂芬和扎克瑞德雷克的答案是正确的:)

在我这边,我的xcode项目每次都会生成,所以这里是使用PlistBuddy(我还需要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