App Store Connect 应用程序拒绝缺少目的字符串,但字符串存在于 InfoPlist.strings

问题描述 投票:0回答:3

我正在开发一个 Flutter 应用程序并将其提交到 App Store Connect,并立即收到一封电子邮件,表明该应用程序被拒绝,因为

ITMS-90683:Info.plist 中缺少目的字符串 您的应用程序的代码引用一个或多个访问敏感用户数据的 API。应用程序的 Info.plist 文件应包含一个 NSContactsUsageDescription 键,其中包含面向用户的目的字符串,清楚、完整地解释应用程序需要数据的原因。从 2019 年春季开始,提交到 App Store 的所有访问用户数据的应用程序都必须包含目的字符串。如果您使用外部库或 SDK,它们可能会引用需要用途字符串的 API。虽然您的应用程序可能不使用这些 API,但仍然需要目的字符串。您可以联系库或 SDK 的开发人员,请求他们发布不包含 API 的代码版本。了解更多信息 (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy)。

据说缺少 5 个目的字符串。

我的应用程序正在使用电子邮件中列出的 API,但我的 Info.plist 文件中有密钥,并且在我的 iPhone 上运行该应用程序时,当应用程序向用户请求相应权限时,会显示目的字符串。我什至使用 en.lproj 等文件夹中的 InfoPlist.strings 文件翻译了字符串。在 Info.plist 中,我像这样引用了翻译后的字符串

<key>NSContactsUsageDescription</key>
<string>$(NSContactsUsageDescription)</string>

我已经尝试解压 .xcarchive(在 Mac Finder 中右键单击 -> 显示包内容)和 .ipa 文件。在其中我找到了 Runner.app(我认为 Runner 是 Flutter 特定的“名称”),并且还显示了包内容。我找到了 Info.plist,当我在 TextEditor 或 XCode 中打开它时,字符串消失了,但 InfoPlist.strings 文件仍然存在。

我认为导出时出现问题,导致值被清除?

ios internationalization app-store-connect info.plist
3个回答
12
投票

实际上我自己问这个问题是为了回答它,希望它可以帮助别人,因为尽管解决方案很简单,但我花了很多时间来解决问题:

我不知道哪个教程/Stackoverflow 答案或其他地方有将翻译引用为问题中所示的变量的技巧。

<key>NSContactsUsageDescription</key>
<string>$(NSContactsUsageDescription)</string>

只需用真正目的的字符串替换变量(也许是您应用程序的主要语言?我只是复制粘贴英语字符串文件中的值。)

<key>NSContactsUsageDescription</key>
<string>The reason for access to contacts is…</string>

这些变量似乎是在构建时评估的,而不是(也)运行时评估的。由于它们不存在,Xcode 会在 Info.plist 文件中放置一个空字符串。在运行时,InfoPlist.strings 文件会搜索覆盖 Info.plist 中的值,因此国际化确实有效,即使它实际上实现不正确。似乎要提交到 AppStore,仅在 .strings 文件中包含值是不够的,但 Info.plist 中必须有一个后备目的字符串 Apple 关于本地化 Info.plist 的参考可以在这里找到。


0
投票

就我而言,这个问题来了

ITMS-90683:Info.plist 中缺少目的字符串 - 您的应用程序的代码引用了一个或多个访问敏感用户数据的 API,或者应用程序具有允许此类访问的一项或多项权利。 “Runner.app”包的 Info.plist 文件应包含一个 NSPhotoLibraryUsageDescription 键,其中包含一个面向用户的目的字符串,清楚、完整地解释您的应用程序需要数据的原因。如果您使用外部库或 SDK,它们可能会引用需要用途字符串的 API。虽然您的应用程序可能不使用这些 API,但仍然需要目的字符串。有关详细信息,请访问:https://developer.apple.com/documentation/uikit/protecting_the_user_s_privacy/requesting_access_to_protected_resources

在您的 info.plist 文件中使用这行代码

<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to upload and share photos within the app.</string>

0
投票

如果您面临以下问题: NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription。

转到

info.plist
并添加这些行,您的问题就会得到解决。

对于第一个问题(NSLocationAlwaysAndWhenInUseUsageDescription):

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Your clear and concise description of why your app needs location access.</string>

对于第二个问题(NSLocationWhenInUseUsageDescription):

<key>NSLocationWhenInUseUsageDescription</key>
<string>Your clear and concise description of why your app needs location access.</string>

将占位符文本替换为适当且用户友好的解释,说明为什么您的应用程序需要位置访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.