应用程序由于缺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使用