如何修复 Xcode 4.3中“找不到适用于应用程序的有效‘ aps-Environment’授权字符串”?

我一直在非常非常努力地创建一个简单的 iOS 应用程序,它可以接收推送通知。我这样做的唯一原因是为了建立一个程序供其他团队成员使用,并且还没有能够在网络其他地方找到这种指令的最新工作版本。我们的工作室对于 iOS 开发来说是相当新的,我个人对于 iOS 开发和 Xcode 完全没有经验。我已经从苹果和其他地方偶然发现了数十个教程、文章和问题帖子,我觉得我可能就快到了... ..。

这就是我要做的(注意我正在使用 Xcode 4.3,并且最初试图仅仅部署到 iOS 5.1,我猜想最近相对于 Xcode 的早期版本可能有一些改变,但是我对这些都是新的——并且发现它完全令人困惑和费解) :

1)我的 iPhone 上有一个启用了推送功能的配置文件

2)在我的测试 Xcode 项目中,我选择了那个供应配置文件作为签名标识(在构建设置 > 代码签名中)

enter image description here

3)我已经在 Summary 和 Info > Custom iOS Target Properties 下设置好了我的 bundle 标识符 * (我认为? ?)

4)在我的代表的 diFinishLaunchingWithOptions 中调用 registerForRemoteNotificationTypes

5)我已经在我的委托中设置了 did RegisterForRemoteNotificationsWithDeviceToken 和 did FallToRegisterForRemoteNotificationsWithError,分别记录设备令牌或错误

6)我在摘要下面检查了 Enable Entitments。

7)正下方选中的 Entitments File 是 Tinker6(我的测试项目的名称) ,它是在我选中 Enable Entitments 时自动生成的

8)在 Tinker6.entiments 文件中,我得到了以下内容(根据网络上几篇不同的帖子,我得出的结论是正确的,但是我找不到任何关于苹果自身的确切信息) :

enter image description here

更新

9)另外,我尝试了整个事情没有一个权利文件,并得到基本上相同的结果。

10)我的移动条款文件内容包括正确的权利(我扰乱了数字和域,但结构相同) :

<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,将 ap- 环境设置为 production,所有四种可能的组合,都是一样的。

我怎样才能通过这个? 哪里有这方面的明确文件?

—— 进一步的背景资料如下——

* 至于捆绑包 ID,我仍然不清楚应该如何设置相对于应用程序 ID 和配置文件 ID 在配置文件。在应用程序 ID 下的供应门户中,我有以下内容(同样,扰乱了数字和域名) :

enter image description here

把 bundle id 设置成这样:

enter image description here enter image description here

我完全不确定这些是否正确,或者是否应该将其中一个或两个设置为12355456A7.com。随便啦,修补匠,虽然我之前试过,但没成功。

注意 我意识到有很多帖子有类似的标题,但是根据给出的文件名和其他信息,它们似乎都过时了,而且没有一个解决方案是有用的。我希望我提供的更详细的信息能保证得到高质量的回复。我可能会尽快分配一个赏金,如果你给出一个高质量的答案,导致一个解决方案,我会奖励你的赏金,以及推广你的答案通过推特和我的博客。特别是如果你交叉发布了一篇非常好的“这里是 一模一样500步骤,你需要得到一个简单的推送通知应用程序工作,包括供应和其他任何东西”的文章在你的博客或任何东西。

183656 次浏览

你提到了供应配置文件,但我没有看到任何提到苹果推送配置文件。

要使用 Push,您必须有一个 Push 配置文件(有两个,一个用于开发,一个用于发布)。创建之后,您需要确保它包含相关的证书(请参阅下面的编辑部分)。

这是一个非常好的教程,它将指导你完成所有的步骤:

Http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

这将花费我,或任何其他人,小时和小时来写一个完整的详细的答案像这个教程,所以我不会试图,也不声称这个教程已经存在的赏金。

另外,我相信你不再需要津贴了,这是遗产的问题。

编辑: 你也应该检查你有必要的配置文件在设备上-去设置,然后一般,配置文件,检查你的配置文件列出,特别是推当然配置文件。 您还可以从 XCode 的 Organizer 部分检查这一点。在 Organizer 中有两个部分说到“供应配置文件”——一个在 Library 的左上角(这是你用来签名的 XCode 中的配置文件等)。你还会看到一个叫做“供应配置文件”的部分,用于连接的设备,这是安装在手机上的配置文件。 如果您没有在手机上安装它们,您可以从供应门户网站下载它们,然后单击“组织者”窗口底部的“添加”按钮。

在供应门户中,您还应该检查 Apple Push Profile 是否包含证书: - 点击左边菜单上的“供应” 你会看到你的个人资料列表,选择编辑苹果推送配置文件 您将看到一个证书部分,其中包含您的项目中的开发人员或测试人员等的列表,请确保选中了复选框。 你还会看到一个设备部分,确保你正在测试的设备已经被添加。

如果在 XCode 或设备上有任何旧的概要文件,请删除它们,并从配置门户下载/刷新/安装所有新的概要文件

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

鉴于您仍然看到关于缺少应用程序的错误消息,我只能假设代码签名选项在构建设置中是不正确的。

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

enter image description here

虽然这个屏幕截图显示了所选择的“自动开发人员”配置文件,但是为了测试目的,请从下拉菜单中选择您想要的准确配置文件。可能是 Xcode 自动选择了与您想要的不同的配置文件。

还要确保做了一个干净的构建,完全从您的设备上删除应用程序,等等。这只是为了确保你身边没有什么老家伙。

如果在为 push 配置 app ID之前创建了供应配置文件,请尝试重新生成供应配置文件。

IOS 供应门户-> 供应-> 您的证书-> 编辑-> 制作 编辑-> 下载新配置

对我有用,现在我能用推力了。

答案是: 重新开始,做所有相同的事情,但是创建一个新的供应配置文件,然后安装它。成功了。检查所有的细节(在移动提供的权利)看起来 没错一样的一切在我的问题在这里。但现在起作用了。苹果: 什么?

当然,这样做是显而易见的,如果删除供应配置文件是可能的。但既然这不可能,我不想让我们的团队,被一堆测试档案弄得一团糟。不过,最终还是失去了耐心,还是试了试,结果还是奏效了。随便啦。

我自己也遇到过同样的问题。对我来说,问题在于我的产品名($TARGET _ NAME)没有按照苹果提供的证书中显示的方式大写。例如,我有 com.companyid.APNDemo,而 Apple 证书使用 com.companyid.APNDemo。

我把目标改成小写了,还真管用。注意: 对我来说,线索是 Build Settings 中的协同设计设置被设置为我的默认开发人员证书,而不是 APNTest 配置文件。

好吧,我以前遇到过这个问题。由于推送通知需要服务器端实现,因此对我来说,重新创建配置文件不是一个选项。因此,我发现这个解决方案没有创建新的供应配置文件。

Xcode 没有正确地选择正确的供应配置文件,尽管我们正确地选择了它。

先去找组织者。在“设备”选项卡上的“从库提供配置文件”列表中,选择要使用的预期配置文件。右键单击它,然后“在查找程序中显示配置文件”。

enter image description here

在打开的 Finder 窗口中将选择正确的配置文件。

enter image description here

现在转到 Xcode > Log Navigator。选择“所有”和“所有邮件”的过滤器。现在在最后一个阶段(BuildTarget)中查找名为“ ProcessProductPackaging”的步骤来展开它。请注意配置文件名称。他们不应该匹配,如果你有错误。 enter image description here

现在,在 OpenFinder 窗口中删除 Xcode 正在使用的流氓供应配置文件。现在重建。应该解决该错误。如果没有重复该过程,找到另一个流氓配置文件删除它。

希望这个能帮上忙。

我和其他人有同样的问题,我尝试了以上所有的方法,都没有效果。我甚至删除了一个不同的开发者帐号,重新开始。

最后对我有用的是

  1. 按照上面的建议,创建 APP ID
  2. 然后创建供应配置文件
  3. 不要在配置的开发部分中使用团队通配符配置文件(由 xcode one 管理)。您需要使用已激活推送通知的应用程序 ID 创建一个单独的应用程序 ID。这样,当你开发它将有内置的推送通知功能。

我不知道你是否可以启用通配符应用程序,但在尝试了至少12种不同的建议,失去了几天,我希望这有所帮助

从 Organizer 中的 XCode 中删除旧的供应配置文件。

然后,在 iOS 供应门户中为相同的 bundle id 生成一个新的供应配置文件(在启用 push 之后)。

在 XCode 中导入新的供应配置文件,并在应用程序构建设置中设置它。

构建,运行,它工作。

我做到了。

从错误到成功只用了10分钟。

Xcode 4.6中的“自动”权限似乎有些古怪。

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

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

我想到的一个解决方案是编辑这个文件,并手动添加鬼鬼祟祟的应用程序环境键,如下所示:

<?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 环境密钥:

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

您可以使用 Xcode 的 Log Navigator 找到创建 Xcent 文件的位置,
查找“ ProcessProductPackaging”。

不幸的是,这是我找到 解决了问题的唯一方法。
(现在终于能够正确地获得推送令牌了)

只是想知道是否还有其他更优雅的解决方案。
关于这一点的更多细节,请参见我的 SO 问题:
Xcode 4.6自动授权不起作用-“无有效的应用程序环境”

在删除和重新生成 AppID/Profiles 之前,请确保库和设备安装了相同(且正确)的配置文件。

在迁移到一台新计算机后,我开始看到这个错误。 在迁移之前,Push 一直工作正常。

问题是(当然)我没有将概要文件导入到新机器上的 Xcode 库中(在 Library-> Provisoning Profiles 下的 Organizer/Device 中)。

令人困惑的是,设备已经有了正确的配置文件,它们在构建设置中如期出现,所以一切看起来都是正确的,但 XCode LIBRARY 没有它们,所以它正在签署应用程序与... ? ?

以上很多答案都是正确的。然而,在处理这个问题时似乎有不止一个可能的错误。

我遇到的问题是我的应用程序 ID 的资本化问题。由于某种原因,我的应用程序 ID 没有大写,但我的应用程序大写了。一旦我用正确的大小写重新创建了应用程序 ID,一切都进行得很顺利。希望这个能帮上忙。虽然很沮丧。

另外,如果它仍然不工作,尝试用“编辑”手动编辑代码签名身份字段。使用正确的供应配置文件名称更改第二行。

我的问题很简单,我使用的是 Xcode 管理的通配符配置文件。

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

(Xcode 5)嗯,花了一个小时后,我解决了我的问题。即使在 Xcode 5中重新生成供应文件,也应该手动更新帐户。我只是在 Organizer 选项卡中更改了配置文件,没有工作,Xcode 继续构建旧的配置文件。

那就去吧

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

然后刷新供应文件。

我花了好几个小时才解出来。假设有人使用自定义脚本来签名和打包,而其他人使用 xcode 本身,那么只有一种方法来检查应用程序的结尾。抛弃你的权利

codesign --display --entitlements :- path/to/MyApp.app

检查 aps-environmentapplication-identifier

最简单的方法就是从你的 Xcode 账户中进行操作:

点击 Xcode-> 参数设置-> 选择帐户标签-> 查看详细信息-> 点击左下角的刷新按钮-> 完成。

重建,它应该工作。

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

对于这个已经相当全面的组合的另一个答案是: 我今天再次遇到这个问题,这次是因为我有多个苹果帐户。我需要首先在 XCode > 首选项 > 帐户 > + 中添加第二个开发人员帐户

确保推送通知能力为 ON

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

注意,我已经通过在 Finder 中双击它添加了已启用推送的证书。

enter image description here

证书过期时可能发生此错误。

解决办法是更新证书并用它签署申请。

您需要确保在供应配置文件(https://developer.apple.com/account/ios/profile/)中有一个 iOS 分发配置文件。

当您从 xCode 上传到 AppStore 时,请确保在应用程序商店中有应用程序环境。如果没有,从查看帐户-> 查看详细信息-> 下载所有。

我在 Xcode 8中遇到过这个问题。 您必须启用目标ー > 能力ー > 推送通知。 看看截图。

enter image description here

就是这个帮我修好的。(我已经尝试打开/关闭功能,重新创建供应配置文件等)。

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

enter image description here

我试了这里列出的所有答案,但没有人解决我的问题。在我的情况下,这个错误是由于我在应用程序创建中的愚蠢错误。我使用 通配卡应用程序 ID而不是使用 显式应用程序 ID造成的问题

如果希望应用程序接收远程通知(推送通知) ,则需要使用 显式应用程序 ID(如 )而不是 Com.utsplus. *

请找到屏幕截图, enter image description here

我也有过类似的问题。由于各种原因,我一直在 XCode7和 XCode8之间跳来跳去。一旦你使用8来构建,你将需要使用8。我只是简单地使用了 Xcode 8,并应用了上面建议的一些更改,它就起作用了。

重建临时文件解决了我所有的问题。

enter image description here所有您需要做的是,添加一个关键。

APS 环境这个关键需要添加和价值应该是开发或生产,根据您的目的。

请检查上传的图像