如何在Xcode 4.3中修复"为应用程序找到的无效'aps-environment'权利字符串"?

jwl*_*jwl 153 notifications push-notification apple-push-notifications ios

我一直在努力创建一个简单的iOS应用程序,可以接收推送通知.我这样做的唯一原因是为其他团队成员建立一个程序,并且无法在网络上的其他地方找到这些指令的最新工作版本.我们的商店对于iOS开发者来说相当新,我个人对iOS开发和Xcode完全缺乏经验.我偶然发现了Apple和其他地方的数十篇教程,文章和问题帖子,我觉得我可能差不多......

这是我必须去的地方(请注意我正在使用Xcode 4.3并尝试最初部署到iOS 5.1,并且我认为最近有些事情可能与早期版本的Xcode有所改变,但我再次对所有人都是新手这 - 并且发现它完全令人困惑和错综复杂):

1)我的iPhone上有配置文件,启用了Push功能

2)在我的测试Xcode项目中,我已选择配置文件作为签名标识(在Build Settings> Code Signing中)

在此输入图像描述

3)我已在"摘要和信息">"自定义iOS目标属性"下正确设置了我的包标识符*(我认为??)

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

5)我的委托中有didRegisterForRemoteNotificationsWithDeviceToken和didFailToRegisterForRemoteNotificationsWithError,设置为分别记录设备令牌或错误

6)我在Summary下检查了Enable Entitlements.

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

8)在Tinker6.entitlements文件中,我得到了以下内容(我收集的内容基于网络上的几个不同帖子是正确的,但是我找不到Apple自己确定的任何内容):

在此输入图像描述

更新

9)此外,我已经尝试了没有权利文件的整个事情,并获得了基本相同的结果.

10)我的mobileprovision文件内容包括正确的权利(我已经对数字和域进行了加扰,但结构相同):

<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>
Run Code Online (Sandbox Code Playgroud)

/结束更新

当我尝试在我的设备上运行它时,我在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}
Run Code Online (Sandbox Code Playgroud)

我已经尝试将get-task-allow设置为NO,aps-environment to production,所有四种可能的组合,同样的事情.

我怎么能通过这个?这方面的权威文件在哪里?

- 进一步的背景如下 -

*就bundle ID而言,我仍然不清楚如何在Provisioning配置文件中设置应用程序ID和配置文件ID.在App Ids下的Provisioning门户中,我有这个(再次,扰乱了数字和域):

在此输入图像描述

并且两个地方捆绑id设置我有这个:

在此输入图像描述 在此输入图像描述

我完全不确定这些是否正确,或者是否应将其中一个或两个设置为12355456A7.com.whatever.tinker,尽管我在此过程中尝试过这些但没有成功...

注意我意识到有许多帖子具有相似的标题,但是它们似乎都是根据文件名和反过来给出的,并且事实上没有一个解决方案似乎有用.我希望我给出的更高水平的细节将保证质量响应.我可能会尽快分配奖金,如果你给出一个高质量的答案导致解决方案,我将奖励你的奖金,并通过推特和我的博客推广你的答案.特别是如果你发布一个非常好的crosspost帖子"这里有你需要的确切的 500步骤,以便在你的博客或其他任何东西上获得一个简单的推送通知应用程序,包括配置和其他任何"文章.

elp*_*elp 94

如果在配置app ID推送之前创建了配置文件,请尝试重新生成配置文件.

iOS配置门户 - >配置 - >您的证书 - >编辑 - >进行编辑 - >下载新配置

为我工作.现在我可以使用推送.

  • 在门户网站.只需添加或删除设备,即可生成配置.之后,双击并安装在您的钥匙串中. (2认同)
  • 那里不再可以编辑设备 (2认同)

Mik*_*ler 69

首先,除非要添加供应配置文件中不存在的自定义键/值对,否则不需要权利文件.构建应用程序后,配置文件中的任何权利都将复制到应用程序.

鉴于您仍然看到有关缺少权利的错误消息,我只能假设代码签名选项在构建设置中不正确.

您需要确保为"Debug"配置选择了正确的配置文件,并且为了安全起见,您已为"Debug"和标记为"Any iOS SDK"的子节点选择了正确的配置文件:

在此输入图像描述

虽然此屏幕截图显示了所选的"自动开发人员"配置文件,但请从下拉列表中选择所需的确切配置文件,仅用于测试目的.可能是Xcode会自动选择与您想要的不同的配置文件.

另外一定要做一个干净的构建,从你的设备中完全删除应用程序等.这只是为了确保你没有一些旧的绒毛挂在身边.

  • 对,对不起.在路径之前需要一个`-`:`codesign -d --entitlements - /path/to/my.app`.此时再次检查您是否在Debug-iphoneos目录中也是值得的,因为"Show In Finder"有时会将您带到错误的位置. (3认同)
  • 嗯,是的,我相信.我为获取新配置文件所做的工作是,在Xcode Organizer中,从库和设备中删除配置文件,然后在库屏幕上单击Refresh.这将它从Provisioning Portal中拉回来.然后我将其添加到设备中.如上所示,mobileprovision文件XML ish内容显示正确的煽动 (2认同)

Dip*_*ara 64

我在Xcode 8中遇到过这个问题.您必须启用Target-> capabilities-> push notification.检查屏幕截图.

在此输入图像描述

  • 天哪,谢谢!来吧Apple,给我们一个更合理的错误信息! (3认同)

oox*_*xio 47

最简单的方法是使用Xcode从您的帐户执行此操作:

浏览Xcode - >首选项 - >选择帐户选项卡 - >查看详细信息 - >左下角的点击刷新按钮 - >完成.

再次构建它应该工作.


Max*_*Max 19

好的,我之前遇到过这个问题.由于推送通知需要服务器端实现,因此我无法重新创建配置文件.所以我发现这个解决方案没有创建新的配置文件.

尽管我们正确地选择了Xcode,但Xcode没有正确选择正确的配置文件.

首先去组织者.在"设备"选项卡上,从"库"列表中配置配置文件,选择我们尝试使用的预期配置文件.右键单击它,然后"在Finder中显示配置文件".

在此输入图像描述

将在打开的Finder窗口中选择正确的配置文件.记下名字.

在此输入图像描述

现在转到Xcode> Log Navigator.选择"全部"和"所有消息"的过滤器.现在在最后阶段(Build Target)寻找名为"ProcessProductPackaging"的步骤展开它.请注意配置配置文件名称.如果您遇到错误,它们应该不匹配. 在此输入图像描述

现在,在Opened Finder窗口中,删除Xcode正在使用的流氓配置文件.现在重新建立.应该解决错误.如果不重复该过程以找到另一个流氓配置文件将其删除.

希望这可以帮助.


jwl*_*jwl 18

答案是:重新开始,做一切相同但创建新的配置文件,然后安装它.那很有效.检查所有细节(移动设备中的权利)与我在此问题中的所有内容完全相同.但现在它有效.Apple:WAT?

当然,如果可以删除配置文件,那么显而易见.但由于这是不可能的,我不想让我们的团队混乱一堆测试配置文件.不过,最后还是失去了耐心,无论如何都试了一下,最后还是起来了.Whatevs.


小智 18

从管理器中的XCode删除旧的配置文件.

然后,在iOS配置门户中为相同的包ID生成新的配置文件(启用推送后).

在XCode中导入新的配置文件,在应用程序构建设置中进行设置.

构建,运行,它的工作原理.

我刚刚做完.

从错误到成功我花了10分钟.


kri*_*ris 16

XCode 6.1.1和多个苹果开发者帐户

这个已经相当全面的混合的另一个答案:我今天再次遇到这个问题,这次是因为我有多个苹果账户.我需要先在XCode> Preferences> Accounts> +中添加第二个开发者帐户

确保推送通知功能已打开

接下来,我需要在应用程序中实际显式启用应用程序内购买(我之前不需要这样做).XCode>(应用程序窗口)>目标>功能>应用程序内购买(在此阶段我可以选择正确的证书)

请注意,我已经在Finder中双击了已添加推送证书.

在此输入图像描述


Öme*_*alı 11

(Xcode 5)好吧,花了一个小时后我解决了我的问题.即使您在Xcode 5中重新生成配置文件,也应手动更新您的帐户.我只更改了管理器选项卡中不起作用的配置文件,Xcode使用旧的配置文件保持构建.

所以去吧

Xcode>首选项>帐户>查看详细信息(选择您的帐户)

然后刷新配置文件.


Gra*_*rks 7

我的问题只是我使用Xcode管理的通配符配置文件进行签名.

在我创建了一个特定于应用程序的配置文件(并下载它,双击它,并确保我的构建设置引用它)后,我成功收到了一个APNS设备令牌.


小智 6

我和其他人一样有同样的问题并尝试了所有上述技巧,没有任何效果.我甚至删除并开始使用不同的开发者帐户.

最终对我有用的是

  1. 按照上面的建议操作并创建APP ID
  2. 然后创建配置文件
  3. 请勿在配置的开发部分中使用团队通配符配置文件(由xcode管理).您需要使用您已将推送通知激活的应用ID另外创建一个.这种方式在开发时会内置推送通知功能.

我不知道你是否可以为通配符应用程序启用它,但在尝试了至少12个不同的建议并且失去了几天之后我希望这有助于某人

  • 但这对现有的答案没有任何补充,已经给出了这个建议.显然推送应用程序需要自己的配置文件; 文档很清楚,通配符配置文件不能用于任何需要特殊权利的应用程序. (2认同)