错误 App Store Connect:“ITMS-90683:Info.plist 中缺少目的字符串”和“ITMS-90078:缺少推送通知权利”[Flutter]
Posted
技术标签:
【中文标题】错误 App Store Connect:“ITMS-90683:Info.plist 中缺少目的字符串”和“ITMS-90078:缺少推送通知权利”[Flutter]【英文标题】:Error App Store Connect: 'ITMS-90683: Missing Purpose String in Info.plist' & 'ITMS-90078: Missing Push Notification Entitlement' [Flutter] 【发布时间】:2020-09-02 10:51:29 【问题描述】:我正在尝试在 App Store Connect 上上传我们应用的新版本。在我们的旧版本中,我们已经在使用推送通知,因此,Apple Push Services 的证书已经激活并添加到 Apple Developer Portal 中(如下面的屏幕截图所示)。当我们将以前版本的应用程序上传到 App Store Connect 时,没有任何问题。但是,现在当我尝试使用 Xcode 将我们的新版本应用程序上传到 App Store Connect 时,Xcode 端没有显示错误并且上传成功(如下图所示)。
当我返回 App Store Connect 检查我上传的构建版本以便提交审核时,它表示正在处理构建(如下面的屏幕截图所示)。一段时间后,我收到一封来自 App Store Connect 的电子邮件,提到我们的构建版本存在以下问题(详细的电子邮件在此问题的末尾提供):
ITMS-90683:Info.plist 中缺少目的字符串
ITMS-90078:缺少推送通知权利
对于我们应用程序的最新构建版本,它提到 Info.plist 的 ITMS-90683 错误(如下所示)缺少 NSContactsUsageDescription、NSCalendarsUsageDescription、NSAppleMusicUsageDescription、NSMotionUsageDescription、NSSpeechRecognitionUsageDescription、NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription的描述。但是,在我们使用 Flutter 框架构建的应用中,我们并没有专门使用这些权限。
我的问题如下:
-
当我不使用其中任何一个时,如何修复 ITMS-90683 错误
在我们的应用程序中显式授予权限,以便构建版本可以是
上传审核成功了吗?
既然 Apple Push Services 的证书已添加到 Apple Developer 门户,我该如何修复 ITMS-90078 并提交应用以供审核?
Info.plist 内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>AppName</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>Need to upload image</string>
<key>NSMicrophoneUsageDescription</key>
<string>Need to upload image</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Need to upload image</string>
<key>UILaunchStoryboardName</key>
<string>Launch Screen2</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>
非常感谢任何帮助。提前谢谢!
我的项目的“签名和功能”屏幕截图:
从 Xcode 成功上传构建版本的屏幕截图:
正在处理新构建版本的 App Store Connect 的屏幕截图:
启用了 Apple 推送服务证书的 Apple Developer Portal 的屏幕截图,该应用程序的先前版本使用该证书:
来自 App Store Connect 的关于错误的电子邮件:
尊敬的开发者,
我们发现您的应用最近交付的一个或多个问题, [应用程序名称] 2.0.1 (4)。请更正以下问题,然后上传 再次。
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)。
ITMS-90683:Info.plist 中缺少用途字符串 - 您的应用程序代码 引用一个或多个访问敏感用户数据的 API。该应用程序的 Info.plist 文件应该包含一个 NSCalendarsUsageDescription 键 一个面向用户的目的字符串,清楚完整地解释原因 您的应用需要数据。从 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 文件应该包含一个 NSAppleMusicUsageDescription 键 一个面向用户的目的字符串,清楚完整地解释原因 您的应用需要数据。从 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 文件应该包含一个 NSMotionUsageDescription 键和一个 面向用户的目的字符串清楚完整地解释了为什么您的 应用程序需要数据。从 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)。
虽然您不需要解决以下问题,但我们希望 让您了解它们:
ITMS-90078:缺少推送通知权利 - 您的应用出现 向 Apple 推送通知服务注册,但应用程序 签名的权利不包括“aps-environment” 权利。如果您的应用使用 Apple Push Notification 服务, 确保您的 App ID 在 配置门户,并在使用 包含“aps-environment”的分发配置文件 权利。 Xcode 不会自动复制 aps-environment 在构建时配置配置文件的权利。这种行为是 故意的。要使用此权利,请启用推送通知 在项目编辑器的功能窗格中,或手动添加 您的权利文件的权利。有关详细信息,请参阅 https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.
ITMS-90683:Info.plist 中缺少用途字符串 - 您的应用程序代码 引用一个或多个访问敏感用户数据的 API。该应用程序的 Info.plist 文件应该包含一个 NSLocationAlwaysUsageDescription 键 带有面向用户的目的字符串,清晰完整地解释 为什么您的应用需要数据。从 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 文件应该包含一个 NSLocationWhenInUseUsageDescription 带有面向用户的目的字符串的键,清楚地解释和 完全为什么您的应用需要数据。从 2019 年春季开始,所有应用程序 提交到需要访问用户数据的 App Store 包括一个目的字符串。如果您使用的是外部库或 SDK, 他们可能会引用需要目的字符串的 API。当你的应用 可能不会使用这些 API,但仍需要目的字符串。你可以 联系库或 SDK 的开发人员并请求他们发布 不包含 API 的代码版本。了解更多 (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy)。
最好的问候,
App Store 团队
【问题讨论】:
【参考方案1】:当我没有在我们的应用程序中明确使用任何这些权限时,如何修复 ITMS-90683 错误,以便可以成功上传构建版本以供审核?
这部分应用审核并不关心您是否实际使用这些功能。他们检查的只是应用程序是否有代码来执行此操作(您的显然有)并带有所需的目的字符串。要解决这个问题,您基本上有两种选择:
找出您的应用程序中的哪些代码/库/任何东西会带来这些包袱,然后摆脱它,或者 随身携带行李并提供所需的用途字符串。由于 Apple 推送服务的证书已添加到 Apple 开发者门户,我该如何修复 ITMS-90078 并提交应用以供审核?
问题不在于证书,而在于您没有显示的应用程序的权利。让您在您的应用中启用推送通知权利。
【讨论】:
感谢您的回复。对于 Apple Push Services,我没有更改我们应用中的推送通知权限,因为之前的版本已成功上传并提交。那么,这个新版本怎么会有问题呢?but the app signature's entitlements do not include the "aps-environment" entitlement.
- 做到 100%。
我还编辑了我的问题以反映 Info.plist 内容。感谢您对此的帮助。真的很感激。
权利存储在 .entitlements 文件中。要查看/编辑,请转到项目中的“签名和功能”。
点击“+”并添加推送通知。以上是关于错误 App Store Connect:“ITMS-90683:Info.plist 中缺少目的字符串”和“ITMS-90078:缺少推送通知权利”[Flutter]的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 12 Beta 3:App Store Connect 操作错误
发布到 App Store Connect 时 Codemagic 身份验证错误
SwiftUI:App Store Connect 操作错误 itms-90476
App Store Connect 操作错误:无法连接到 Apple 的网络服务
公司中的错误人员正在收到“App Store Connect”审核阶段更改电子邮件
App Store Connect 操作错误:密钥 com.apple.developer.healthkit.access 的 ITMS-90164 []