ChatGPT解决这个技术问题 Extra ChatGPT

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

我已将我的应用程序提交给 App Store Connect 以供审核。尽管该应用程序仍在审核中,但我收到了一封电子邮件,通知我必须修复错误。以下是邮件内容:

尊敬的开发人员, 我们发现您的应用 XXXXX 最近交付的一个或多个问题。您的交付成功,但您可能希望在下次交付时更正以下问题:“Info.plist 文件中缺少目的字符串。您的应用代码引用了一个或多个访问敏感用户数据的 API。应用的 Info.plist 文件应该包含一个 NSLocationAlwaysUsageDescription 键和一个面向用户的目的字符串,清楚而完整地解释为什么你的应用需要数据。从 2019 年春季开始,所有提交到 App Store 并访问用户数据的应用都需要包含一个目的字符串。如果你是使用外部库或 SDK,它们可能会引用需要目的字符串的 API。虽然您的应用可能不使用这些 API,但仍需要目的字符串。您可以联系库或 SDK 的开发人员并请求他们发布其版本不包含 API 的代码。纠正问题后,您可以使用 Xcode 或 Application Loader 将新的二进制文件上传到 iTunes Connect。此致,App Store 团队

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

任何想法?

鉴于我什至没有在我的应用程序中使用定位服务,我在最新版本中遇到了同样的问题。苹果没有关于这一变化的官方文件。
+1 两天前发布了同一个应用程序,一切都很好。 2 天后,只是更改了几行代码来发布新版本(没有添加更多 Pod 或类似的东西),我收到了这条消息
我们遇到过同样的问题。我怀疑这是审批过程中的一个错误(希望如此)。周末我会忽略,希望周一能修好。
我刚才遇到了同样的问题,尽管我们的应用程序并不总是需要位置服务。它只需要我们已经有一个目的字符串的 NSLocationWhenInUseUsageDescription 。可能这只是苹果端的一个小故障?
在 Apple 模式下,他们在电子邮件中提供的修复它的链接已损坏。

A
AnthoPak

2019 年 4 月编辑:您现在必须添加这两个键,因为 2019 年春季已经开始。请注意,现在已弃用 NSLocationAlwaysUsageDescription(自 iOS 11 起)并已替换为 NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription。如果要支持低于 iOS 11 的版本,则必须使用这三个值。

总结一下,你必须:

为 iOS 11 和更多版本添加 NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription

如果您想支持 iOS 10 及更低版本,请添加 NSLocationAlwaysUsageDescription

最后,如果您想支持 iOS 8 及更低版本,您可以添加 NSLocationUsageDescription。

即使您收到此消息,您也可以提交您的应用程序!

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

即使没有 info.plist 中的 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription 键,我也可以确认我的应用已获得批准

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

从 2019 年春季开始,所有提交到 App Store 并访问用户数据的应用都需要包含目的字符串。

所以唯一要做的就是在你的项目中添加这个密钥(现在更好,这样你就不会忘记),这样它就会包含在你的下一次更新中。

只需在您的 info.plist 中添加两个新条目,将 NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription 作为键,并简要说明您使用它们作为值的原因(即使您并没有真正使用它们......)。


在您 2019 年 4 月的编辑中,您确定没有撤销弃用吗?从我看到的 NSLocationUsageDescription 是不推荐使用的。看这里:developer.apple.com/library/archive/documentation/General/…
我从苹果收到的电子邮件提到了 NSLocationAlwaysUsageDescription 所以我认为他把它颠倒了。
@apricity @DrorBar 对不起,伙计们,我确实犯了一个错误。它没有反转,但仍然有错误,NSLocationAlwaysUsageDescription 应该替换为 NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription ,而不是替换为 NSLocationUsageDescription(正如我之前写的,对不起......)。我已经更新了我的答案以添加对该过程的总结。
g
gwalshington

如果您使用的是 Expo,您可以通过将 infoPlist 添加到 app.json 来添加解决方案,如下所示:

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

Expo Docs


实际上,这不是“安抚苹果的一些信息”,而是让用户知道在这种情况下你对用户生成的数据(位置)做了什么。这是一个隐私问题,我认为对您的应用程序用户公平是件好事。
明白了!我在想可能会想离开它的新手!我不想听起来脾气暴躁:) 干杯!
@gwalshington 我在 app.json 中没有任何 expo 对象
@HeemanshuBhalla 嗯,我不确定为什么。在我的 app.json 中,它位于顶部并且是第一个声明的对象。这是您声明版本号、捆绑标识符等的地方。如果您已退出应用程序,它看起来可能略有不同?
如果我们不收集位置数据,应该输入什么文本?我们需要编造一个谎言:S
v
vroldan

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

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

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS:就我而言,没有使用任何位置功能,但我添加了这些行以符合 Appstore 连接指南。顺便说一句,在收到那封电子邮件后,即使他们说构建它有一些问题,我也可以测试该应用程序。

我希望这对你们有用。


哇,我刚得到这个,意识到每个人也都得到这个!
到目前为止,第一个键已更改为 <key>NSLocationUsageDescription</key>
更新 info.plist 后是否需要重新归档?
我是否必须增加捆绑版本或版本号才能上传新的二进制文件?
@BishoyHanna 是的! Dror 酒吧 是的!
J
Juan José Ramírez

即使您不使用位置,这是苹果的新要求。如果要在 Xcode 中添加权限,请查找“Privacy - Location Usage Description”和“Privacy - Location When In Use Usage Description”,并为每个输入自定义字符串。

https://i.stack.imgur.com/PjRhM.png


在其他应用程序更新中,Apple 也请求了此权限:“Privacy - Location Always Usage Description”
所以如果我不使用这些功能,我必须在那里写什么,一个谎言,比如“收集位置以备将来使用,也许”?
是的,如果他们有问题,苹果会联系你
我无法在我的 xcode 10.1 中找到信息属性列表,您应该提到在哪里可以找到它,我已经为目标和项目查找了构建设置
好的,所以 Targets->Info->Custom ios Target Properties 是确切的位置
S
Sachin Nautiyal

为了更加简化,您可以在 info.plist 中添加这些行。出现这些错误是因为从 2019 年春季开始,所有提交到 App Store 并访问用户数据的应用都需要包含目的字符串。

打开 info.plist 作为源代码。在您的 plist 中添加以下这些行 NSLocationAlwaysAndWhenInUseUsageDescription $(PRODUCT_NAME) 出于“某种原因”需要位置访问权限! NSLocationWhenInUseUsageDescription $(PRODUCT_NAME)出于“某种原因”需要位置访问权限! NSLocationAlwaysUsageDescription $(PRODUCT_NAME) 出于“某种原因”需要位置访问权限!


我必须删除 标签中的多余空格,然后它才起作用。
@innich 谢谢你指出,我已经改变了我的答案。
S
Sumit Sharma

NSLocationAlwaysUsageDescription 您的 xyz 福利需要您的位置 NSLocationWhenInUseUsageDescription 您的 xyz 福利需要您的位置


J
JJJ

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

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

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

这也是 Apple 的一项新功能,目前这只是一个警告,但从 2019 年春季开始,新提交将需要它。


这只是愚蠢的......如果我不使用它,它可能会让人们不下载我的应用程序只是因为那个。 -_-
并不真地。除非在代码中的某处调用了 CLLocationManager.requestWhenInUseAuthorization(),否则不会显示要求您使用本地化的警报。苹果分析了每个应用程序代码,看看是否可以调用这样的函数。如果它从未被调用,则不会显示警报。
B
Boken

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

Info.plist 作为源代码打开。
在您的 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>

S
Sachin Nautiyal

出现此问题是因为您尚未包含

 <NSLocationAlwaysUsageDescription>

为您的应用程序。当我尝试在 AppStore 上提交我的应用程序时,我遇到了同样的问题。应用程序处理完毕后,我收到了相同的邮件。我刚刚添加了描述,现在它已解决。

希望这可以帮助。


这对我有帮助。如果您在应用程序中使用 Location(或者可能只是一直使用),则需要在其下方添加此行和一个字符串。 <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
L
LinusGeffarth

有以下几种情况:

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

苹果在:

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

和:

如果您的应用支持 iOS 10 及更早版本,请添加 NSLocationAlwaysUsage

NSLocationUsageDescription 似乎已死,ADC 站点中唯一的参考是:https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

所以可以肯定的是,使用前 3 个。


C
Calvin

这些答案都告诉您如何遵守 App Store 规则以避免警告,但真正的解决方法是让 Expo 允许您禁用他们对定位服务的 SDK 要求,除非您实际使用它们 - 我不确定这是否是可能的。


P
Panda Power

2 月 19 日的同一问题,收到一封电子邮件,其中包含我没有使用的一堆权限,我假设它们来自插件。 Apple 在 3 月 19 日表示这是一项要求,因此我将这些添加到 info.plst 并再次上传。

这确实很愚蠢。


更多评论真的......?
M
Michael van de Waeter

我有 <key>NSLocationWhenInUseUsageDescription </key> 而不是 <key>NSLocationWhenInUseUsageDescription</key>

确保删除尾随空格


A
Abdul Qayum

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


是的,这是一个错误!
d
dbrownjave

请查看您从 **App Store Connect ** 收到的电子邮件

https://i.stack.imgur.com/TSW3Z.png

指示

打开 info.plist 文件。添加并从提供的选项中搜索缺少的密钥(例如联系人 = 隐私 - 联系人使用说明) 添加使用说明:

$(PRODUCT_NAME) 需要“在此处提供原因”的联系人访问权限。

https://i.stack.imgur.com/6neIT.png


先生,我遇到了同样的错误,但为什么添加到 info.plist 实际上我没有在我的应用程序中使用联系人功能,所以为什么我们需要添加它?
@Kapilsoni 请确保您没有访问一个或多个可以访问敏感用户数据的 API
:先生,我在我的应用程序中只使用了相机和位置?
D
Daniel Danielecki

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


l
liunianhuaguoyanxi

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


S
Soman Dubey

对上述问题的简短回答——

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

{Your App Name} 需要访问该位置才能建议登革热爆发区。


H
Harry Bloom

在我们的例子中,我们在应用程序中使用了 NSLocationWhenInUseUsageDescription,但没有使用 NSLocationAlwaysUsageDescription

阅读评论 here(感谢 matt-oakes),我们使用的依赖框架之一似乎正在使用 NSLocationAlwaysUsageDescription

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅