缺少推送通知权限

我有一个应用程序提交时,它被拒绝,我得到了消息

缺少推送通知权限-您的应用程序似乎注册 苹果推送通知服务,但应用程序的签名 应享权利不包括“应用程序环境”应享权利 应用程序使用苹果推送通知服务,确保您的应用程序 ID 是 启用在供应门户中的推送通知,并重新提交 在使用分发供应配置文件签署应用程序之后, 包括“应用程序环境”的权利。

我检查了我的 ad-hoc 供应,在那里我找到了应用程序环境和生产,但是,当我打开我的发行版供应时,我没有找到这样的应用程序环境和生产。

这是这个错误消息和苹果拒绝的原因,我如何修复它?

163731 次浏览

是的,这就是苹果应用商店被拒绝的原因。如果您的特别供应配置文件具有 aps- 环境键,这意味着您的应用程序在苹果供应门户中配置正确。您所需要做的就是删除本地计算机上的 App Store 分发配置文件,然后从 Provisoning Portal 重新下载并安装分发配置文件。这个新的应该包含 aps- 环境密钥。

在 iOS 供应门户中检查你的 App Id 是否启用了推送 developer.apple.com 如果没有启用它,配置您的应用程序 ID 推 SSL 证书下载, 并重新安装在您的钥匙链再次然后下载您的分发配置文件安装在您的 Xcode 库

我收到这条信息是出于另一个原因——我通过 Xcode 提交了一个应用程序,而没有首先专门为这个应用程序创建一个应用程序商店分销配置文件。我相信 Xcode 会自动使用通配符应用程序商店配置文件,如果你有一个安装。但是一个应用程序使用推送通知需要自己的配置文件。

修复方法是为应用程序创建一个新的 AppStore 分发配置文件。然后下载它,拖到 Xcode,并修改您的项目构建设置 > 代码签名 > 发布使用新的配置文件。

在我的例子中,甚至我创建了一个 myapp.profile 并手动在 xcode 中设置它,当我选择“ show In finder”并定位到嵌入式.mobile 条款并检查以确保 aps 环境在文件中时,错误仍然存在。

然后我去了开发中心,发现 XC: myapp.profile 的状态无效。我更新了它并安装了 XC: myapp.profile,它工作得很好。

我认为 xcode 试图管理配置文件,在提交二进制文件存储时需要检查配置文件,并确保它是正确的。而且根据其他答案,它可能是由各种原因引起的,所以它可以是真正令人讨厌的。

更新:

一旦您签署了下载的配置文件,并确认当您试图提交到 App Storeaps-environment已经存在,您应该能够将配置文件和代码签名实体更改为自动和 iOS Developer。希望能在 Xcode 7中得到改进。

第一个应用程序 ID

确保在生产端启用 ID 推送通知

如图所示

enter image description here

第二证书

使用您的 id 创建两个证书(启用了推送通知)

App Store 及 Ad Hoc 证书

苹果推送通知服务 SSL (Sandbox) 证书

enter image description here

第三次供应概况

从分发部分使用您的 id 创建 应用程序商店配置文件

终于来了

当您上传您的仓,您必须检查什么供应配置文件使用 有很多权利

enter image description here

所有这些情况都会导致这个问题 希望这对你有帮助

这种情况突然发生在我身上,因为我的应用程序的分发配置文件已经过期。Xcode 开始使用通配符配置文件,它没有启用推送通知权限。我没有收到任何警告。修复很简单,我只需要在苹果开发者会员中心为我的应用程序生成另一个分发配置文件,下载它,然后双击安装到 Xcode。

我也面临着这个问题,甚至在我的应用程序 我根本没用推送通知。制作 新的供应情况也不适合我。我所做的是:-

1. 只为 Ad hoc & App Store 创建新的证书。

2. 使用该证书制作发布概要文件,并将概要文件与 Xcode 集成。

然后新提交的建设与此配置文件批准没有任何警告。

对于那些在他们的应用程序中使用推送通知的人来说:

我们的推送证书最近即将到期,所以我们按照苹果公司提出的标准方式创建了新的开发/推送证书(我不会在这里详细介绍,在网上更新你的推送证书以备下一年使用时,有很多关于它的信息)。

然而,在这样做之后,这个问题出现了。无论我们做什么,我们收到这封来自苹果的电子邮件后提交我们的应用程序。当我们在苹果会员中心检查我们的分发供应配置文件的设置时,一切看起来都很正常(针对 prod/dev 我们的 App ID 启用了 Push,我们的分发供应配置文件仍然连接到这个 App ID,我们确实只是按照标准做法为下一年创建了新的 Push 证书)。

最后,我终于解决了这个问题:

  1. 创建一个新的分发供应配置文件,该配置文件指向应用程序 ID (保持当前的 ID 不变)
  2. 在 Xcode,通过设置 > 帐户 > 选择你的帐户 > 详细信息 > 点击刷新图标来刷新你的配置文件
  3. 手动为你的应用程序创建一个权利列表文件:
    • 文件菜单 > 新建文件..。
    • 选择 iOS > 资源 > 属性列表
    • 将新文件命名为“ foo.entitlements”(通常,“ foo”是目标名称)
    • 单击“ Entitments File”旁边的(+)以添加一个顶级项目(由于文件扩展名,属性列表编辑器将使用正确的模式)
  4. 确保这个权利文件正在目标的构建设置中使用(目标 > 构建设置 > 搜索“权利”,在 CODE _ SIGN _ ENTITLEMMENT 中设置您刚刚创建的权利文件的路径)
  5. 确保 Target 中的供应配置文件/代码签名标识被正确设置为适当的分发供应配置文件/签名标识(这一点应该是显而易见的)
  6. 我不能100% 肯定这是否会影响它(不应该,因为目标设置覆盖项目设置,但我还是这样做了) ,确保您的项目的供应配置文件/签名标识匹配您的目标的
  7. 在您创建的权限文件中,右键单击空文件并选择“ Show Raw Keys/Value”
  8. 在权利文件中添加一个名为“ aps-Environment”的新条目,并将其值设置为“ production”
  9. 需要注意的一点是,如果您以前使用过 keychain-access-groups 权限,那么您也应该在这里添加这个密钥,因为出于某种原因,在手动执行此操作时,它被清除了。确保这个值与之前构建中使用的值相同(你可以通过在 Organizer 中找到之前的构建来找到这个值,尝试提交到应用商店,选择你的团队,然后在提交应用之前点击“(X) Entitments”字符串旁边的箭头来展开权限并查看 keychain-access-group 权限的值。
  10. 存档你的应用程序,并尝试提交它的点到最后的“提交”按钮。你应该看到这个应用程序现在建立了新的供应配置文件,你在会员中心创建。马上取消。
  11. 回到 Apple 会员中心,删除您在步骤1中创建的新的供应配置文件。
  12. 回到 Xcode,重复步骤2,再次刷新配置配置文件列表。
  13. 现在再次存档您的应用程序,您应该看到该应用程序是使用您想要使用的旧的分发配置文件构建的,并且正确地拥有应用程序环境权限。服从就完事了。

我知道这并不像它应该有的截图那样详细,我会尽可能的用截图来更新它,但是现在我正处于一个时间紧迫的时刻,我想知道我在那里做了什么。很有可能我列出的一些或大部分步骤都是不必要的,我把它们放在这里是因为我已经做了,它们可能已经导致了最终的解决方案。

这里有一些很好的建议。

参考 Mina 提供的最后一个截图,在最初归档我的应用程序之后,上传过程中提到的供应配置文件包含一个通配符(XC)。*).这是不对的。

为了解决这个问题,我付出了相当大的努力。我不得不把 Simon Woodside 和 Mina Fawzy 提供的建议结合起来。

如果您有任何与您的项目相关的现有证书和供应配置文件,现在是在本地删除它们并远程撤销它们的好时机。给自己一个新的开始。

Mina Fawzy 的详细建议非常好。如果正确执行 Mina 的建议,应该可以在网上照顾你。

进入 Simon 的建议。我需要在我的项目中检查两件事情。使用 XCode,点击这里:

项目-> 构建设置-> 代码签名

检查 代码签名身份供应概况属性。确保将这两个属性设置为项目名称的属性。不要让 XCode 自动为您选择,也不要使用一些通用的代码签名标识(例如 Iphone Developer)。

在决定归档之前,请确保您可以将应用程序安装到您的设备上。

在 XCode 8中,您需要在目标上的“能力”选项卡中启用 push,除此之外,还需要启用关于条款和证书的所有内容: Xcode 8在提交时“应用程序的签名中缺少应用程序环境权限”

我关于这个 给你的博客文章。

这就是我修复它的原因(我已经尝试过切换开/关功能,重新创建供应配置文件等等)。

生成设置选项卡中,在 代码签名权限中,我的 。权利文件没有链接到所有部分。一旦我将其添加到 AnySDK 部分,错误就得到了解决。

enter image description here

根据@Vaiden 给出的答案,在 Xcode 8中,您可以通过选择目标并单击“修复问题”来解决这个问题。当然,您仍然需要在 苹果开发者门户网站中设置推送通知(您可以使用新的“自动管理签名”选项来简化这个过程,这样可以省去下载供应配置文件的麻烦)。

Fix me option

在从 Capabilities启用 Push Notification并重新制作所有证书之后,我遇到的最大问题是,存储该项目的 目标名称文件夹名是由两个用空格分隔的字符串组成的。移除空间后,一切工作正常!

我遇到了同样的问题,我的解决方案是添加 Target-> Capability 中的推送通知权限。

为了解决这个问题,我打开了“功能”选项卡,启用了 push,然后再次禁用了它。这将 APNS“权利”设置从。应享权利档案。

我有这个问题,因为我的权利文件是畸形的,由于以前的手动编辑。我删除了错误格式的授权输入语法,然后我可以在能力选项卡中单击“修复”,Xcode 将授权添加到我的文件中。

下面是一个格式正确的权利文件(“ Runner.entitlements”)的示例:

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
</dict>
</plist>

解决问题 嘿,伙计们,所以我已经做了一个应用程序,没有使用任何推通知功能,但我仍然得到了一封电子邮件。在检查了证书、 ID 和捆绑标识符的配置文件之后,我在苹果开发者门户网站的苹果商店连接中创建了我的应用程序,我意识到推送通知是打开的。

你要做的是:

到苹果开发者登录站点,在那里你可以管理你的证书 2. 选择右侧的“证书、 ID 和配置文件”选项卡 3. 现在选择“标识符” 以及列表右侧的 bundle id 5. 现在向下滚动,直到看到推送通知 6、关掉 存档你的构建并重新上传到苹果商店连接

希望能有帮助!