App Store Connect 错误:'ITMS-90683: Missing Purpose String in Info.plist' & 'ITMS-90078: Missing Push Notification Entitlement' [Flutter]

Error App Store Connect: 'ITMS-90683: Missing Purpose String in Info.plist' & 'ITMS-90078: Missing Push Notification Entitlement' [Flutter]

我正在尝试在 App Store Connect 上上传我们应用程序的新版本。在我们的旧版本中,我们已经在使用推送通知,因此,Apple 推送服务的证书已经激活并添加到 Apple Developer Portal 中(如下面的屏幕截图所示)。当我们将以前版本的应用程序上传到 App Store Connect 时,没有任何问题。但是,现在当我尝试使用 Xcode 将我们的新版本应用程序上传到 App Store Connect 时,Xcode 端没有显示任何错误并且上传成功(如下面的屏幕截图所示).

当我返回 App Store Connect 检查我上传的构建版本以便我可以提交它以供审核时,它说构建正在处理中(如下面的屏幕截图所示)。一段时间后,我收到一封来自 App Store Connect 的电子邮件,其中提到我们的构建版本存在以下问题(此问题末尾提供了详细的电子邮件):

ITMS-90683: Missing Purpose String in Info.plist

ITMS-90078: Missing Push Notification Entitlement

对于我们应用程序的最新构建版本,提到 Info.plist 的 ITMS-90683 错误(如下所示)缺少 NSContactsUsageDescription、NSCalendarsUsageDescription、NSAppleMusicUsageDescription、NSMotionUsageDescription、NSSpeechRecognitionUsageDescription、NSLocationAlwaysUsageDescription & 的描述NSLocationWhenInUseUsageDescription。但是,在我们使用 Flutter 框架构建的应用程序中,我们并没有专门使用任何这些权限。

我的问题如下:

  1. 当我没有使用任何这些时,如何修复 ITMS-90683 错误 在我们的应用程序中明确允许构建版本 上传审核成功?
  2. 因为 Apple 推送服务的证书已添加到 Apple 开发者门户,我该如何修复 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>

非常感谢任何帮助。提前致谢!

我的项目“Signing & Capabilities”截图:

从Xcode成功上传构建版本的屏幕截图:

正在处理新构建版本的 App Store Connect 屏幕截图:

启用了 Apple 推送服务证书的 Apple Developer Portal 的屏幕截图,该应用程序的早期版本使用了该证书:

来自 App Store Connect 的有关错误的电子邮件:

Dear Developer,

We identified one or more issues with a recent delivery for your app, [APP NAME] 2.0.1 (4). Please correct the following issues, then upload again.

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSContactsUsageDescription 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSCalendarsUsageDescription 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSAppleMusicUsageDescription 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSMotionUsageDescription 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSSpeechRecognitionUsageDescription 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Though you are not required to fix the following issues, we wanted to make you aware of them:

ITMS-90078: Missing Push Notification Entitlement - Your app appears to register with the Apple Push Notification service, but the app signature's entitlements do not include the "aps-environment" entitlement. If your app uses the Apple Push Notification service, make sure your App ID is enabled for Push Notification in the Provisioning Portal, and resubmit after signing your app with a Distribution provisioning profile that includes the "aps-environment" entitlement. Xcode does not automatically copy the aps-environment entitlement from provisioning profiles at build time. This behavior is intentional. To use this entitlement, either enable Push Notifications in the project editor's Capabilities pane, or manually add the entitlement to your entitlements file. For more information, see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/HandlingRemoteNotifications.html#//apple_ref/doc/uid/TP40008194-CH6-SW1.

ITMS-90683: Missing Purpose String in Info.plist - 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSLocationWhenInUseUsageDescription 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 are 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. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

Best regards,

The App Store Team

How can I fix the ITMS-90683 error when I am not using any of these permissions explicitly in our app such that the build version can be uploaded for review successfully?

应用审查的这一部分并不关心您是否真的在使用这些功能。他们只检查该应用程序是否具有执行此操作的代码(显然您的代码有)以及是否带有所需的目的字符串。要解决这个问题,您基本上有两个选择:

  • 弄清楚您的应用中有哪些 code/library/whatever 部分带来了这个包袱,并摆脱它,或者
  • 接受行李并提供所需的目的字符串。

Since, the Apple Push Services' certificate is already added to Apple Developer portal how can I fix the ITMS-90078 and submit the app for review?

问题不在于证书,而在于您没有显示的应用程序的权利。让您在您的应用程序中启用推送通知权利。