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


91

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

这个应用程式尝试存取没有使用说明的隐私权敏感资料。该应用程序的Info.plist必须包含一个NSContactsUsageDescription键,该键具有一个字符串值,向用户解释该应用程序如何使用此数据。

这个应用程式尝试存取没有使用说明的隐私权敏感资料。应用程序的Info.plist必须包含NSCalendarsUsageDescription键,该键具有字符串值,向用户说明应用程序如何使用此数据。

这个应用程式尝试存取没有使用说明的隐私权敏感资料。该应用程序的Info.plist必须包含一个NSPhotoLibraryUsageDescription键,该键具有字符串值,该字符串值向用户说明该应用程序如何使用此数据。

这个应用程式尝试存取没有使用说明的隐私权敏感资料。该应用程序的Info.plist必须包含一个NSBluetoothPeripheralUsageDescription密钥,该密钥具有字符串值,该字符串值向用户说明该应用程序如何使用此数据。

这个应用程式尝试存取没有使用说明的隐私权敏感资料。该应用程序的Info.plist必须包含一个NSMicrophoneUsageDescription键,该键具有一个字符串值,向用户解释该应用程序如何使用此数据。

这个应用程式尝试存取没有使用说明的隐私权敏感资料。应用程序的Info.plist必须包含NSMotionUsageDescription键,该键具有字符串值,该字符串值向用户说明应用程序如何使用此数据。

解决这些问题后,您可以重新交付更正后的二进制文件。

我发现这些已成为iOS 10的强制性要求,但唯一的问题是我的应用程序未请求访问其中任何一项的权限。

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


3
根据我的经验-仅在您请求权限时这些才是必需的。因此,也许有些依赖性正在为您执行此操作。同样,所有这些权限都令人讨厌,尤其是在您的应用是简单的待办事项列表的情况下。也许某些依赖性正在成为网络钓鱼?
Eimantas

您可以张贴您PodFile和您使用的库的列表(如果您使用一些外部cocoapods)?
朱利安·奎尔

这是github.com/nickoneill/PermissionScope ..谢谢您的帮助!
KimHafr '16

explained解释并显示用法:iosdevcenters.blogspot.com/2016/09/…–
Saeid

我有完全同样的问题,我想它的原因是:荚“ReactNativePermissions”,:路径=>” ../node_modules/react-native-permissions'
luky

Answers:


33

对于您或您为防止访问而链接的任何框架的任何内容,描述都是必需的。如果未提供使用说明,则会在尝试访问内容时生成错误,因此,如果您遇到这些错误,则您的应用必须正在请求这些错误。您应该发现为什么您的应用程序或其框架需要这些应用程序,并将适当的使用说明添加到应用程序的info.plist中。

或更理想的情况是,如果不需要访问权限,请查看是否存在不请求访问权限的方法(或使用不必要的框架)。


11
我一生无法想象我会添加一个请求所有这些权限的库。但是当我找到它时,它是如此明显:github.com/nickoneill/PermissionScope
KimHafr

1
是的,这样的框架可能不是一个好主意,因为它会导致您的应用以超出所需的方式声明更多权限。
马修·希曼

3
我想这更多是功能而不是错误。.iTunes Connect检测到您的应用程序中某处可能有人请求权限。在这种情况下,您必须填写所有这些的用法说明,以防您可能实际上在权限范围内调用某些代码。我也喜欢该框架,但我不准备替换它。所以我填写了一些虚假的文字,并且该应用程序获得批准。我已将其提交到AppStore,所以希望它可以:-)
KimHafr

15
是否需要一种方法来检测哪个框架正在请求这些权限?
neobie '16

5
Neobie-您是否找到了如何检测请求权限的框架?
Nitesh

140

iOS 10必须在info.plist中添加权限,只需查看此博客即可:-settings -in-ios-10,您会明白的。

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

注意:在字符串值中写出允许的正确原因,否则Apple会再次拒绝应用程序。

NSCameraUsageDescription

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

NSContacts用法说明

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

NSPhotoLibrary使用说明

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

NS蓝牙外围设备使用说明

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

NSMicrophone使用说明

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

NSMotion用法说明

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

NSLocationWhenInUseUsesDescription

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

NSReminders用法说明

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

NSSiri用法说明

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

NSSpeechRecognition用法说明

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

NSCalendars用法说明

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

在此处输入图片说明


应该不是“ $ {PRODUCT_NAME}”而不是“ $(PRODUCT_NAME)”吗?“{}“ 代替 ”()”。
反斜杠-f

@ backslash-f,请检查新项目中现有的plist文件,该文件应为$(PRODUCT_NAME)。您可以Bundle name在plist文件中看到默认属性。
Jayesh Thanki

1
请注意,像这样的通用描述将不再使您通过App Store的批准。我们只是为了类似的描述而两次被叮咬。你要描述真实使用率人
O'Rooney

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>

等等

希望能帮助某人...


6

我遇到了同样的问题,而且看来,如果您链​​接的任何框架都具有要求此许可的代码(即使您的应用程序从未请求过此许可),使用说明也很有必要。但是根据我的测试,如果您不请求它们,它们将不会出现在您应用的权限列表中。


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)home kit use

媒体库: 密钥:隐私权-媒体库的使用情况说明
值:$(PRODUCT_NAME)媒体库的使用

动作: 密钥:隐私-动作用法说明
值:$(PRODUCT_NAME)动作使用

语音识别: 密钥:隐私-语音识别用法描述
值:$(PRODUCT_NAME)语音使用

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

电视提供商: 密钥:隐私-电视提供商使用情况描述
值:$(PRODUCT_NAME)电视提供商使用


0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.