83

我正在尝试将我的应用程序配置为支持推送通知,但不断收到此错误:无法获取令牌,错误:错误域 = NSCocoaErrorDomain 代码 = 3000“没有为应用程序找到有效的'aps-environment'权利字符串” UserInfo = 0x1f818fc0 { NSLocalizedDescription=没有为应用程序找到有效的“aps-environment”权利字符串}

  • 我确实使我的应用程序支持推送通知(此时仅用于开发)。
  • 我确实在启用推送通知后创建了配置文件。
  • 我的捆绑包标识符与配置文件中显示的相同。
  • 在我的配置文件中有一个字符串:aps-environment
  • 我确保在“代码签名身份”部分下的项目和目标中,所有值都被选为我的配置文件。

还有什么想法吗?谢谢。

4

11 回答 11

64

就我而言,我的配置文件中的内容:

security cms -D -i ~/Downloads/spolskyDevelop.mobileprovision 
...
<key>application-identifier</key>
<string>P5GM95Q9VV.com.dca.spolsky</string>
<key>aps-environment</key>
<string>development</string>

与实际构建的应用程序中的内容不同(您可以通过查看 Xcode 的 Logs 选项卡来了解它的构建位置)

codesign -d --entitlements - '/Users/drew/Library/Developer/Xcode/DerivedData/spolsky-bdbtdfjeeywhqzccpmmceqvnhgtm/Build/Products/Debug-iphoneos/spolsky-ios.app'
<dict>
    <key>application-identifier</key>
    <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    </array>
</dict>

即使代码签名身份的“当前匹配”提示文本指示正确的配置文件,这也是正确的——很奇怪,是吗?为了让一个奇怪的故事更奇怪,当我运行时,正确的配置文件被安装在设备上,(设置->常规->配置文件)让我相信配置文件是正确的——但它回退到通配符 ID当应用程序实际启动时。

线索是这两个命令的输出不同:

Y2X6Z7Z2GR .com.dca。spolsky-iosP5GM95Q9VV .com.dca。斯波尔斯基

当我使粗体部分匹配时,斜体部分自动更改为匹配。此外,security和codesign的输出一致,没有aps-entitlement错误。

我的猜测是 XCode 在我的非通配符 ID 上使用了通配符样式的匹配。(毕竟,“spolsky”非常接近“spolsky-ios”),这解释了“当前匹配”输出。但是构建链中的某些东西对此更加严格,因此在构建期间它会回退到实际的通配符 ID

于 2013-01-24T22:19:10.913 回答
37

问题是由于当前的配置文件不包含 APNS 信息,因为配置文件是在创建 APNS 证书之前创建的。

因此,要解决这个问题,创建一个新的 Provisioning Profile 并在 Xcode 中选择 Provisioning Profile 将清除错误。

于 2013-08-15T08:29:55.537 回答
28

推送通知已经在我的设备上运行后,我遇到了同样的问题。似乎 Xcode 缓存了一些不正确的东西,所以刷新它解决了我的问题:

  1. Xcode -> 首选项 -> 帐户
  2. 查看您的开发者帐户的详细信息
  3. 只需为 Provision Profiles 单击 Refresh 几次。每次刷新时,我都会看到这些变化。保持刷新,直到它们停止变化。
于 2014-11-14T20:15:38.613 回答
9

我收到此错误并且没有创建新的配置文件;创建了一个新的,然后不得不重新启动 xCode 但现在可以工作了!

于 2013-06-30T16:45:42.530 回答
9

请注意,捆绑标识符必须以区分大小写的方式与配置文件匹配。当它应该是 com.firstlast.appname 时,我有类似 com.FirstLast.appname 的东西。嗯,这让我忙了好一阵子。

于 2014-02-25T04:42:26.403 回答
9

我通过启用推送通知功能解决了这个问题。

选择项目 > 目标 > 功能 > 打开推送通知

查看图片

于 2016-01-06T08:22:30.273 回答
3

如果这个问题在升级到 Xcode 8 后突然发生,你可能会在功能屏幕中发现一个警告,允许你自动修复这个问题:

选择项目 > 目标 > 功能 > 打开推送通知

于 2016-09-30T00:47:30.173 回答
2

产品->清洁为我做了。希望它为别人做。

于 2014-09-04T06:48:25.473 回答
2

我在可能不常见的用例中遇到了这个问题。我正在使用 Xcode 6 和 iOS 8。我正在创建一系列全新的应用程序项目,并尝试重新使用相同的包 ID,以便无需再次完成所有门户端设置。这也只是用于沙盒测试。

我会发现,虽然第一个应用程序的设置和注册工作正常,但如果我从设备中删除该应用程序,为第二个应用程序设置相同的捆绑 ID,然后尝试使用该应用程序注册 PN,我会得到这个错误。

我的解决方案是:

  1. 从设备中删除关联的配置文件。
  2. 从 Xcode 中删除关联的配置文件。
  3. 关闭 Xcode
  4. 双击我下载的.mobileprovision文件将其安装回 Xcode
  5. 打开项目并部署它。

无论以前的状态如何,这种方法似乎都会松动,并且我可以使用新的应用程序/相同的捆绑 ID 注册 PN。

于 2014-10-03T21:51:57.650 回答
2

对于那些在 ios 10 中遇到此错误的人,您可以尝试以下步骤:

1.清理你的项目。
2.并检查目标-> 功能-> 推送通知。如果它关闭,则打开它。

问题将解决。上述步骤帮助我摆脱了这个问题。希望它对某人有帮助。

于 2016-10-18T08:18:48.130 回答
0

新的配置文件对我有用。如果您正在开发中,请确保使用开发人员配置文件(不要使用 Ad Hoc)。之后就好了,不知道为什么旧的停止工作了。

于 2014-10-23T12:36:03.203 回答