Xcode 8在提交时“应用程序的签名中缺少应用程序环境权限”

我有一个应用程序,我们已经提交了几十个版本,在过去6个月,我们使用 APNS。在升级到 Xcode 8之后,我收到了以下来自苹果的邮件

亲爱的开发商:

We have discovered one or more issues with your recent delivery for 您的交付是 成功,但你可能希望纠正以下问题 下一期:

Missing Push Notification Entitlement - Your app includes an API for 苹果的推送通知服务,但应用程序环境的权利 is missing from the app's signature. To resolve this, make sure your App ID is enabled for push notification in the Provisioning Portal. 然后,使用一个分发供应配置文件为应用程序签名 包括应用程序环境权限。这将创建正确的 您可以重新提交您的应用程序 本地和推送通知编程指南中的“开发” 如果你的应用程序没有使用苹果推送通知 服务,不需要采取任何行动。您可以从将来删除该 API 如果你使用第三方框架, you may need to contact the developer for information on removing the 空气污染指数。

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

问候,

应用程序商店团队

奇怪的是,我转到 Developer.apple.com-> 证书、标识符和配置文件,我的 AppId 仍然启用了推送通知。我没有做任何不同,然后我曾经做过它,所以很好奇,如果 Xcode 8更新打破了什么。有什么想法吗?

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

79641 次浏览

其实很简单。由于某种原因,它在 Xcode 8中被禁用了,但是进入 Targets-> Capability 并验证推送通知在该视图中是否完全正确。对我来说,它有一个“修复我”,我必须点击,瞧。

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

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

For most projects, it should be sufficient to toggle on Push Notifications, or if it's already on but the key isn't in the entitlements, try toggling it off and on again.

同样值得注意的是,权利在归档期间会自动更新。即为 release构建生成的应享权利可能不同于为 发展构建生成的应享权利。见 给你

在通过 Xcode Organizer > 发布应用程序的过程中 档案标签,权利被设置到应用程序的方式是 provisioning profile used for code signing. It is important to be 意识到在这个阶段重新应用应享权利会产生 the opportunity for unintended entitlement differences between any 您可能已经测试了以前的开发版本 this document is to verify that your entitlements are correct for your distribution builds for beta testing and App Store submission.

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

capability

经过一天与 Xcode 8的斗争,我们不能找出为什么 aps-environment开发没有添加到我们的调试构建。它在用于调试测试的构建应用程序的权利部分中缺失了... ... 即使我们已经启用了新的能力和权利文件。问题是,需要在 Xcode Build Settings for Debug Entitments 中为 ANY SDK 设置权限文件。

screenshot

来自 Xcode 释放通知书:

Xcode 8不会在构建时自动从供应配置文件中复制 aps 环境权限。这种行为是蓄意的。若要使用此权限,请在项目编辑器的“能力”窗格中启用“推送通知”,或者手动将该权限添加到您的权限文件中。(28076333)

这是一个巨大的变化,因为它总是相当奇怪的应用程序环境的权利不需要列表,但许多其他人做。

对于那些不想只是盲目地按“ Fix Me”并且目前没有权限文件的人来说,它只是一个 plist 文件,在项目的“ Build Settings”下的“ Code Signing Entitments”中引用

我用 XCode7.3.1从苹果公司收到了同样的邮件。我所做的就是解决了这个问题:

  1. 在“能力”下 > 按照@Bruce Tsai 的回答设置 PUSH 通知为 ON。
  2. 在 Build-Settings > Code Signing > Code SigningIdentity 下,设置调试的开发者证书和发布的发行版证书,如图所示:

enter image description here enter image description here

Automatically manage signing was off for me

自动管理签名为我关闭,我检查和工作为我罚款。

启用了使用 Xcode 9 push 通知。

我试过禁用/重新启用 推送通知功能

我试过禁用/重新启用 自动管理签名。(不起作用)

结果我不得不删除和重新添加我的供应配置文件 You might have to disable/re-enable 自动管理签名 after wards.

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

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

构建设置 > 签名 > 代码签名权限的多个值改为单个 MyAppName/MyAppName.entitlements,然后重新启用 能力 > 推送通知交换机,这对我来说非常有效。

希望能有帮助。

还有一个可行的方法: 将 AppName/Entitlements-Debug.plist的源代码复制粘贴到 AppName/Entitlements-Release.plist中。