【问题标题】:App rejected due to missing usage descriptions (Xcode8)应用因缺少使用说明而被拒绝 (Xcode8)
【发布时间】:2017-01-17 20:37:52
【问题描述】:

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

此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSContactsUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。

此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSCalendarsUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。

此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSPhotoLibraryUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。

此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSBluetoothPeripheralUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。

此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSMicrophoneUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。

此应用尝试在没有使用说明的情况下访问隐私敏感数据。应用的 Info.plist 必须包含一个 NSMotionUsageDescription 键和一个字符串值,向用户解释应用如何使用这些数据。

一旦这些问题得到纠正,您就可以重新交付纠正后的二进制文件。

我发现这些已成为 iOS 10 的强制要求,但唯一的问题是我的应用程序没有请求访问其中任何一个的权限。我认为只有在您实际请求权限时才能强制说明?

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

【问题讨论】:

  • 根据我的经验 - 只有当您请求权限时,这些才是必需的。因此,也许某些依赖项正在为您执行此操作。此外,所有这些权限都闻起来很可疑,尤其是如果您的应用程序是一个简单的待办事项列表。也许某些依赖项正在进行网络钓鱼?
  • 您能否发布您的PodFile 和您使用的库列表(如果您使用一些外部的 cocoapods)?
  • 它是github.com/nickoneill/PermissionScope .. 感谢您的帮助!
  • ُ他的解释和展示用法:iosdevcenters.blogspot.com/2016/09/…
  • 我有完全相同的问题,我猜它是由以下原因引起的:pod 'ReactNativePermissions', :path => '../node_modules/react-native-permissions'

标签: ios app-store-connect ios10 xcode8


【解决方案1】:

iOS 10 必须在 info.plist 中添加权限,只需查看此BLOG :- settings-in-ios-10 即可。

info.plist 文件中根据您的 错误 日志

添加权限

注意:在字符串值中写下正确的许可理由,否则苹果会再次拒绝应用程序。

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>

【讨论】:

  • 不应该是“${PRODUCT_NAME}”而不是“$(PRODUCT_NAME)”吗? “{}”而不是“()”。
  • @backslash-f,请检查新项目中现有的 plist 文件,它应该是$(PRODUCT_NAME)。您可以在 plist 文件中看到像 Bundle name 这样的默认属性。
  • 请注意,这样的通用描述将不再让您获得应用商店的批准。我们只是因为类似的描述而被叮了两次。您必须描述人类的实际用途
【解决方案2】:

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

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

【讨论】:

  • 我无法想象我会添加一个请求所有这些权限的库。但是当我发现它时它是如此明显:github.com/nickoneill/PermissionScope
  • 是的,这样的框架可能不是一个好主意,因为它会导致您的应用声明的权限比它需要的多。
  • 我想这更像是一个功能而不是一个错误。iTunes Connect 检测到您的应用程序中的某个地方,有人可能会请求权限。在这种情况下,您必须为所有这些填写使用说明,以防您实际调用权限范围内的某些代码。我也喜欢这个框架,我还没有准备好替换它。所以我填写了一些虚假的文字,该应用程序被批准了。我已经将它提交到 AppStore,所以希望它会没事 :-)
  • 需要一种方法来检测哪个框架正在请求这些权限?
  • Neobie - 你找到如何检测请求权限的框架了吗?
【解决方案3】:

您可以在 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>

等等

希望能帮助别人...

【讨论】:

    【解决方案4】:

    我遇到了同样的问题,如果您链​​接到的任何框架有请求此权限的代码(即使您的应用从未请求它们),使用说明似乎也是必要的。但是根据我的测试,如果你不请求它们,它们就不会出现在你应用的权限列表中。

    【讨论】:

      【解决方案5】:

      日历: 键:隐私 - 日历使用说明
      价值:$(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) 动作使用

      语音识别: Key : Privacy - 语音识别使用说明
      价值:$(PRODUCT_NAME) 语音使用

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

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

      【讨论】:

        【解决方案6】:

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

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

        它可能存在,但目前我找不到在 pod 集成后删除权限的方法......必须在不重新开始我的项目的情况下挖掘如何做到这一点。

        【讨论】:

          猜你喜欢
          • 2017-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-30
          • 1970-01-01
          • 2023-03-11
          • 1970-01-01
          • 2011-08-11
          相关资源
          最近更新 更多