应用程序由于缺less使用说明而被拒绝(Xcode8)
所以我今天收到了这封邮件,说我的应用程序的最新版本被iTunes Connect拒绝了,因为有一些丢失的使用说明。 确切地说:
此应用程序尝试访问隐私敏感的数据,没有使用说明。 应用程序的Info.plist必须包含一个带有string值的NSContactsUsageDescription键值,向用户解释应用程序如何使用这些数据。
此应用程序尝试访问隐私敏感的数据,没有使用说明。 应用程序的Info.plist必须包含一个带有string值的NSCalendarsUsageDescription项,向用户解释应用程序如何使用这些数据。
此应用程序尝试访问隐私敏感的数据,没有使用说明。 应用程序的Info.plist必须包含一个带有string值的NSPhotoLibraryUsageDescription项,向用户解释应用程序如何使用这些数据。
此应用程序尝试访问隐私敏感的数据,没有使用说明。 该应用程序的Info.plist必须包含一个带有string值的NSBluetoothPeripheralUsageDescription项,向用户解释应用程序如何使用此数据。
此应用程序尝试访问隐私敏感的数据,没有使用说明。 应用程序的Info.plist必须包含一个带有string值的NSMicrophoneUsageDescription项,向用户解释应用程序如何使用这些数据。
此应用程序尝试访问隐私敏感的数据,没有使用说明。 该应用程序的Info.plist必须包含一个带有string值的NSMotionUsageDescription键,向用户解释应用程序如何使用这些数据。
一旦这些问题得到纠正,您可以重新发送更正的二进制文件。
我发现这些在iOS 10中已经成为强制性的,但唯一的问题是,我的应用程序没有请求访问任何这些的权限..我以为只有在您实际请求权限时,描述才是必需的。
是否因为我的一个依赖(Cocoapods)可能包含一些代码来请求这些权限? 还是这些描述是强制性的,即使我从来没有要求查看用户日历,联系人等?
对于您或您链接的任何内容尝试访问的内容,这些描述是强制性的。 如果未提供使用说明,则尝试访问内容时会生成错误,因此,如果您收到错误,您的应用程序必须要求提供这些错误。 您应该了解为什么您的应用程序或框架需要这些内容,并在您的应用程序的info.plist中添加适当的使用说明。
或者更理想的是,如果你不需要访问,看看是否有办法不请求它(或使用不必要的框架)。
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>
你可以像添加你的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>
等等
希望会帮助别人…
我有同样的问题,看来如果你链接的任何框架有代码要求这个权限 (即使你的应用程序从不请求它们),使用描述是必要的。 但根据我的testing,如果你不请求他们,他们将不会出现在你的应用程序的权限列表。
日历:密钥:隐私 – 日历使用说明
值:$(PRODUCT_NAME)日历活动
提醒:关键:隐私 – 提醒使用说明
值:$(PRODUCT_NAME)提醒使用
联系人 :密钥:隐私 – 联系人使用说明
价值:$(PRODUCT_NAME)联系人使用
照片:关键:隐私 – 照片库使用说明
价值:$(PRODUCT_NAME)照片使用
蓝牙共享:密钥:隐私 – 蓝牙外围设备使用说明
价值:$(PRODUCT_NAME)蓝牙外设使用
麦克风:键:隐私 – 麦克风使用说明
价值:使用$(PRODUCT_NAME)麦克风
相机:密钥:隐私 – 相机使用说明
价值:$(PRODUCT_NAME)相机使用
位置:密钥:隐私 – 位置始终使用说明
值:$(PRODUCT_NAME)位置使用
关键:隐私 – 使用中的位置使用说明
值:$(PRODUCT_NAME)位置使用
Heath:关键:隐私 – 健康分享使用说明
价值:$(PRODUCT_NAME)健康共享使用
密钥:隐私 – 健康更新使用说明
值:$(PRODUCT_NAME)heath更新使用
HomeKit:密钥:隐私 – HomeKit使用说明
价值:$(PRODUCT_NAME)首页套件使用
媒体库:关键:隐私 – 媒体库使用说明
值:$(PRODUCT_NAME)媒体库使用
运动:键:隐私 – 运动使用说明
价值:$(PRODUCT_NAME)动议使用
语音识别:密钥:隐私 – 语音识别使用说明
价值:$(PRODUCT_NAME)语音使用
SiriKit:关键:隐私 – Siri使用说明
价值:$(PRODUCT_NAME)siri使用
电视提供商:关键:隐私 – 电视供应商使用说明
值:$(PRODUCT_NAME)tvProvider使用