找不到适用于应用程序的有效“ aps-environment”权利字符串


83

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

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

还有其他想法吗?谢谢。


对此一无所知?看来很多人都会遇到……
bashan 2012年

Answers:


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-iosP5GM95Q9VV .com.dca。斯波斯基

当我使粗体部分匹配时,斜体部分变为自动匹配。此外,安全性和代码签名的输出是一致的,并且没有更多的aps权利错误。

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


7
我遇到了类似的问题:项目“构建设置”与目标“构建设置” ...在我的情况下,我的目标设置默认为错误的配置文件。
罗布

1
在发现这一点的道具时,我遇到了相同的问题。
Codemonk

1
我的一位同事遇到了此配置问题。但是,在进入Xcode中的配置文件设置并刷新证书/设置键列表之后,我只能选择非通配符设置键。
cbh2000

1
我的“调试”目标设置使用的是iOS Developer / Automatic,这导致我的.app出现错误的代码签名身份。我必须为调试和发布明确设置项目和目标的设置,才能使用新的代码签名ID,问题已解决。这不仅是您的配置文件,还必须检查那些代码签名身份。没有这些出色的终端命令就无法解决!
self.name 2014年

6
仅作记录:要使推送通知正常工作,必须使用具有应用程序包ID的特定Provisioning Profile,而不能使用带有*通配符的Provisioning Profile 。
mgarciaisaia 2014年

37

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

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


它对我没有用。任何其他指针。请看看这个:stackoverflow.com/questions/25679750/...
Ajeet

29

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

  1. Xcode->首选项->帐户
  2. 查看您的开发者帐户的详细信息
  3. 只需单击“刷新”即可查看“配置文件”。我每次刷新都看到这些变化。不断刷新,直到它们停止更改。

奇怪的是,这对我有用!我刷新直到停止更新,然后清理了构建文件夹,然后重新启动了XCode。这是在我验证了配置文件和所构建的应用程序中的Bundle ID之后(两者都匹配的地方,这进一步困扰了我)。
肖恩·迈克尔·多里安

不再有“刷新”按钮(?)
格里

9

我收到此错误,没有创建新的配置文件;创建一个新的,然后必须重新启动xCode,但现在可以使用!


9

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


我有同样的问题,这为我解决了。
古巴

9

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

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

签出图像


3

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

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


那就是让我免于头痛的原因。谢谢!
jpaljasma

2

产品->清洁为我做到了。希望它可以为其他人做。


我都打扫。通过command-option-shift-k进行二次清理也很有帮助。
提请

2

我在一个不太常见的用例中遇到了这个问题。我正在使用Xcode 6和iOS8。我正在创建一系列全新的应用程序项目,并尝试重新使用相同的包ID,以免再次进行所有门户网站端设置。这也只是用于沙箱测试。

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

我的解决方案是:

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

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


2

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

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

问题将会解决。以上步骤可帮助我摆脱这个问题。希望对您有所帮助。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.