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

时间:2018-08-24 10:25:42

标签: ios app-store expo appstore-approval info.plist

我已将我的应用提交给Appstore Connect进行审核。尽管该应用仍在审核中,但我已经收到一封电子邮件,通知我必须纠正错误。这是消息的内容:

    Dear Developer,

    We identified one or more issues with a recent delivery for your 
    app XXXXX. Your delivery was successful, but you 
    may wish to correct the following issues in your next delivery:

    "Missing Purpose String in Info.plist File. Your app's code 
    references one or more APIs that access sensitive user data. The 
    app's Info.plist file should contain a 
    NSLocationAlwaysUsageDescription key with a user-facing purpose 
    string explaining clearly and completely why your app needs the 
    data. Starting spring 2019, all apps submitted to the App Store 
    that access user data will be required to include a purpose 
    string.If you're using external libraries or SDKs, they may 
    reference APIs that require a purpose string. While your app might 
    not use these APIs, a purpose string is still required. You can 
    contact the developer of the library or SDK and request they 
    release a version of their code that doesn't contain the APIs. 


     After you’ve corrected the issues, you can use Xcode or 
     Application Loader to upload a new binary to iTunes Connect.

     Best regards,

     The App Store Team

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

有什么想法吗?

19 个答案:

答案 0 :(得分:33)

我的商店中有一些应用程序,我试图分发质量检查版本,并且在两个不同的应用程序中也发生了同样的事情。 我认为这是接受将构建上传到Appstore Connect的新标准。

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

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS:在我的情况下,没有使用任何位置功能,但我添加了以下几行以符合Appstore连接准则。顺便说一句,在收到该电子邮件后,即使他们说该应用存在一些问题,我也可以对其进行测试。

我希望这对你们有用。

答案 1 :(得分:32)

编辑2019年4月:随着2019年春季的开始,您现在必须添加这两个键。请注意,NSLocationAlwaysUsageDescription现在已弃用,并已替换为NSLocationUsageDescription

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

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

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

确实如苹果在邮件中所述:

  

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

因此,唯一要做的就是在项目中添加此密钥(现在更好,这样您就不会忘记),以便将其包含在下一次更新中。< / p>

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

答案 2 :(得分:24)

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

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

Expo Docs

答案 3 :(得分:9)

这是Apple的一项新要求,即使您不使用位置信息也是如此。如果要在Xcode中添加权限,请查找“隐私-位置使用情况描述”和“隐私-使用中的位置使用情况描述”,然后为它们中的每一个键入一个自定义字符串。

enter image description here

答案 4 :(得分:7)

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

NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription对您的xyz福利要求您的位置 为您提供xyz福利需要您的位置

答案 5 :(得分:6)

我们确实收到了相同的电子邮件,并且根本没有使用CoreLocation。快速搜索后,我们发现Parse SDK可以使用CoreLocation。他们在Apple的电子邮件中清楚地说:

  

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

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

这也是Apple的新功能,目前仅是警告,但从2019年春季开始将需要新的提交内容。

答案 6 :(得分:5)

为进一步简化,您可以在info.plist中添加这些行。之所以会出现这些错误,是因为从2019年春季开始,提交给App Store的所有访问用户数据的应用都必须包含目标字符串。

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

答案 7 :(得分:4)

由于未包含

,因此出现了此问题
 <NSLocationAlwaysUsageDescription>

针对您的应用。当我尝试在AppStore上提交我的应用程序时,我遇到了同样的问题。处理完应用程序后,我收到了相同的邮件。我刚刚添加了说明,现在解决了。

希望这会有所帮助。

答案 8 :(得分:4)

所以我们现在有4种情况。

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

Apple声明:

"Add the NSLocationWhenInUseUsageDescription key and the NSLocationAlwaysAndWhenInUseUsageDescription key to your Info.plist file."

并且:

"If your app supports iOS 10 and earlier, add the NSLocationAlwaysUsage"

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

因此请确保先使用3。

答案 9 :(得分:2)

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

答案 10 :(得分:1)

2月19日的同一期杂志,收到一封包含大量我未使用的权限的电子邮件,我认为它们来自插件。苹果在3月19日表示这是一项要求,因此我将其添加到info.plst中并再次上传。

确实很愚蠢。

答案 11 :(得分:1)

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

答案 12 :(得分:1)

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

识别丢失的密钥 enter image description here

说明

  1. 打开info.plist文件。

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

  3. 添加用法说明:

  

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

示例:

答案 13 :(得分:1)

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

答案 14 :(得分:1)

上述问题的简短答案-

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

  

{您的应用名称}需要访问该位置以建议登革热   暴发区。

答案 15 :(得分:0)

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

答案 16 :(得分:0)

我有 <key>NSLocationWhenInUseUsageDescription </key> 代替 <key>NSLocationWhenInUseUsageDescription</key>

确保删除尾随空格

答案 17 :(得分:0)

“ Info.plist文件中的缺少目的字符串。您的应用程序的代码引用了一个或多个访问敏感用户数据的API。该应用程序的Info.plist文件应包含一个NSLocationAlwaysUsageDescription键,并带有面向用户的目的字符串,以明确说明从2019年春季开始,所有提交给App Store的访问用户数据的应用都将包含目的字符串。如果您使用的是外部库或SDK,则它们可能会引用需要API的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>

答案 18 :(得分:0)

在我们的示例中,我们在应用中使用的是NSLocationWhenInUseUsageDescription,而不是NSLocationAlwaysUsageDescription

从评论here中读取(感谢matt-oakes),看来NSLocationAlwaysUsageDescription正在我们所使用的依赖框架之一中使用。

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

因此,总而言之,将NSLocationAlwaysUsageDescription添加到Info.plist可以修复警告电子邮件,并且没有更改应用程序中的任何行为??