应用因缺少使用说明而被拒绝 (Xcode8)

App rejected due to missing usage descriptions (Xcode8)

所以我今天收到这封邮件说我的应用程序的最新版本由于缺少一些使用说明而被 iTunes Connect 拒绝。确切地说:

This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSContactsUsageDescription 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 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.

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

Once these issues have been corrected, you can then redeliver the corrected binary.

我发现 iOS 10 这些已经成为强制性的,但唯一的问题是我的应用程序没有请求访问任何这些的权限。我认为只有当你真的请求许可?

是否因为我的依赖项之一 (Cocoapods) 可能包含一些代码来请求这些权限?或者即使我从不要求查看用户的日历、联系人等,这些描述也是强制性的吗?

这些描述对于您 link 试图访问的任何内容或任何框架都是强制性的。如果未提供使用说明,则会在尝试访问内容时生成错误,因此如果您收到这些错误,则您的应用程序必须请求它们。您应该发现为什么您的应用程序或其框架需要这些,并在您的应用程序的 info.plist.

中添加适当的使用说明

或者更理想的情况是,如果您不需要访问权限,看看是否有办法不请求它(或使用不必要的框架)。

iOS 10 must add permission in info.plist 只需查看此 BLOG :- settings-in-ios-10 你得到所有的想法。

根据您的错误 日志在info.plist 文件中添加权限

Note: Write proper reason for permission in string value otherwise apple reject app again.

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSContactsUsageDescription

<key>NSContactsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSBluetoothPeripheralUsageDescription

<key>NSBluetoothPeripheralUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMicrophoneUsageDescription

<key>NSMicrophoneUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMotionUsageDescription

<key>NSMotionUsageDescription</key>
    <string>$(PRODUCT_NAME) motion use.</string>

NSLocationAlwaysUsageDescription

<key>NSLocationAlwaysUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationUsageDescription

<key>NSLocationUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationWhenInUseUsageDescription

<key>NSLocationWhenInUseUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSRemindersUsageDescription

<key>NSRemindersUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSiriUsageDescription

<key>NSSiriUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSVideoSubscriberAccountUsageDescription

<key>NSVideoSubscriberAccountUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSpeechRecognitionUsageDescription

<key>NSSpeechRecognitionUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSCalendarsUsageDescription

<key>NSCalendarsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

您可以在 info.plist 中添加:

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

等等

希望对某人有所帮助...

我遇到了同样的问题,看来如果您link反对的任何框架具有请求此权限的代码(即使您的应用从未请求过它们) , 用法说明是必要的。但是根据我的测试,如果你不请求它们,它们不会出现在你的应用程序的权限列表中。

日历: 密钥:隐私 - 日历使用说明
值:$(PRODUCT_NAME) 日历事件

温馨提示: 键:隐私 - 提醒使用说明
值:$(PRODUCT_NAME) 提醒使用

联系方式: 密钥:隐私 - 联系人使用说明
值:$(PRODUCT_NAME) 联系使用

照片: 关键:隐私 - 照片库使用说明
价值:$(PRODUCT_NAME) 照片使用

蓝牙共享: Key : Privacy - Bluetooth Peripheral Usage Description
价值:$(PRODUCT_NAME) 蓝牙外设使用

麦克风: 键:隐私 - 麦克风使用说明
值:$(PRODUCT_NAME) 麦克风使用

相机: 关键:隐私 - 相机使用说明
价值:$(PRODUCT_NAME) 相机使用

位置: 键:隐私 - 位置始终使用说明
值:$(PRODUCT_NAME) 位置使用

密钥:隐私 - 使用时的位置使用说明
值:$(PRODUCT_NAME) 位置使用

希思: 键:隐私 - Health Share 使用说明
价值:$(PRODUCT_NAME) 健康共享使用

密钥:隐私 - 健康更新使用说明
值:$(PRODUCT_NAME) 健康更新使用

HomeKit : 键:隐私 - HomeKit 使用说明
价值:$(PRODUCT_NAME) 主场球衣使用

媒体库: 键:隐私 - 媒体库使用说明
值:$(PRODUCT_NAME) 媒体库使用

运动: 键:隐私 - 运动使用说明
值:$(PRODUCT_NAME) 运动使用

语音识别: 密钥:隐私 - 语音识别使用说明
值:$(PRODUCT_NAME) 语音使用

SiriKit : 键:隐私 - Siri 使用说明
值:$(PRODUCT_NAME) siri 使用

电视提供商: 键:隐私 - 电视提供商使用说明
值:$(PRODUCT_NAME) tvProvider 使用

对于任何想知道为什么您的应用现在突然拥有所有这些权限设置的人来说,这可能是因为 CocoaPods 或 Carthage - 他们为所有这些权限设置了挂钩。我刚刚升级了我的应用程序以使用 cordova-plugin-firebasex,它具有广泛的 Cocoapods(和依赖项)安装。您可以在将 cocoapods 安装到您的项目之前关闭这些权限,方法是在您的项目的根目录中放置一个 PermissionsConfiguration.xcconfig - 您可以在这里阅读更多相关信息:https://cocoapods.org/pods/Permission#installation

当我的应用程序的新版本因 Info.plist 文件中缺少 7 个权限 key/string 而被拒绝时,这一切都让我感到惊讶。然后我不得不深入研究我的项目以找出导致此问题的原因,因为我的应用程序不需要或使用这些权限中的任何一个(从来没有)。

它可能存在,但目前我找不到在 pods 集成后删除权限的方法...将不得不深入研究如何在不重新开始我的项目的情况下执行此操作。