Appstore connect 错误: Info.plist 文件中缺少目的字符串

我已经把我的应用程序提交到应用程序商店连接上进行审查。虽然该应用程序仍在审查中,我已经收到一封电子邮件,通知我,我必须修复一个错误。以下是信息的内容:

亲爱的开发者:

我们发现了一个或多个与您的应用程序最近交付的问题 你的交付是成功的,但你可能希望纠正 以下是你下一次演讲中的问题:

”Info.plist 文件中缺少目的字符串。您的应用程序的代码 引用一个或多个访问敏感用户数据的 API App 的 Info.plist 文件应该包含一个 具有面向用户目的的 NSLocationAlwaysUsageDescription 键 字符串清楚和完整地解释为什么你的应用程序需要这些数据。 从2019年春季开始,所有提交到应用商店的应用都可以访问 用户数据将需要包含一个用途字符串 使用外部库或 SDK,它们可能会引用 虽然你的应用程序可能不会使用这些 API,但是 目的字符串仍然是必需的。您可以联系 程序库或 SDK,并要求他们发布代码的一个版本 不包含 API。

纠正了问题之后,可以使用 Xcode 或 Application 加载程序将新的二进制文件上传到 iTunes Connect。

最好的问候,

应用程序商店团队

我的应用程序完全是用 Expo 构建的,我不知道如何访问和修改 Info.plist。

知道吗?

120754 次浏览

我们确实收到了相同的电子邮件,而且我们根本没有使用 CoreLocation。经过快速搜索,我们发现 ParseSDK 可以使用 CoreLocation。在苹果的电子邮件中,他们明确表示:

如果您使用的是外部库或 SDK,它们可能会引用需要特定字符串的 API。

这意味着一旦您的代码或任何其他库或 SDK 可以使用 CoreLocation,即使您不使用它,您需要提供“何时使用”和“始终使用”的隐私描述。

这也是来自苹果的新东西,现在它只是一个警告,但它将在2019年春季开始需要新的提交。

发生这个问题是因为您没有包括

 <NSLocationAlwaysUsageDescription>

你的应用程序。当我试图在 AppStore 上提交我的应用程序时,我面临着同样的问题。处理完应用程序后,我收到了同样的邮件。我刚刚添加了描述,现在已经解决了。

希望这个能帮上忙。

我有一些应用程序在商店里,我试图发布一个版本的质量保证和同样的事情发生在两个不同的应用程序。 我认为这是一个接受构建上传到 Appstore 连接的新标准。

解决方案很简单,在.plist 文件中添加以下行。

< key > NSLocationAlwaysUsageDescription
< string > 自定义消息
< key > NSLocationWhenInUseUsageDescription
< string > 自定义消息

PS: 在我的案例中没有使用任何位置特性,但是我添加了这些线条以符合 Appstore 连接指导方针。顺便说一下,在收到那封邮件后,我可以测试应用程序,即使他们说构建它有一些问题。

我希望这对你们有用。

编辑2019年4月 : 随着2019年春天的到来,你现在必须加上这两个键。请注意,NSLocationAlwaysUsageDescription现在已被废弃(自 iOS11以来) ,并已被 NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription所取代。如果你想支持低于 iOS11的操作系统,你必须使用这三个值。

总而言之,你必须:

  • 为 iOS11等添加 NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription
  • 如果你想支持 iOS10或更少的版本,可以添加 NSLocationAlwaysUsageDescription
  • 最后,如果你想支持 iOS8或更少,你可以添加 NSLocationUsageDescription


你可以提交你的应用程序,即使你得到这个消息!

我昨天也遇到了同样的问题,即使应用程序没有使用定位功能。它可能与项目中包含的具有此可选特性的某个框架有关。

我可以确认我的应用程序已被批准 即使没有 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription键在 info.plist

事实上,正如苹果在邮件中所说:

从2019年春天开始,所有的应用程序都提交到应用程序商店 访问用户数据将需要包括一个目的 绳子。

因此,唯一要做的事情就是在项目中添加这个键(现在更好,这样您就不会忘记) ,这样它就包含在 下次更新中。

只需在 info.plist中添加两个新条目,使用 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription作为键,并简要说明为什么要使用它们作为值(即使实际上并没有使用它们...)。

# # 在 info.plist 文件中使用此键

NSLocationAlwaysUsageDescription 您的位置对于您的 NSLocationWhenInUseUsageDescription 的 xyz 好处是必需的 你的位置是为你的某利益所需要的

这些答案都告诉你如何遵守应用程序商店的规则,以避免这种警告,但真正的解决方案是,Expo 允许你禁用位置服务的 SDK 要求,除非你实际使用它们——我不确定这是否可行。

如果你正在使用 Expo,你可以像这样通过将 infoPlist 添加到 app.json 来添加解决方案:

  "expo": {
"ios": {
"bundleIdentifier": "com.app.myapp",
"infoPlist": {
"NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
},
},
}

世博会文件

有以下情况:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

苹果表示:

NSLocationWhenInUseUsageDescription键和 NSLocationAlwaysAndWhenInUseUsageDescription键添加到 Info.plist文件中。

以及:

如果您的应用程序支持 iOS10或更早版本,请添加 NSLocationAlwaysUsage

NSLocationUsageDescription似乎死了,在 ADC 网站上唯一的参考是: Https://developer.apple.com/ibeacon/getting-started-with-ibeacon.pdf

为了确保万无一失,请使用前三个。

我的应用程序也得到了这一点,我没有做什么,但它可以运行良好,下次我认为应该添加这样的关键在 plist,只是做一些描述

这是苹果的一个新要求,即使你不使用位置。如果你想在 Xcode 添加权限,查找“隐私-位置使用说明”和“隐私-使用时的位置使用说明”,并为每个都键入一个自定义字符串。

enter image description here

为了更加简化,您可以在 info.plist 中添加这些行

  1. 作为源代码打开 info.plist。
  2. 在清单中添加以下行

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    

同样的问题在2月19日,收到了一个电子邮件与许多权限我没有使用,我认为他们是从插件。苹果公司在3月19日说这是一个需求,所以我在 info.plst 中添加了这些,然后再次上传。

确实很愚蠢。

是的 <key>NSLocationWhenInUseUsageDescription </key> 而不是 <key>NSLocationWhenInUseUsageDescription</key>

一定要删除尾随的空格

我也面临同样的问题,但27小时后,我收到了电子邮件批准,即使我什么也没有做。因此,等待大约24小时,而不是再次进行所有这些过程。

请检查您收到的电子邮件从 * * 应用程序商店连接 * *

找出丢失的钥匙 enter image description here

说明

  1. 打开 info.plist 文件。

  2. 从提供的选项中添加并搜索缺少的密钥(例如,联系人 = 隐私-联系人使用说明)

  3. 添加用法描述:

$(PRODUCT _ NAME)需要访问联系人以“提供此处的原因”。

例如:

使用 Xcode 11复制键 NSLocationAlwaysUsageDescription并将其添加到 Info-> Custom iOS Target Properties-> 单击此选项卡左下角的 +,作为一个值插入某种类型的描述,如 This app requires location access to function properly.

对上述问题的简短回答是-

必须使用 Info.plist 文件中的以下描述更新 NSLocationAlwaysUsageDescription

{您的应用程序名称}需要访问该位置才能提示登革热 疫情爆发区。

”Info.plist 文件中缺少目的字符串。应用程序的代码引用一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应该包含一个 NSLocationAlwaysUsageDescription 键,该键带有一个面向用户的目的字符串,清楚而完整地解释了为什么你的应用程序需要这些数据。从2019年春季开始,所有提交到 App Store 的访问用户数据的应用都需要包含一个用途字符串。如果你使用的是外部库或 SDK,它们可能会引用需要用途字符串的 API。虽然您的应用程序可能不使用这些 API,但仍然需要一个用途字符串。您可以与库或 SDK 的开发人员联系,请求他们发布不包含 API 的代码版本。

打开 Info.plist作为源代码。
在清单中添加以下行

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>

在我们的例子中,我们在应用程序中使用的是 NSLocationWhenInUseUsageDescription,而不是 NSLocationAlwaysUsageDescription

从注释 给你(感谢 matt-oakes)中可以看出,我们使用的依赖框架之一正在使用 NSLocationAlwaysUsageDescription

运行我们的应用程序,它没有显示实际的 NSLocationAlwaysUsageDescription 权限模式,所以它看起来只是在后台处理这个问题。

所以总的来说,将 NSLocationAlwaysUsageDescription添加到 Info.plist 修复了警告电子邮件,并且没有改变应用程序中的任何行为