所以我今天收到这封邮件说我的应用程序的最新版本被iTunes Connect拒绝了,原因是一些用户说明丢失了。确切地说:
此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSContactsUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。
此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSCalendarsUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。
此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSPhotoLibraryUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。
此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSBluetoothPeripheralUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。
此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSMicrophoneUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。
此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用程序的Info.plist必须包含一个NSMotionUsageDescription键,其中包含一个字符串值,向用户解释应用程序如何使用此数据。
一旦纠正了这些问题,您就可以重新更新已更正的二进制文件。
我发现这些已经成为iOS 10的必备条件,但唯一的问题是我的应用程序没有请求访问任何这些的权限..我认为只有在您真正请求权限时才需要说明吗?
是因为我的某个依赖项(Cocoapods)可能包含一些代码来请求这些权限吗?或者即使我从未要求查看用户日历,联系人等,这些描述也是强制性的吗?
答案 0 :(得分:135)
iOS 10 必须在 info.plist 中添加权限,只需查看此BLOG :- settings-in-ios-10即可。
错误日志中的 info.plist 文件中添加权限。
<强> NSCameraUsageDescription 强>
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) camera use.</string>
<强> NSContactsUsageDescription 强>
<key>NSContactsUsageDescription</key>
<string>$(PRODUCT_NAME) contacts use.</string>
<强> NSPhotoLibraryUsageDescription 强>
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) photos and video use.</string>
<强> NSBluetoothPeripheralUsageDescription 强>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>$(PRODUCT_NAME) bluetooth use.</string>
<强> NSMicrophoneUsageDescription 强>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) microphone use.</string>
<强> NSMotionUsageDescription 强>
<key>NSMotionUsageDescription</key>
<string>$(PRODUCT_NAME) motion use.</string>
<强> NSLocationAlwaysUsageDescription 强>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
<强> NSLocationUsageDescription 强>
<key>NSLocationUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
<强> NSLocationWhenInUseUsageDescription 强>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) location use.</string>
<强> NSRemindersUsageDescription 强>
<key>NSRemindersUsageDescription</key>
<string>$(PRODUCT_NAME) reminders use.</string>
<强> NSSiriUsageDescription 强>
<key>NSSiriUsageDescription</key>
<string>$(PRODUCT_NAME) siri use.</string>
<强> NSVideoSubscriberAccountUsageDescription 强>
<key>NSVideoSubscriberAccountUsageDescription</key>
<string>$(PRODUCT_NAME) video use.</string>
<强> NSSpeechRecognitionUsageDescription 强>
<key>NSSpeechRecognitionUsageDescription</key>
<string>$(PRODUCT_NAME) speech recognition use.</string>
<强> NSCalendarsUsageDescription 强>
<key>NSCalendarsUsageDescription</key>
<string>$(PRODUCT_NAME) user your calendar.</string>
答案 1 :(得分:32)
对于您或您链接的任何内容尝试访问的任何内容,这些描述都是必需的。如果未提供使用说明,则在尝试访问内容时会生成错误,因此如果您收到这些错误,您的应用必须请求它们。您应该发现您的应用或其框架需要这些内容的原因,并在您的应用的info.plist中添加适当的使用说明。
或者更理想的情况是,如果您不需要访问权限,请查看是否有办法不请求它(或使用不必要的框架)。
答案 2 :(得分:9)
您可以添加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>
等
希望能帮助别人......答案 3 :(得分:6)
我遇到了同样的问题,看来如果您链接到的任何框架都有要求此权限的代码(即使您的应用从不请求它们),也必须使用这些用法说明。但根据我的测试,如果您没有请求它们,它们就不会出现在您应用的权限列表中。
答案 4 :(得分:3)
日历:
密钥:隐私 - 日历用法说明
价值:$(PRODUCT_NAME)日历活动
提醒:
密钥:隐私 - 提醒使用说明
价值:$(PRODUCT_NAME)提醒使用
联络:
密钥:隐私 - 联系人使用说明
价值:$(PRODUCT_NAME)联系人使用
照片:
关键:隐私 - 照片库使用说明
价值:$(PRODUCT_NAME)照片使用
蓝牙共享
密钥:隐私 - 蓝牙外围设备使用说明
价值:$(PRODUCT_NAME)蓝牙外围设备使用
麦克风:
密钥:隐私 - 麦克风使用说明
价值:$(PRODUCT_NAME)麦克风使用
相机:
密钥:隐私 - 相机使用说明
价值:$(PRODUCT_NAME)相机使用
位置:
密钥:隐私 - 位置始终使用说明
价值:$(PRODUCT_NAME)位置使用
密钥:隐私 - 使用时的位置用法说明
价值:$(PRODUCT_NAME)位置使用
希思:
关键:隐私 - 健康共享使用说明
价值:$(PRODUCT_NAME)健康分享使用
密钥:隐私 - 健康更新使用说明
价值:$(PRODUCT_NAME)希捷更新使用
HomeKit:
密钥:隐私 - HomeKit用法说明
价值:$(PRODUCT_NAME)家庭套件使用
媒体库:
密钥:隐私 - 媒体库使用说明
价值:$(PRODUCT_NAME)媒体库使用
动作
密钥:隐私 - 动作使用说明
价值:$(PRODUCT_NAME)动作使用
语音识别:
密钥:隐私 - 语音识别用法说明
价值:$(PRODUCT_NAME)演讲使用
SiriKit:
密钥:隐私 - Siri用法说明
价值:$(PRODUCT_NAME)siri使用
电视提供商:
密钥:隐私 - 电视提供商使用说明
价值:$(PRODUCT_NAME)tvProvider使用
答案 5 :(得分:0)
对于想知道为什么您的应用程序突然之间现在拥有所有这些权限设置的人,可能是因为CocoaPods或Carthage引起的,他们对所有这些权限都产生了迷惑。我刚刚升级了我的应用程序,以使用cordova-plugin-firebasex,它具有广泛的Cocoapods(和依赖项)安装。您可以在将cocoapods安装到项目中之前关闭这些权限,方法是将PermissionsConfiguration.xcconfig放在项目的根目录中–您可以在此处了解更多信息:https://cocoapods.org/pods/Permission#installation
当我的应用程序的新版本被Info.plist文件中缺少7个权限密钥/字符串拒绝时,这一切令我感到惊讶。然后,我不得不深入研究我的项目,以找出造成此问题的原因,因为我的应用不需要或不使用任何这些权限(从没有)。
它可能存在,但目前在pods集成后我找不到删除权限的方法...必须在不重新开始我的项目的情况下深入研究如何执行此操作。