可执行文件使用无效的权利进行签名

时间:2009-07-02 14:03:00

标签: iphone installation adhoc

我在iPhone上进行临时分发时遇到问题。我用SDK 3.0开发了一个应用程序。我有开发人员的执照。我在项目中添加了证书和配置文件。所以,没问题。

但是,当我尝试在iPhone上安装应用程序时,它会编译项目,然后在管理器窗口中显示错误:"The executable was signed with invalid entitlements"。我错过了什么吗?我已经从2.2.1升级了iPhone,并从Apple下载了最新的SDK。

请帮我解决这个问题。

19 个答案:

答案 0 :(得分:53)

“门户计划”中有很好的指示。如果您登录

http://developer.apple.com/iphone

然后单击左侧的“分布”,然后单击

为特别分发创建和下载分发配置文件

在底部链接。

这是关键位:

对于Ad Hoc Distribution,请完成以下操作:

  • 在文件菜单中,选择新文件 - > iPhone OS - >代码签名 - >授权。 将文件命名为“Entitlements.plist”,然后单击“完成”。这将在项目中创建默认权利文件的副本。
  • 选择新的Entitlments.plist文件并取消选中“get-task-allow”属性。保存Entitlements.plist文件。 (在Xcode 4中,get-task-allow被称为“可以调试”)
  • 选择目标并打开构建设置检查器。在“代码签名权利”构建设置中,键入包含扩展名的新Entitlements.plist文件的文件名。除非您将Entitlements.plist文件放在项目顶层以外的其他位置,否则无需指定路径。
  • 点击“构建”。 (注意:您的二进制文件必须包含一个57x57像素的扁平方形图标。此图标显示在iPhone或iPod touch主屏幕上。)

答案 1 :(得分:34)

如果您尝试对设备未包含在配置文件中的应用进行配置,也可能会出现此错误。

确保您的设备包含在您要使用的开发配置文件中。不知何故,错误消息具有误导性。我的权利实际上还可以。

答案 2 :(得分:14)

我发现需要为开发构建检查“get-task-allow”,但是对于Distribution构建未选中。完成此任务的最简单方法(AFAIK)是在项目中包含两个权利文件:Entitlements.plist和EntitlementsDebug.plist - 并在构建项目设置中引用适当的一个用于各种配置你的项目。

答案 3 :(得分:6)

Xcode 4中的Ad Hoc版本不再需要代码签名权利 - 请参阅Apple Technical Note TN2250

中的详细说明

答案 4 :(得分:4)

如果您曾经遇到这种情况,那么为了将调试(!)版本部署到您的手机,似乎需要检查“get-task-allow”,请检查:

a)检查构建设置。 Debug的“代码签名权利”中不应有任何条目 b)暂时删除Entitlements.plist并构建调试版本。如果它抱怨缺少Entitlements.plist,那么你可能有同样的情况,我今天不得不打架。 c)使用Entitlements.plist再次构建并启用“get-task-allow”。如果它现在有效,你可能会遇到同样的问题:

在搞乱新的配置文件后,我无法将我的Debug版本部署到手机上。 AdHoc很好。我查了一下) - 空..嗯。我检查了b) - 抱怨。 c) - 工作......

毕竟我在编辑器中检查了project.pbjproj并且 - 尽管GUI确实声称,“代码签名权利”没有条目,实际上在Debug部分中有一个。我把它清空并完成了。

答案 5 :(得分:4)

这是因为未使用您的配置文件选择运行应用程序的设备。

因此,只需完成Certificates, Identifiers & Profiles选择iOS Provisioning Profiles点击编辑,然后选择您的设备

enter image description here

答案 6 :(得分:2)

我刚刚激动了三个小时与此作斗争。我刚刚将一个项目升级到4.2,由于某种原因它只是无法工作。

我最终删除了Entitlements.plist文件,然后创建了一个新文件。

档案>新文件>代码签名>权利

将文件命名为Entitlements.plist

确保它位于xCode中的Resources组中。

它没有在Entitlements.plist文件中放入get-task-allow BOOL类型。我添加了它,检查它,保存它,取消选中它,保存它。这让我感觉好多了。

然后我删除了我创建的Adhoc和Release配置文件。从Provisioning Portal重新下载它们并将它们重新下载到xCode管理器中。

然后我进入了Build Settings并确保将正确的配置文件分配给Debug和Release配置文件。

然后我将其更改为Release / Device。点击构建按钮,它就可以了。

我不知道为什么。

答案 7 :(得分:1)

约翰的回答是正确的99%。我发现(至少在我的配置中),您必须打开 PROJECT 的Build设置检查器。目标的构建设置不包含“代码签名权利”。如果项目中只有一个目标,也许这没有任何区别。但是,如果您有多个目标,则需要转到项目构建设置。在任何情况下,在做了约翰所说的之后,我的临时分发构建工作得非常完美。

答案 8 :(得分:1)

对我来说解决了它: https://coderwall.com/p/-ckobg

  1. 打开Project.xcodeproj> project.pbxproj
  2. 删除所有这些行:
    1. PROVISIONING_PROFILE = ...
    2. "PROVISIONING_PROFILE[sdk=iphoneos*]" = ...
    3. CODE_SIGN_IDENTITY = ...
    4. "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ...
  3. 设置配置文件&再次为目标签署代码

答案 9 :(得分:1)

在Xcode 5.1中,如果你进入首选项 - >帐户 - >查看详细信息......

确保签名身份状态为有效。如果显示Revoked,请点击加号按钮并添加相应的签名身份:iOS开发或iOS分发。 Xcode将用一个新的有效的替换它。

答案 10 :(得分:0)

如果一切似乎都设置正确就会出现此问题,则构建设置指向正确的配置文件,代码签名已正确设置等。

问题发生是因为我刚刚创建了一个新方案,并且没有为新配置重新生成我的CocoaPods 。从图像中可以看出,新的ad-hoc配置指向Pods.production配置,而不是Pods.ad-hoc配置(并分别测试)

Demonstrating a mis-match of ad-hoc configuration and scheme configuration

修复:

  • 将违规配置设置为None - 除非我这样做,否则cocoapods不会生成配置
  • 关闭XCode
  • 运行pod install
  • 重新打开XCode并将新方案的配置设置为新生成的配置。

就是这样!

答案 11 :(得分:0)

我没有同意苹果新的更新许可协议。

简要说明:请登录您的开发者帐户 - >个人资料 - >评论 - >阅读协议或让您的律师为您阅读 - >同意(按照您的意愿) - >然后再次单击配置文件以检查配置文件的状态。

在我的方案中,有效的代码签名实体没有显示出来。当我按照上面的程序时,它是可见的,我能够在设备上运行应用程序和/或创建iPA文件没有太大的困难。

答案 12 :(得分:0)

我刚刚遇到了我管理的团队中的开发人员。

事实证明他的开发者证书已过期,在续订后,我忽略了将他的证书添加到他的应用程序使用的配置文件中。 enter image description here

答案 13 :(得分:0)

很抱歉这已经很晚了,但我只是在看这个问题并发现了一些对我有用的东西。我去了PROJECT-> Build Settings并找到了Code Signing部分。除了调试之外,我选择了Iphone Distribution: MY NAME的分发配置文件。我改为在Iphone Developer: MY NAME下的下拉列表中选择了IpodProfile (for bundle identifiers com.myName.myApp,这是我设备的配置文件。希望这有帮助!

答案 14 :(得分:0)

我也花了几个小时与之斗争。修复非常简单。在项目目录的根目录中编辑Entitlements.plist文件。找到说<key>get-task-allow</key>的行。它下面应该是<false/>。将其更改为<true/>

答案 15 :(得分:0)

我尝试将iCloud支持添加到现有应用中,但发现在添加权利并配置iCloud后,我的应用将不再调试。

我意识到我的通用iOS开发证书与我正在处理的应用程序有不同的APPID。所以要修复它,而不是使用我的通用证书,我为该APPID创建了一个特定的开发证书。

我在XCode中更新了我的配置文件,清理了应用程序,断开了我的设备,重新启动了XCOde并连接了设备并运行了,现在它正在运行!

答案 16 :(得分:0)

刚刚得到相同的错误代码。 似乎有不同的东西导致这种情况,因此有不同的方法来解决它。

就我而言,我有两个不同的同名设备(iPhone 4和iPhone 4S)。更改其中一个的名称完全修复了这个错误...

答案 17 :(得分:0)

pJosh,这可能有助于理解。就我而言,我的Team Provisioning Profile已过期(Provisioning Portal表示它由XCode管理),以及应用程序的设备测试配置文件。 (我仍然不知道为什么,但是门户网站在团队资料旁边有一个“续订”按钮,但是当我点击它时它不会做任何事情。)

所以,我删除了即将过期的配置文件,然后在XCode中转到Organizer(Command-Shift-2),在Library / Provisioning Profiles下,我删除了过期的配置文件。然后点击底部的“刷新”,输入我的Apple ID,并续订过期的。

最后,在我的Target上,我进入了Build Settings,Code Signing,并确保选择配置文件。瞧,现在它建立在我的设备上。

答案 18 :(得分:-1)

检查您的设备是否包含在配置文件中。