如何在Xcode 4.3中修复“应用程序没有找到有效的'aps-environment'授权字符串”的问题?

159
我一直在努力开发一个简单的iOS应用程序,可以接收推送通知。我的唯一目的是为其他团队成员建立一个使用流程,并且在网上找不到最新、可行的说明。我们的工作室对iOS开发还比较陌生,我个人对iOS开发和Xcode完全没有经验。我已经翻阅了数十篇教程、文章和苹果公司以及其他地方的问题帖子,感觉我可能快要成功了...
以下是我所达到的步骤(请注意,我正在使用Xcode 4.3,最初尝试部署到iOS 5.1,我了解一些东西可能与之前的Xcode版本有所不同,但是我对所有这些都很陌生,并且感到非常困惑和复杂):
1)我在我的iPhone上有一个启用了Push的配置文件
2)在我的测试Xcode项目中,我选择了该配置文件作为签名标识(在“Build Settings> Code Signing”中)

enter image description here

3)我已经在“摘要”和“信息”>“自定义iOS目标属性”下正确设置了我的捆绑标识符*(我想是这样的??)

4)我在委托的didFinishLaunchingWithOptions中调用了registerForRemoteNotificationTypes。

5)我在委托中设置了didRegisterForRemoteNotificationsWithDeviceToken和didFailToRegisterForRemoteNotificationsWithError,以记录设备令牌或错误。

6)我在摘要下方勾选了启用权利。

7)就在那下面,在选择的权利文件中是Tinker6(我的测试项目的名称),当我勾选启用权限时会自动生成。

8)在Tinker6.entitlements文件中,我有以下内容(根据网络上的几篇不同帖子收集到的信息,我认为这是正确的,但无法从苹果官方找到任何明确的说明):

enter image description here

更新

9) 同样,我已经尝试过不使用entitlements文件的整个过程,并且得到了基本相同的结果。

10) 我的mobileprovision文件内容包括正确的entitlements(我已经混淆了数字和域,但结构相同):

<key>application-identifier</key>
<string>12355456A7.com.whatever.tinker</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
    <string>12355456A7.*</string>
</array>

当我尝试在我的设备上运行此代码时,在Xcode输出中出现以下错误:
2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error: 
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' 
entitlement string found for application" UserInfo=0x24a3b0 
{NSLocalizedDescription=no valid 'aps-environment' entitlement string 
found for application}

我已尝试将get-task-allow设置为NO,aps-environment设置为production,以及四种可能的组合,但结果都一样。
如何解决这个问题?在哪里可以找到权威的文档?
--后续背景介绍如下--
就bundle id而言,我仍不清楚应该如何将其设置与Provisioning配置文件中的App Id和Profile id相关联。在Provisioning门户的App Ids下,我有以下内容(再次混淆了数字和域名):

enter image description here

当两个位置设置bundle id时,我有以下内容:

enter image description here enter image description here

我不确定这些是否正确,或者是其中一个还是两个都应该设置为12355456A7.com.whatever.tinker,尽管我在过程中尝试过这些,但没有成功...
注意:我意识到有许多类似标题的帖子,但它们似乎都已过时,基于给出的文件名等内容,并且解决方案似乎都没有用。我希望我提供的更详细的信息将获得高质量的回答。我可能会尽快分配赏金,如果您提供了一个高质量的答案,导致解决方案,我将授予您赏金,并通过Twitter和我的博客推广您的答案。特别是如果您在博客或其他地方发布一个真正好的“这里是您需要进行500个确切步骤来使简单的推送通知应用程序工作,包括配置和其他任何内容”的文章。

重复的帖子,我在这里找到了解决方案:https://dev59.com/L14c5IYBdhLWcg3w-OU4 - gadildafissh
24个回答

0

我尝试了这里列出的所有答案,但没有一个解决了我的问题。在我的情况下,这个错误是由于我在Appid创建中犯了愚蠢的错误。我使用了通配符App ID而不是使用显式App ID导致了问题。

如果您想让应用程序接收远程通知(推送通知),则需要使用显式App ID,例如com.tutsplus.push,而不是com.tutsplus.*

请查看屏幕截图, 输入图像描述


0

这就是解决我的问题的方法。(我已经尝试过切换功能开关、重新创建配置文件等)。

构建设置选项卡中,在代码签名授权中,我的.entitlements文件没有链接到所有部分。一旦我将它添加到任何SDK部分,错误就得到了解决。

enter image description here


0

在此输入图像描述你所需要做的就是,在.Entitlements文件中添加一个密钥。

APS环境需要添加此密钥,其值应根据您的目的设置为Developement或Production。

请检查上传的图像。


0

在Xcode 4.6中,“自动”权限似乎有一些古怪的问题。

每个SDK都有一个Entitlement.plist文件,位于以下位置:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/Entitlements.plist

我想到的一个解决方法是编辑这个文件,手动添加诡秘的aps-environment密钥,就像这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

然后,Xcode正在生成正确的Xcent文件,其中包含aps-environment密钥:

/Users/mySelf/Library/Developer/Xcode/DerivedData/myApp-buauvgusocvjyjcwdtpewdzycfmc/Build/Intermediates/myApp.build/Debug-iphoneos/myApp.build/myApp.xcent

你可以使用Xcode的日志导航器找到创建Xcent文件的位置,
寻找"ProcessProductPackaging"。

不幸的是,这是我找到的唯一解决办法,
(现在终于能够正确获取推送令牌了)

只是想知道是否还有其他更优雅的解决方案。
请查看我的SO问题以获取更多详细信息:
Xcode 4.6自动授权不起作用 - "没有有效的aps-environment"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接