没有为应用程序找到有效的'aps-environment'权利字符串

时间:2012-11-17 15:57:45

标签: objective-c apple-push-notifications

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

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

还有什么想法吗?感谢。

11 个答案:

答案 0 :(得分: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的“日志”选项卡找到它的构建位置)

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-ios vs P5GM95Q9VV .com.dca。 spolsky

当我将粗体部分匹配时,斜体部分会自动更改为匹配。此外,安全性和协同设计的输出是一致的,不再有权利错误。

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

答案 1 :(得分:37)

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

因此,要解决此问题,请创建新的Provisioning Profile&amp;选择Xcode中的Provisioning Profile将清除错误。

答案 2 :(得分:29)

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

  1. Xcode - &gt;偏好 - &gt;帐户
  2. 查看您的开发者帐户的详细信息
  3. 只需单击“设置配置文件”的“刷新”几次。我每次刷新都会看到这些变化。保持清爽,直到他们不断变化。

答案 3 :(得分:9)

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

答案 4 :(得分:9)

请注意,捆绑包标识符必须与区分大小写方式的配置文件匹配。它应该是com.Firstlast.appname之类的com.FirstLast.appname。好吧,这让我忙了好一阵子。

答案 5 :(得分:9)

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

选择项目&gt;目标&gt;能力&gt;打开推送通知

check out the image

答案 6 :(得分:3)

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

选择项目&gt;目标&gt;能力&gt;打开推送通知

答案 7 :(得分:2)

产品 - &gt;干净为我做了。希望它能为其他人做到。

答案 8 :(得分:2)

我在可能的非常常用例中碰到了这个问题。我正在使用Xcode 6和iOS 8.我正在创建一系列全新的应用程序项目,并尝试重新使用相同的包ID,以便不需要再次通过所有门户端设置。这也仅适用于沙箱测试。

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

我的解决方案是:

  1. 从设备中删除关联的配置文件。
  2. 从Xcode中删除关联的配置文件。
  3. 关闭Xcode
  4. 双击我下载的.mobileprovision文件,将其重新安装回Xcode
  5. 打开项目并进行部署。
  6. 这种方法似乎无论先前的状态如何都会松动,我可以使用新的应用程序/相同的包ID注册PN。

答案 9 :(得分:2)

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

1.清理你的项目。
2.并检查目标 - &gt;能力 - &gt;推送通知。如果它关闭,在它上面。

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

答案 10 :(得分:0)

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