【问题标题】:Xcode 8 "the aps-environment entitlement is missing from the app's signature" on submit提交时Xcode 8“应用程序签名中缺少aps-environment权利”
【发布时间】:2017-01-26 00:31:51
【问题描述】:

我有一个应用,我们在过去 6 个月内提交了几十个版本,而且我们确实使用了 APNS。升级到 Xcode 8 后,我收到了以下来自 Apple 的电子邮件

尊敬的开发者,

我们发现您最近交付的一个或多个问题 APP_NAME。你的交货是 成功,但您可能希望更正您的以下问题 下次发货:

缺少推送通知权利 - 您的应用包含一个 API,用于 Apple 的推送通知服务,但 aps-environment 权利 应用程序的签名中缺少。要解决此问题,请确保您的 在供应门户中为推送通知启用了 App ID。 然后,使用分发配置文件为您的应用程序签名 包括 aps-environment 权利。这将创建正确的 签名,然后您可以重新提交您的应用程序。请参阅“供应和 本地和推送通知编程指南中的“开发” 更多信息。如果您的应用不使用 Apple 推送通知 服务,无需任何操作。您可以从未来删除 API 提交以停止此警告。如果您使用第三方框架, 您可能需要联系开发人员以获取有关删除 API。

纠正问题后,您可以使用 Xcode 或 Application 加载程序将新的二进制文件上传到 iTunes Connect。

问候,

App Store 团队

奇怪的是,我去了 developer.apple.com -> 证书、标识符和配置文件,而我的 AppId 确实仍然启用了推送通知。我没有做任何与我做过的不同的事情,所以我很好奇 Xcode 8 更新是否破坏了某些东西。有任何想法吗?

顺便说一句:他们为推送通知编程指南放置的链接在电子邮件中已损坏,所以这不是一个好兆头。

【问题讨论】:

    标签: ios xcode apple-push-notifications provisioning-profile entitlements


    【解决方案1】:

    其实很简单。由于某种原因,它在 Xcode 8 上被禁用,但转到 Targets -> Capabilities 并验证 Push Notifications 在该视图上是否正确。对我来说,它有一个“修复我”,我必须点击,瞧。

    【讨论】:

    • 对我来说,这个“修复我”添加了一个明确的权利文件(我多年来没有使用过的东西),一旦我删除它,推送通知功能就会再次禁用。有没有人知道如何在不添加权利文件的情况下启用它?
    • 这个问题的奇怪之处不是解决方案,而是在 Xcode 7 上启用了此功能,但升级后它却被禁用了。
    • 我还必须进入权利文件并将 APS 环境值更改为“生产”,因为它在创建时默认设置为“开发”。
    • 终于!太荒谬了,很难让它发挥作用。我已经删除和重新创建证书/配置文件将近 5 个小时。好消息是我可以说我现在完全理解这些证书/配置文件/标识符是什么了 :) 谢谢你的提示。
    • @bek 请注意,您可能应该将其保留为开发。上传到 iTunes Connect 后,它会自动更改为生产。
    【解决方案2】:

    我也有同样的问题,我确信推送通知在 Xcode8 中默认是关闭的。我没注意到。小心点。

    【讨论】:

    • 你能告诉我为什么我的帐户中没有推送通知部分吗?
    【解决方案3】:

    Xcode 8 发生了变化,您的权利不再来自应用标识符,而是来自应用目标中选择的功能。因此,就像 Unome(OP)所说,您必须验证推送通知是否已打开。

    对我来说,这不是“修复我”按钮,但我有两个授权文件(一个用于开发,一个用于分发)。切换推送通知功能会将aps-environment 键(值为development)添加到开发权利文件中,但不会将其添加到分发权利文件中。将相同的密钥复制到分发中可以消除上传到 iTunes Connect 时的警告电子邮件。

    对于大多数项目,打开推送通知就足够了,或者如果它已经打开但密钥不在权利中,请尝试将其关闭然后再打开。

    还值得注意的是,权利会在存档期间自动更新。即为release 构建生成的权利可能不同于为development 构建生成的权利。见here

    在通过 Xcode Organizer 分发应用程序的过程中 > 存档选项卡,权利通过以下方式设置到应用程序中 用于代码签名的配置文件。重要的是 意识到在此阶段重新应用权利会产生 任何人之间的意外权利差异的机会 您可能已经测试过之前的开发版本。的主要目的 本文件用于验证您的权利是否适合您的 用于 beta 测试和 App Store 提交的分发版本。

    【讨论】:

    • 这是我的船,除了我在我的.entitlements 文件中为当前配置/方案指定什么,它总是使用production 作为aps-environment
    • @AlbertBori Weird,我只能让它显示开发,这很好,因为当它存档时,它显示为 production
    • 我确实得到了一个带有 .entitlements 的文件,但它对 aps-environment 具有开发价值。我需要在哪里复制才能分发?
    • @meteors 如果值是development应该没问题。项目归档时会在 ipa 中更改。
    • @timgcarlson 这实际上在归档期间不会发生。它发生在提交期间或导出时。还有一些有用的信息来检查它是否在此处正确设置:developer.apple.com/library/content/qa/qa1798/_index.html
    【解决方案4】:

    来自 Xcode release notes:

    Xcode 8 不会在构建时自动从配置文件中复制 aps-environment 权利。这种行为是故意的。要使用此权利,请在项目编辑器的“功能”窗格中启用推送通知,或手动将权利添加到您的权利文件中。 (28076333)

    这是一个很大的变化,因为 aps-environment 权利不需要 plist 总是很奇怪,但许多其他人需要。

    对于那些不想盲目地按“修复我”并且目前没有权利文件的人来说,它只是一个 plist 文件,在项目的“代码签名权利”下的构建设置中被引用

    【讨论】:

    • 我在链接的笔记中找不到那句话!
    • 我不知道谁支持了我的评论以及哪里出了问题,但我现在也能找到它。
    【解决方案5】:

    经过一天与 Xcode 8 的斗争,我们无法弄清楚为什么 aps-environment 开发没有添加到我们的调试版本中。用于调试测试的构建应用程序的权利部分中缺少它......即使我们已经启用了新的功能并且权利文件存在。问题是需要在 Xcode Build Settings for Debug Entitlements 中为任何 SDK 设置权利文件。

    【讨论】:

    • 我认为为Debug键设置值和为Debug设置值没有任何区别,因为后者用于覆盖值对于特定的 SDK。
    • 这是我的解决方案
    • 在挣扎了一上午之后,这也是我遇到的问题。切换功能,生成配置文件,这些都不起作用。确实如此。
    • 这在 Xcode 8.3.3 上的某些情况下仍然是一个有效的解决方案
    • 我希望我能投票一百万次。我已经挣扎了一个星期,这就是解决方案。仅在顶部的 Code Signing Entitlements 中输入文件路径是不够的,还必须在“Any SDK”部分完成。这是为我解决问题的关键。
    【解决方案6】:

    我使用 XCode 7.3.1 从 Apple 收到了相同的电子邮件。我为解决这个问题所做的是:

    1. 在功能下> 将推送通知设置为打开,如@Bruce Tsai 回答中所述。
    2. 在 Build-Settings > Code Signing > Code Signing Identity 下设置调试的开发者证书和发布的分发证书,如图所示:

    【讨论】:

    • 嗨,在 Capabilities 我没有得到 Capabilities > 设置推送通知
    • @Anuj,我在你的 Xcode 中添加了一个屏幕截图。
    【解决方案7】:

    自动管理签名对我来说是关闭的,我检查并为我工作正常。

    【讨论】:

      【解决方案8】:

      如果您使用 Firebase 框架并且不使用推送通知,则有两种解决方案 1. 只需忍受每次上传二进制文件时都会发送给整个团队的“问题”消息。只要您实际上不使用通知,该应用程序仍将被接受为提交,您可以忽略该警告。或 2. 这样做:https://stackoverflow.com/a/46802075/7529450。这将删除烦人的电子邮件通知,并作为提交被接受。

      【讨论】:

        【解决方案9】:

        使用 Xcode 9 推送通知已启用。

        我尝试禁用/重新启用推送通知功能。 (没用)

        我尝试禁用/重新启用自动管理签名。 (没用)

        结果我不得不删除并重新添加我的配置文件。 (see here how to do it) 您可能必须在病房后禁用/重新启用自动管理签名

        【讨论】:

          【解决方案10】:

          对我来说,问题在于有两个权利文件:Entitlements-Debug.plistEntitlements-Release.plist。并且其中只有一个(调试)需要设置。

          Build Settings > Signing > Code Signing Entitlements 的多个值更改为单个 MyAppName/MyAppName.entitlements,然后重新启用 Capabilities > Push Notifications 切换器对我有用。

          希望对你有帮助。

          【讨论】:

            【解决方案11】:

            另一个可行的选项:将AppName/Entitlements-Debug.plist 的源代码复制粘贴到AppName/Entitlements-Release.plist

            【讨论】:

              猜你喜欢
              • 2017-08-02
              • 2015-11-21
              • 2015-08-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-02-04
              相关资源
              最近更新 更多