如何解决“在Xcode 4.3中找不到有效的”aps-environment“授权string?

我一直在努力创build一个简单的iOS应用程序,可以接收推送通知。 我这样做的唯一理由是为其他一些团队成员build立一个程序,并且无法在networking上的其他地方find最新的工作版本。 我们的商店对于iOS开发来说相当新颖,我个人对iOS开发和Xcode完全没有经验。 我偶然发现了苹果和其他地方的数十篇教程,文章和麻烦post,我觉得我可能已经快到了那里了。

这里是我必须要注意的地方(注意我使用的是Xcode 4.3,并且最初尝试部署到iOS 5.1,而且我收集到一些事情可能已经在最近版本的Xcode上发生了变化,但是我又是新手了这 – 发现它完全混乱和复杂):

1)我的iPhone上有一个configuration文件,启用了Push

2)在我的testingXcode项目中,我已经select了供应configuration文件作为签名身份(在“生成设置”>“代码签名”中)

在这里输入图像描述

3)我有我的捆绑标识符摘要和信息>自定义iOS目标属性设置正确*(我认为??)

4)我有我的委托didFinishLaunchingWithOptions被调用registerForRemoteNotificationTypes

5)我已经在我的委托中设置了logging设备令牌或错误的didRegisterForRemoteNotificationsWithDeviceToken和didFailToRegisterForRemoteNotificationsWithError

6)我在“摘要”下选中了“启用权利”。

7)右边下面select的权利文件是Tinker6(我的testing项目的名称),这是我自动生成时,我检查启用权利

8)在Tinker6.entitlements文件中,我收到了以下内容(我收集的内容是基于Web上的几个不同的post,但是我无法从Apple本身find任何明确的信息):

在这里输入图像描述

更新

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> 

/结束更新

当我尝试在我的设备上运行此操作时,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} 

我已经尝试设置获取任务允许NO,APS环境生产,所有四种可能的组合,同样的事情。

我怎么能通过这个? 关于这方面的明确文件在哪里?

进一步背景如下

*就捆绑ID而言,我仍然不清楚应如何在供应configuration文件中设置App ID和Profile ID。 在应用程序ID下的configuration门户网站,我有这个(再次,炒数和域):

在这里输入图像描述

而这两个地方捆绑ID是设置我有这个:

在这里输入图像描述在这里输入图像描述

我一点也不确定这些是否正确,或者一个或两个是否应该设置为12355456A7.com.whatever.tinker,虽然我已经尝试了那些在这个过程中没有成功的人…

注意我知道有许多类似标题的post,但是它们似乎都是基于文件名和过时的,而且事实上没有任何解决scheme似乎是有用的。 我希望我提供的更详尽的细节将保证质量的回应。 我可能会尽快分配奖金,如果你给出一个高质量的答案,导致解决scheme,我会奖励你的赏金,以及通过推特和我的博客推广你的答案。 特别是如果您发布了一个非常好的邮件,“这里有500个步骤,您需要获得一个简单的推送通知应用程序,包括在您的博客或其他方面的configuration和其他任何”文章。

如果您在configuration推送的app ID之前创build了configuration文件,请尝试重新生成configuration文件。

iOSconfiguration门户 – >configuration – >您的证书 – >编辑 – >进行编辑 – >下载新的configuration

为我工作。 现在我可以使用推。

首先,除非您要添加供应configuration文件中不存在的自定义键/值对,否则不需要授权文件。 在构build应用程序时,configuration文件中的所有权利都将被复制到应用程序中。

鉴于您仍然看到有关缺less授权的错误消息,我只能假设代码签名选项在生成设置中不正确。

您需要确保为“Debug”configurationselect了正确的configuration文件,为了安全起见,您已经为“Debug”和子节点“Any iOS SDK”select了正确的configuration文件:

在这里输入图像描述

尽pipe此屏幕截图显示了所选的“自动开发者”配​​置文件,但只是出于testing目的,请从下拉列表中select所需的准确configurationconfiguration文件。 这可能是Xcode自动select一个不同的configuration文件比你想要的。

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

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

在这里输入图像描述

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

头部Xcode – >首选项 – >select帐户选项卡 – >查看详细信息 – >点击左下angular的刷新button – >完成。

再次build立,它应该工作。

好的,我之前遇到过这个问题。 由于推送通知需要在服务器端实现,因此重新创buildconfiguration文件不是一个选项。 所以我发现这个解决scheme没有创build新的configuration文件。

虽然我们select正确,Xcode没有正确select正确的configuration文件。

先去组织者。 在“设备”选项卡上,从“库”列表中configurationconfiguration文件,select要使用的预期configuration文件。 右键点击它,然后“在Finder中显示configuration文件”。

在这里输入图像描述

将在打开的Finder窗口中select正确的configuration文件。 记下名字。

在这里输入图像描述

现在转到Xcode>日志导航器。 为“全部”和“所有消息”selectfilter。 现在在最后阶段(构build目标)寻找名为“ProcessProductPackaging”的步骤展开它。 请注意供应configuration文件名称。 如果你有错误,他们不应该匹配。 在这里输入图像描述

现在在Opened Finder窗口中删除Xcode正在使用的恶意configuration文件。 现在再次build立。 错误应该解决。 如果不重复这个过程find另一个stream氓configuration文件将其删除。

希望这可以帮助。

答案是:重新开始,尽一切努力,但创build一个新的configuration文件,并安装它。 这工作。 检查所有的细节(移动设备的权利)看起来完全一样,在这里我的问题的一切。 但现在它的工作。 苹果:WAT?

当然, 如果可以删除configuration文件,那么这样做显而易见。 但是既然不可能,我不想用一堆testingconfiguration文件来混乱我们的团队。 尽pipe如此,终于失去了耐心,无论如何也尝试过了,最后才开始工作。 Whatevs。

在pipe理器中从XCode删除旧的configuration文件。

然后,在iOSconfiguration门户(在启用推送之后)中为同一捆绑包标识生成新的configurationconfiguration文件。

在XCode中导入新的configuration文件,将其设置在您的应用程序构build设置中。

build立,运行,它的工作。

我只是做了。

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

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

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

确保推送通知function处于开启状态

接下来,我需要在应用程序中明确启用应用程序内购买(以前我不需要这样做)。 XCode>(应用程序窗口)>目标>function>应用程序内购买开启 (在此阶段,我可以select正确的证书)

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

在这里输入图像描述

(Xcode 5)那么,花了一个小时后,我解决了我的问题。 即使您在Xcode 5中重新生成configuration文件,也应手动更新您的帐户。 我只更改了pipe理器选项卡中的configuration文件,这些文件不起作用,Xcode保留使用旧的configuration文件生成。

所以去

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

然后刷新您的供应文件。

我的问题只是我用Xcodepipe理的通配符configuration文件进行签名。

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

我有同样的问题是其他人,并尝试所有上述的技巧,没有任何工作。 我甚至删除并开始新的开发者帐户。

最终对我有用的是

  1. 按照上面的build议,创buildAPP ID
  2. 然后创buildconfiguration文件
  3. 不要在configuration的开发部分使用组通配符configuration文件(由xcode onepipe理)。 您需要使用您为其启用推送通知的应用程序ID单独制作一个。 这种方式,当你开发它将有内置的推送通知function。

我不知道是否可以启用通配符应用程序,但尝试了至less12个不同的build议,并失去了几天后,我希望这有助于某人

你提到一个供应configuration文件,但我没有看到任何提到的苹果推送configuration文件。

要使用推送,您必须有一个推送configuration文件(有两个,一个用于开发,一个用于发布)。 创build完成后,您需要确保它包含相关证书(请参阅下面的编辑部分)。

这是一个很好的教程,将引导您完成所有步骤:

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

这需要我或者其他人花几个小时来写一个详细的答案,比如本教程,所以我不打算尝试,或者在本教程已经存在的时候声明这个奖金。

PS我相信你不需要权利,这是一个遗留问题。

编辑:你也应该检查你的设备上有必要的configuration文件 – 去设置,然后一般,configuration文件,检查你的configuration文件列出,当然特别是推个人资料。 您也可以从XCode的Organizer部分查看。 在Organizer中,有两个部分表示configuration文件 – 一个在Library左上angular(这是XCode中用于签名的configuration文件等)。另外,您将看到一个部分调用供应连接的设备的configuration文件,是安装在手机上的configuration文件。 如果您没有将它们安装在手机上,则可以从configuration门户网站下载它们,然后单击pipe理器窗口底部的添加button。

在configuration门户中,您还应该检查Apple Push Profile是否包含证书: – 单击左侧菜单中的Provisioning – 您将看到您的configuration文件列表,select编辑Apple push profile – 您将看到证书部分,以及您在项目中的开发人员或testing人员列表等,确保已选中checkbox。 – 您还会看到一个设备部分,确保您正在testing的设备已添加。

如果您在XCode中或设备上有旧的configuration文件,请将其从configuration门户中删除并下载/刷新/安装所有新configuration文件

自己跑进这个同样的问题。 对我而言,问题在于我的产品名称($ TARGET_NAME)没有使用苹果提供的证书中提供的相同方式。 例如,我有com.companyid.APNDemo,而苹果证书是使用com.companyid.apndemo。

我改变了我的目标是小写,它的工作。 注意:我的线索是Build Settings中的密码设置被设置为我的默认开发人员证书; 而不是APNTestconfiguration文件。

我有一个类似的问题。 由于各种原因,我一直在XCode 7和8之间弹跳。 一旦你使用8来build立,你将需要使用8.我只是使用Xcode 8,并应用了上面build议的一些变化,它的工作。

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

我有一个与我的应用程序ID大写问题。 我的应用程序ID由于某种原因没有大写,但我的应用程序是。 一旦我重新创build了正确的大写的应用程序ID,它一切顺利。 希望这可以帮助。 虽然令人沮丧。

PS如果它仍然不起作用,请尝试使用“编辑”手动编辑代码签名标识字段。 使用正确的供应configuration文件名称的名称更改第二行。

我花了几个小时来解决它。 鉴于有人正在使用自定义脚本签名和打包,而其他人正在使用xcode本身,只有一种方法来检查在您的应用程序结束。 转储您的权利

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

并检查aps-environmentapplication-identifier

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

解决scheme是更新证书并使用它签名应用程序。

您需要确保您的configuration文件( https://developer.apple.com/account/ios/profile/ )中有一个iOS发行configuration文件。

当您从xCode上传到App Store时,请确保您拥有授权中的aps环境。 如果没有,请从查看帐户 – >查看详细信息 – >全部下载下载。

重新创build临时文件解决了我所有的问题。

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

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

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

我提出的解决方法是编辑这个文件并手动添加sneaky 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环境键:

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

您可以使用Xcode的Log Navigatorfind您的Xcent文件的创build位置,
寻找“ProcessProductPackaging”。

不幸的是,这是我发现解决这个问题的唯一方法。
(现在终于可以正确得到推送令牌了)

只是想知道是否有其他更优雅的解决scheme。
请参阅我的SO问题的更多细节:
Xcode 4.6自动授权不工作 – “没有有效的APS环境”

在删除和重新生成AppIDs / Profiles之前,请确保你的Library和Device具有相同的(和正确的)configuration文件。

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

问题是(杜),我没有导入configuration文件到新机器上的Xcode库(在pipe理器/设备下图书馆 – >供应configuration文件)。

令人困惑的是,DEVICE已经有了正确的configuration文件,并且在构build设置中按照预期显示,所以在那里一切看起来都正确,但XCode LIBRARY没有它们,所以它正在用…签名应用程序。 ?

这是为我固定的。 (我已经尝试打开/closuresfunction,重新创buildconfiguration文件等)。

在“ 生成设置”选项卡的“代码签名授权”中 ,我的.entitlements文件不是所有部分的链接。 一旦我将它添加到Any SDK部分,错误就解决了。

在这里输入图像描述

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

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

请findScreenShot, 在这里输入图像描述