上传应用时忽略 Info.plist 中的 IOS 权限

Posted

技术标签:

【中文标题】上传应用时忽略 Info.plist 中的 IOS 权限【英文标题】:IOS permissions in Info.plist ignored when uploading app 【发布时间】:2019-11-27 20:44:18 【问题描述】:

我正在尝试为 ios 构建一个 ionic cordova 应用程序(到目前为止,我们只在这个项目上使用了 android 构建),我已经从头开始添加了 IOS 平台,内置于 cordova,然后打开了 Xcode 项目,构建,存档并上传。但随后我收到一封错误电子邮件,将“NSMicrophoneUsageDescription”和“NSSpeechRecognitionUsageDescription”的缺失条目重新分级到我的 info.plist 中。

所以我去添加了两条记录,并解释了它们在我的应用程序 info.plist 中的使用

    <key>NSMicrophone​Usage​Description</key>
    <string>The app uses speech to text input to capture notes, this requires microphone access</string>
    <key>NSSpeech​Recognition​Usage​Description</key>
    <string>The app uses speech to text input to capture notes, this requires speech recognition use</string>

我已验证这些记录最终会出现在构建文件 info.plist 中,然后我尝试上传,但我仍然收到拒绝电子邮件。

我认为它可能需要在需要这些权限的 API 的 info.plist 文件中,但即使在添加相同的值之后,我仍然会收到拒绝电子邮件。

我尝试在存档完成后从 Xcode 上传并获取 Xcode 存档,在其中浏览,只获取我的 .app,添加到名为 Payload 的文件夹,将其压缩并重命名为 .ipa 并将其上传到苹果,使用相同的响应。

上传文件时是否缺少某些文件命名或文件夹结构,我已检查它们是否都有苹果在所有 info.plist 文件中要求的记录,但我仍然收到完全相同的拒绝电子邮件上传时

编辑:来自苹果的拒绝电子邮件 " 尊敬的开发者, 我们发现您最近交付的应用程序“XXXX”7.XX (7.XX) 存在一个或多个问题。请更正以下问题,然后重新上传。 ITMS-90683:Info.plist 中缺少目的字符串 - 您的应用程序代码引用了一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应包含一个 NSMicrophoneUsageDescription 键和一个面向用户的目的字符串,清楚而完整地解释您的应用程序需要数据的原因。从 2019 年春季开始,所有提交到 App Store 的访问用户数据的应用程序都必须包含目的字符串。如果您使用的是外部库或 SDK,它们可能会引用需要目的字符串的 API。虽然您的应用可能不使用这些 API,但仍需要使用目的字符串。您可以联系库或 SDK 的开发人员,并要求他们发布不包含 API 的代码版本。了解更多信息 (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy)。 ITMS-90683:Info.plist 中缺少目的字符串 - 您的应用程序代码引用了一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应包含一个 NSSpeechRecognitionUsageDescription 键和一个面向用户的目的字符串,清楚而完整地解释您的应用程序需要数据的原因。从 2019 年春季开始,所有提交到 App Store 的访问用户数据的应用程序都必须包含目的字符串。如果您使用的是外部库或 SDK,它们可能会引用需要目的字符串的 API。虽然您的应用可能不使用这些 API,但仍需要使用目的字符串。您可以联系库或 SDK 的开发人员,并要求他们发布不包含 API 的代码版本。了解更多信息 (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy)。 App Store 团队 "

【问题讨论】:

你把它们放在正确的目标列表中了吗?以及您从 Apple 得到的具体回应是什么? 哪一个是正确的目标?我已将它添加到 -Info.plist (这会拉到档案 produscts\applications\.app)和请求麦克风访问(iSpeechSDK)的 api 的 info.plist 中。 应该是Info.plist,没有前缀。 存档中的文件称为“Info.plist”,在源文件中称为“-Info.plist”。 (我认为前缀是 ionic 想要的)。 所以你可能做错了 info.plist。这就是我可以告诉你的。 【参考方案1】:

首先,您需要清除派生数据。 将您的部署目标设置为 9.0 或更低,当您更改目标时,Xcode 会重置您的 info.plist。 使用以下命令准备您的 Cordova 应用程序:cordova prepare 准备好应用程序后,转到“-Info.plist”文件并添加以下说明。

  <key>NSMicrophone​Usage​Description</key>
  <string>The app uses speech to text input to capture notes, this requires microphone access</string>
  <key>NSSpeech​Recognition​Usage​Description</key>
  <string>The app uses speech to text input to capture notes, this requires speech recognition use</string>

归档您的应用程序并上传到应用商店。你不会被拒绝。

【讨论】:

以上是关于上传应用时忽略 Info.plist 中的 IOS 权限的主要内容,如果未能解决你的问题,请参考以下文章

IOS 应用程序在添加时在 info.plist 中缺少目的字符串

IOS 应用程序在添加时在 info.plist 中缺少目的字符串

Apple要求使用Parse-iOS-SDK对info.plist进行“NSLocationAlwaysUsageDescription”描述

iOS开发 Xcode中的Info.plist字段含义

ipa上传反馈请修改应用程序info.plist文件中相关用途字符串问题

将 ios 应用程序上传到 iTunes 连接时出错