没有找到适用于应用程序的有效的‘ aps-Environment’权限字符串

我正在尝试配置我的应用程序以支持推送通知,但仍然得到这个错误: 获取令牌失败,错误: Error Domain = NSCocoaErrorDomain Code = 3000“没有为应用程序找到有效的‘ aps-Environment’权限字符串”UserInfo = 0x1f818fc0{ NSLocalizedDescription = 没有为应用程序找到有效的‘ aps-Environment’权限字符串}

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

还有什么想法吗? 谢谢。

66070 次浏览

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

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. < strong > spolsky

当我使粗体部分匹配,斜体部分改为自动匹配。此外,安全性和协同设计的输出是一致的,没有更多的应用程序授权错误。

我的猜测是 XCode 在我的非通配符 ID 上使用了通配符样式的匹配。(“ spolsky”毕竟非常接近于“ spolsky-ios”) ,这解释了“ Current Matches”输出。但是构建链中的某些内容对此更为严格,因此在构建过程中返回到 实际通配符 ID

我得到了这个错误,并没有创建一个新的配置文件; 创建了一个新的,然后必须重新启动 xCode,但现在工作!

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

因此,为了解决这个问题,创建一个新的配置文件并选择 Xcode 的配置文件可以清除错误。

请注意,bundle 标识符必须以 区分大小写方式与供应配置文件匹配。我有一个类似于 com 的东西。本应该是 com.FirstLast.appname 的 FirstLast.appname。这让我忙了好一阵子。

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

我在一个可能不常见的用例中遇到了这个。我使用的是 Xcode 6和 iOS 8。我创建了一系列全新的应用程序项目,并试图重用相同的捆绑包 ID,这样就不需要再次进行所有的门户端设置。这也只是为了沙箱测试。

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

我的解决办法是:

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

这种方法似乎不管先前的状态是什么,都是松散的,我可以用新的 app/相同的 bundle ID 注册 PN。

新的供给情况对我很有用。确保在开发过程中使用 Developer 配置文件(不要使用 Ad Hoc)。之后就没事了,不知道为什么旧的不能用了。

在推送通知已经在我的设备上运行之后,我也遇到了同样的问题。看起来 Xcode 缓存了一些不正确的东西,所以刷新修复了我的问题:

  1. Xcode-> 首选项-> 帐户
  2. 查看开发人员帐户的详细信息
  3. 只需点击几次刷新供应配置文件。每次刷新我都能看到这些变化。保持清新,直到它们停止变化。

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

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

check out the image

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

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

对于那些在 ios 10中得到这个错误的人,你可以尝试以下步骤:

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

问题就解决了。以上步骤帮助我摆脱了这个问题。希望对某些人有所帮助。