由于缺少 NSCalendarsUsageDescription,iTunes Connect 上传被拒绝,二进制文件无效
Posted
技术标签:
【中文标题】由于缺少 NSCalendarsUsageDescription,iTunes Connect 上传被拒绝,二进制文件无效【英文标题】:iTunes Connect upload rejected with invalid binary because of missing NSCalendarsUsageDescription 【发布时间】:2017-01-19 06:48:09 【问题描述】:我正在尝试使用 XCode 8 为现有应用上传更新。上传后我收到了这封电子邮件:
“此应用尝试访问隐私敏感数据而无需使用 描述。应用的 Info.plist 必须包含 NSCalendarsUsageDescription 键,带有一个字符串值,用于解释 用户应用程序如何使用这些数据。”
我知道 ios 10 的新隐私政策以及如何添加所需的说明。我的问题是:我没有在我的应用中使用日历。
有没有办法找出 Apple 认为我使用日历的原因?也许它被 Google 的 AdMobSDK 使用了?
【问题讨论】:
我猜当 Apple 扫描您的应用程序是否使用私有 API 时,它还会扫描对EKEventStore requestAccessToEntityType:completion:
或相关方法的调用。你也可以试试。扫描您的应用或第 3 方框架。
你在使用任何第三方库吗?
我正在使用 GoogleAdMob SDK。没有别的
Admob SDK 也遇到了这个问题
另见***.com/questions/39383289/…
【参考方案1】:
如果您使用 EventKit 框架,这可能会触发您从 Apple 收到的自动拒绝。一种解决方案是删除该框架。
许多广告 SDK,例如 Tapjoy(11.8.1 之前的版本)和 AdMob,都将 EventKit 作为必需的框架。
如果您的应用程序中有 EventKit 框架,因为它是您的广告 SDK 所必需的,我已经看到通过对 .plist 文件的以下修改避免了这种拒绝:
<key>NSCalendarsUsageDescription</key>
<string>Some ad content may access calendar</string>
【讨论】:
【参考方案2】:我已向 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 版本,不再需要这些版本。
【讨论】:
这并不能真正回答您关于 Apple 为何认为您使用日历的问题。 Admob SDK 中的私有方法会尝试访问它。 Apple 正在检查应用程序中包含的所有代码 我也有蓝牙警告。我想知道 Google 想用蓝牙做什么 Google 确认这是 AdMob SDK 的问题:groups.google.com/forum/#!category-topic/google-admob-ads-sdk/… Google 是否有任何更改?【参考方案3】:Stephen 和 Zachary Drake's 答案是对的 :)
在我这边,我的 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
【讨论】:
没有评论的投反对票?。这个答案与Zachary Drake's answer 完全相同,但是当Unity3d 不支持从UI 添加这些时,使用命令行和上面的方法非常有用。 谢谢,这就是我一直在谷歌搜索的!具体来说:/usr/libexec/Plistbuddy -c "Set :NSBluetoothPeripheralUsageDescription 'Connects via BLE to user device'" ./Info.plist
【参考方案4】:
使用 Xcode V9 和构建目标 IOS 10.0,我必须将其添加到 local.plist 而不是主应用 plist:
"NSCalendarsUsageDescription" = "This App needs to use your calendar";
【讨论】:
以上是关于由于缺少 NSCalendarsUsageDescription,iTunes Connect 上传被拒绝,二进制文件无效的主要内容,如果未能解决你的问题,请参考以下文章