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


153

我一直在非常努力地创建一个可以接收推送通知的简单iOS应用程序。我这样做的唯一理由是为其他团队成员建立了使用程序,并且无法在网络上的其他地方找到此类指令的最新工作版本。对于iOS开发人员来说,我们的商店还很陌生,我个人对iOS开发人员和Xcode完全没有经验。我偶然发现了来自苹果公司和其他地方的数十篇教程,文章和故障发布,我觉得我可能快要出现了……

这是我必须要做的(请注意,我使用的是Xcode 4.3,最初尝试仅部署到iOS 5.1,我发现相对于早期版本的Xcode,最近发生了一些变化,但是我还是新手。这-并且发现它完全令人困惑和困惑):

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

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

在此处输入图片说明

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

4)我在我的代表的didFinishLaunchingWithOptions中调用了registerForRemoteNotificationTypes

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

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

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>

/结束更新

当我尝试在设备上运行此代码时,在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设置为生产,所有四个可能的组合都相同。

我该如何克服?确切的文件在哪里?

- 随后的背景 -

*就捆绑包ID而言,我仍然不清楚应如何在Provisioning配置文件中相对于应用程序ID和配置文件ID进行设置。在App ID下的Provisioning门户中,我有这个(同样,对数字和域进行了加密):

在此处输入图片说明

并设置了两个地方的捆绑ID,我有这个:

在此处输入图片说明 在此处输入图片说明

我根本不确定这些是正确的,还是不确定是否应将其中之一或两者都设置为12355456A7.com.whatever.tinker,尽管我已经在此过程的早期尝试过这些方法,但均未成功...

请注意,我意识到有很多标题相似的帖子,但是根据文件名和给出的名称,它们似乎都已经过时了,事实上,这些解决方案似乎都没有用。我希望我所提供的更多细节可以保证质量。我可能会尽快分配赏金,如果您给出的高质量答案能够带来解决方案,我将奖励您赏金,并通过Twitter和我的博客推广您的答案。特别是如果你crosspost发布一个真正的好“这里是确切的,你需要得到一个简单的推送通知的应用程序工作,包括供应和任何其他500步”你的博客或任何物品。

Answers:


94

如果您在配置app IDfor push 之前创建了配置文件,请尝试重新生成配置文件。

iOS Provisioning Portal-> Provisioning->您的证书-> EDIT->进行编辑->下载新的Provisioning

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


您是否确切需要“重新生成配置文件”的内容?这是XCode在Provisioning Portal中的哪个步骤?谢谢!
jwl 2012年

2
在门户中。只需添加或删除设备,即可生成您的配置。之后,双击并安装在您的钥匙串中。
Elp 2012年

抱歉,如果我很忙,但是在“设备”下添加/删除它?还是在实际的“配置文件”下的某个地方,如果准确的话,在哪里?
jwl 2012年

添加或删除设备是重新生成配置的一种技巧。您需要重新生成一个以使用推送通知,因为它与应用程序ID和推送证书相关联。.–
elp

69

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

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

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

在此处输入图片说明

尽管此屏幕快照显示了选中的“自动开发人员”配置文件,但仅出于测试目的,请从下拉列表中选择所需的确切配置文件。Xcode可能会自动选择与您想要的配置文件不同的配置文件。

另外,请确保执行干净的构建,从设备中完全删除该应用程序,等等。这只是为了确保您周围没有旧毛绒。


根据我帖子中的#2,我认为它设置正确,尽管我添加了一个澄清的屏幕截图以进行验证。我还尝试过完全删除该应用程序,并按照建议每2天关闭一次,因为我看到某个地方需要一天的时间才能重置一些信息(是的,我正在抓稻草!?)。但是,当您说“您需要确保为“调试”配置选择了正确的配置文件”时,您的确切意思是-我在哪里选择呢?
jwl 2012年

如果单击“ iPhone Developer”部分,或将任何内容设置为当前值,您将看到Xcode知道的所有配置概要文件的下拉列表。确保选择了正确的一个,或者“自动开发者”项选择了正确的一个。下拉菜单应显示所有内容。
Mike Weller 2012年

并且您确定您拥有最新的配置文件?启用推送之前,可能是您具有旧版本吗?
Mike Weller 2012年

2
好吧,是的,我相信。我要做的就是获取新的配置文件,是在Xcode Organizer中,从库和设备中删除该配置文件,然后在“库”屏幕上单击“刷新”。这将其从Provisioning Portal撤回。然后,我将此添加到设备中。并且如上所示,mobileprovision文件的XML ish内容显示了正确的内容
jwl 2012年

3
阿赫对不起 需要有一个-路径前:codesign -d --entitlements - /path/to/my.app。此时再次检查您是否在Debug-iphoneos目录中也是值得的,因为“ Show In Finder”有时会带您到错误的位置。
Mike Weller 2012年

64

我已经在Xcode 8中遇到了这个问题。您必须启用目标->功能->推送通知。检查屏幕截图。

在此处输入图片说明


1
这对我有帮助!!!只需单击一个按钮,即可解决我调试了数小时的问题……Xcode8也是如此。
萧敬腾

3
天哪,谢谢!快来苹果,给我们一个更合理的错误信息!
Ferran Maylinch '16

Xcode 8为我的应用关闭了推送通知,因此该解决方案有效。
凯文

1
谢谢,我必须先完成3次其他设置步骤,然后才能找到它。我觉得自己是个白痴,但是这些工具不利于解决这个问题。
Collin Flynn

你救了我的一天,伙计!
oskarko

47

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

转到Xcode->首选项->选择“帐户”标签->查看详细信息->点击左下方的刷新按钮->完成。

再次构建,它应该可以工作。


19

好吧,我之前遇到过这个问题。由于推送通知需要在服务器端实施,因此对我而言,重新创建配置文件不是一种选择。因此,我发现此解决方案无需创建新的配置文件。

尽管我们选择正确,但Xcode并未正确选择正确的配置文件。

首先去组织者。在“设备”选项卡的“库中的供应配置文件”列表中,选择我们要使用的预期配置文件。右键单击它,然后单击“ Finder中的显示配置文件”。

在此处输入图片说明

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

在此处输入图片说明

现在转到Xcode> Log Navigator。为“所有”和“所有消息”选择过滤器。现在,在最后一个阶段(构建目标)中,寻找名为“ ProcessProductPackaging”的步骤,将其展开。请注意供应配置文件名称。如果出现错误,它们应该不匹配。 在此处输入图片说明

现在,在“打开的查找器”窗口中,删除Xcode使用的流氓供应配置文件。现在再次构建。该错误应得到解决。如果没有,请重复此过程以找到另一个恶意配置文件以将其删除。

希望这可以帮助。


这是我的错,但使用此方法已解决。我不小心在信息框中放入了与生成证书时使用的标识符不同的标识符。
JavaCoderEx

18

答案是:重新开始,做所有相同的事情,但是创建一个新的配置文件并安装它。那行得通。检查所有详细信息(移动供应中的权利)看起来与我在此问题中的所有内容完全相同。但是现在可以了。苹果:WAT?

当然,如果可以删除配置文件,则显然可以这样做。但这是不可能的,所以我不想让我们的团队充满一堆测试配置文件。尽管如此,最终还是失去了耐心并尝试了一下,最终还是成功了。Whatevs。


创建一个新的配置文件和“弄脏”旧就像是在这个其他SO问题说为我工作:stackoverflow.com/questions/5681172/...
scurioni

我要做的就是从门户网站中删除现有的配置文件,然后重新创建它。您可以在更新后立即删除配置文件,因此无需创建新的应用程序ID。
2013年

具有相同应用程序ID和分发证书的新配置配置文件为我解决了此问题。+1 :)
阿西克·阿卜杜拉

18

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

然后,在iOS设置门户中为相同的捆绑包ID生成一个新的设置配置文件(启用推送之后)。

在XCode中导入新的配置文件,然后在您的应用构建设置中进行设置。

生成,运行并运行。

我刚刚做完。

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


这也是为我工作的。编辑旧的配置文件和下载对我不起作用。谢谢!
prageeth

作为有用的附录,我没有删除新的配置文件,而是删除了旧的配置文件
-ritmatter

1
我强烈建议不要用手做。使用github.com/fastlane/PEM
fatuhoku

16

XCode 6.1.1和多个Apple开发者帐户

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

确保推送通知功能已启用

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

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

在此处输入图片说明


我对此颇为关注,我想当我切换到Xcode 8 beta时,它关闭了我的推送通知开关或其他功能。谢谢
不可思议的2016年

谢谢,这就是为什么我有这个问题。我的应用程序ID已启用了应用程序内购买,游戏中心等功能,但在Xcode /功能中,它们之前都已关闭,没问题。自从更新到Xcode 8之后,我就遇到了这个问题。在Xcode中启用IAP和游戏中心后,问题就消失了!
伊桑·朗

11

(Xcode 5)好了,花了一个小时之后,我解决了问题。即使您在Xcode 5中重新生成了配置文件,也应该手动更新您的帐户。我只在“管理器”选项卡中更改了配置文件,但该文件不起作用,Xcode继续使用旧的配置文件进行构建。

所以去

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

然后刷新您的配置文件。


7

我的问题很简单,我正在使用Xcode管理的通配符配置文件进行签名。

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


我也有这个问题。Xcode 5非常擅长更新任何配置文件。我在以后的开发中添加了APNS服务。您必须确保上述海报指出您的配置文件实际上是您正在使用的应用程序所独有的配置文件,而不是通配符。
2014年

@Michael,您如何确定?我尝试在我的构建设置中(在代码签名下)更改它,该设置当前未设置。当我选择正确的配置文件并进行构建时,它会出现错误,然后返回到通配符配置文件。
伊恩·贾米森

@ian,您遇到什么错误?您确定它是有效的个人资料吗?
2014年

嗯,我已经对它进行了排序,我需要将正确的证书重新下载到Mac。这似乎已经解决了问题。谢谢。
伊恩·贾米森

听到那个消息很开心。这是我通常在设置正确时执行的操作。重做所有证书。似乎是问题多次。
迈克尔

6

我遇到的问题是其他所有人,并尝试了上述所有技巧,但没有任何效果。我什至删除并使用另一个开发者帐户重新开始。

最终对我有用的是

  1. 按照上述建议进行操作并创建APP ID
  2. 然后创建配置文件
  3. 不要在配置的开发部分中使用团队通配符配置文件(由xcode one管理)。您需要使用已使推送通知处于活动状态的该应用程序ID来制作一个单独的应用程序。这样,当您进行开发时,它将内置推送通知功能。

我不知道您是否可以为通配符应用程序启用该功能,但是在尝试了至少12种不同的建议并浪费了几天后,我希望这会对某人有所帮助


2
但这对现有的答案没有任何帮助,而现有的答案已经给出了建议。显然,推送应用需要自己的个人资料;文档非常清楚,通配符配置文件不能用于需要特殊权利的任何应用程序。
马特2012年

1
我已经做到了,但是我的应用程序只会选择通配符配置文件,我不能强迫它选择启用了推送通知的配置文件。
伊恩·贾米森

3

您提到了一个配置文件,但没有看到任何有关Apple Push Profile的消息。

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

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

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

像本教程一样,我或其他任何人都需要花费数小时才能编写出详尽而详尽的答案,因此,在本教程已经存在时,我既不会尝试也不会提出悬赏。

附言:我认为您不再需要授权,这是一件很古老的事情。

编辑:您还应该检查设备上是否有必要的配置文件-转到设置,然后选择常规配置文件,检查是否列出了您的配置文件,尤其是推送配置文件。您也可以从XCode的Organizer部分中进行检查。在Organizer中,有两个部分显示“供应配置文件”-一个在库的左上角(这是XCode中用于签名等的配置文件。)此外,您还将看到一个名为“连接配置文件的供应配置文件”的部分,这是是手机上安装的配置文件。如果您没有在手机上安装它们,则可以从供应门户网站下载它们,然后单击管理器窗口底部的“添加”按钮。

在供应门户中,您还应该检查Apple Push Profile是否包含证书:-单击左侧菜单上的Provisioning-您将看到一个配置文件列表,选择以编辑Apple Push Profile-您将看到在证书部分,其中列出了您的项目中的开发人员或测试人员等。请确保已选中复选框。-您还将看到设备部分,请确保已添加要测试的设备。

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


如果权利是遗留问题,那么为什么我会收到一条消息,抱怨没有权利?我已经按照链接教程的顺序写了这封信,但是没有运气。
jwl 2012年

另外,我添加了一些有关实际mobileprovision文件的信息,这可能会很有用。
jwl 2012年

是的,我什至没有设置任何.entitlements来成功推送通知。在执行此操作时,令我感到困扰的一件事是,我需要手动下载mobileprovision,然后去建立设置并更改签名身份以匹配刚刚下载的那个,在我的情况下,显然Xcode选择了通配的mobileprovision。
X Slash 2012年

不久前,我也收到有关授权的错误消息,该消息是红色的鲱鱼,请参阅Mike Wellers的回复,这就是我的情况。
Gruntcakes 2012年

我已经为您更新了更多答案供您检查。
Gruntcakes 2012年

2

我自己也遇到过同样的问题。对我来说,问题是我的产品名称($ TARGET_NAME)的大写字母与apple提供的证书中的大写字母不同。例如,我有com.companyid.APNDemo,而Apple证书使用的是com.companyid.apndemo。

我将目标更改为小写,并且成功了。注意:对我来说,线索是将“构建设置”中的代码签名设置设置为我的默认开发人员证书;而不是APNTest供应配置文件。


1

上述许多答案都是正确的。但是,处理此问题时似乎存在多个错误。

我遇到的一个问题是应用ID的大小写问题。由于某种原因,我的应用程序ID未被大写,但我的应用程序却被大写。一旦我用正确的大写字母重新创建了应用程序ID,一切都将顺利进行。希望这可以帮助。令人沮丧的是。

PS,如果仍然无法使用,请尝试使用“编辑”手动编辑“代码签名身份”字段。用正确的供应配置文件名称的名称更改第二行。


1

我花了几个小时才解决。假设有人使用自定义脚本进行签名和打包,而其他人则使用xcode本身,则只有一种方法可以检查应用程序的结尾。将您的权利与

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

并检查aps-environmentapplication-identifier


我一直面临着同样的问题。只是想问一下,应用程序路径是否适用于模拟器上安装的应用程序?
Ajeet 2014年

不,这是xcode构建目录中实际设备的已编译应用程序的路径。
2014年

1

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

解决方案是续订证书并用它签名应用程序。



1

我有一个类似的问题。由于各种原因,我一直在XCode 7和8之间弹跳。一旦使用8进行构建,就将需要使用8。我只是使用Xcode 8,并应用了上面建议的一些更改,然后它起作用了。



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的Log Navigator找到创建Xcent文件的位置,
查找“ ProcessProductPackaging”。

不幸的是,这是我发现解决此问题的唯一方法。
(最终现在能够正确获取推送令牌)

只是想知道是否还有另一个更优雅的解决方案。
请参阅我的SO问题以获取更多详细信息:
Xcode 4.6自动授权不起作用-“无有效的aps环境”


0

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

迁移到新计算机后,我开始看到此错误。在迁移之前,推送已正常工作。

问题是(duh)我没有将配置文件导入到新计算机上的Xcode库中(在Library-> Provisioning Profiles下的Organizer / Devices中)。

令人困惑的部分是,DEVICE已经具有正确的配置文件,并且按预期在构建设置中显示,因此那里的所有内容看起来都是正确的,但是XCode LIBRARY没有它们,因此正在使用...对应用程序进行签名。 ?


0

这就是为我解决的问题。(我已经尝试过打开/关闭功能,重新创建配置文件等)。

在“ 构建设置”选项卡的“代码签名权利”中,并非所有部分都链接我的.entitlements文件。将其添加到“ 任何SDK”部分后,该错误已解决。

在此处输入图片说明


0

我尝试了此处列出的所有答案,但没有人解决我的问题。就我而言,此错误是由于我在Appid创建过程中的愚蠢错误。我使用通配符应用程序ID而不是使用显式应用程序ID导致问题

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

请找到ScreenShot, 在此处输入图片说明

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.