可执行文件已使用无效权利进行签名
Posted
技术标签:
【中文标题】可执行文件已使用无效权利进行签名【英文标题】:The executable was signed with invalid entitlements 【发布时间】:2009-07-02 14:03:00 【问题描述】:我的 iPhone 上的临时分发存在问题。我用 SDK 3.0 开发了一个应用程序。我有开发者许可证。我在我的项目中添加了证书和配置文件。所以,没问题。
但是,当我尝试在我的 iPhone 上安装应用程序时,它会编译项目,然后在管理器窗口中显示错误:"The executable was signed with invalid entitlements"
。我错过了什么吗?我已经从 2.2.1 升级了我的 iPhone,并从 Apple 下载了最新的 SDK。
请帮我解决这个问题。
【问题讨论】:
【参考方案1】:“门户计划”中有很好的说明。如果您登录
http://developer.apple.com/iphone
然后点击左侧的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 主屏幕上。)【讨论】:
我正打算写同样的东西,很容易忘记除了存储构建之外,您还需要 get-tak-allow 来进行临时性操作! 这对我不起作用——它导致了同样的“无效权利”错误。但是基于下面的一些 cmets,我清除了所有内容,然后检查(不是未选中)“get-task-allow”,然后再次尝试——这次成功了。 我在从 git-hub 更新的旧项目中遇到了同样的问题,并且检查该属性(当我记得它以前未设置时)似乎也解决了我的问题。奇怪。 哇,这让我节省了大约 12 个小时的时间。谢谢。 感谢您,令人惊讶的是,在 Apple 的网站上很难找到这些东西,看来 SO 是一个更好的资源。【参考方案2】:如果您尝试配置设备未包含在配置文件中的应用,也可能会出现此错误。
确保您的设备包含在您要使用的开发配置文件中。不知何故,错误消息具有误导性。我的权利其实还可以。
【讨论】:
【参考方案3】:我发现开发版本需要检查“get-task-allow”,但分发版本不需要检查。完成此任务的最简单方法 (AFAIK) 是在您的项目中拥有 两个 权利文件:Entitlements.plist 和 EntitlementsDebug.plist - 并在构建项目设置中为各种配置引用正确的文件你的项目。
【讨论】:
我从不需要这样做。对于您的开发构建配置,只需确保代码签名权利为空白即可。 get-task-allow unchecked 对我有用……真是个鬼鬼祟祟的小混蛋 我也必须检查 get-task-allow 才能在我的设备上获得开发版本。【参考方案4】:Xcode 4 中的 Ad Hoc 构建不再需要代码签名权利 - 请参阅 Apple Technical Note TN2250 中的详细说明
【讨论】:
【参考方案5】:如果您遇到这种情况,似乎需要检查“get-task-allow”才能将您的调试(!)构建部署到您的手机,请检查:
a) 检查构建设置。 Debug的“代码签名权利”中不应有条目 b) 暂时删除 Entitlements.plist 并构建您的调试版本。如果它抱怨缺少 Entitlements.plist,那么你可能有同样的情况,我今天不得不战斗。 c) 使用 Entitlements.plist 再次构建并启用“get-task-allow”。如果它现在工作,你可能有同样的问题:
在搞砸了新的配置文件后,我无法将我的 Debug 版本部署到手机上。 AdHoc 很好。我检查了 a) - 空的.. 嗯。我检查了 b) - 抱怨。 c) - 工作......
毕竟,我在编辑器中检查了 project.pbjproj 并且 - 尽管 GUI 确实声称没有“代码签名权利”条目,但实际上“调试”部分中有一个条目。我清空了它,完成了。
【讨论】:
这对我有用。在我为 AdHoc 添加了 Entitlements.plist 后,xcode 将该要求复制到了我的 Debug 和 Release 目标中(尽管我没有在 Build 选项卡中输入它)。手动从 pbxproj 文件中删除后,Debug 构建再次工作。【参考方案6】:这是因为您的配置文件未选择您运行应用程序的设备。
所以只需通过Certificates, Identifiers & Profiles 选择您的ios Provisioning Profiles
点击编辑然后选择您的设备
【讨论】:
【参考方案7】:我刚刚度过了激动人心的三个小时与此作斗争。我刚刚将一个项目升级到 4.2,但由于某种原因它无法正常工作。
我最终删除了 Entitlements.plist 文件,然后创建了一个新文件。
文件 > 新文件 > 代码签名 > 权利
将文件命名为 Entitlements.plist
确保它在 xCode 的 Resources 组中。
它没有在 Entitlements.plist 文件中放入 get-task-allow BOOL 类型。我添加它,检查它,保存它,取消选中它,保存它。这让我感觉好多了。
然后我删除了我创建的 Adhoc 和 Release 配置文件。从 Provisioning Portal 重新下载它们并将它们放回 xCode 管理器中。
然后我进入构建设置并确保将正确的配置文件分配给调试和发布配置文件。
然后我将其更改为发布/设备。点击构建按钮,它就可以工作了。
我不知道为什么。
【讨论】:
【参考方案8】:约翰的回答是 99% 正确的。我发现(至少在我的配置中),您必须为 PROJECT 打开构建设置检查器。目标的构建设置不包含“代码签名权利”。如果您的项目中只有一个目标,也许这并没有什么不同。但是如果您有多个目标,则需要转到项目构建设置。无论如何,按照 John 所说的,我的 ad-hoc 分发版本运行良好。
【讨论】:
这很奇怪,因为我在 XCode 3.1 的目标设置下有代码签名权利。 如果您将 Base SDK iPhone 设备设置为目标而不是模拟器,则会出现代码签名权利。【参考方案9】:在 Xcode 5.1 中,如果您进入 Preferences -> Accounts -> View Details...
确保签名身份状态为有效。如果显示已撤销,请点击加号按钮并添加适当的签名身份:iOS 开发或 iOS 分发。 Xcode 将用一个新的、有效的替换它。
【讨论】:
【参考方案10】:对我来说解决了它: https://coderwall.com/p/-ckobg
-
打开 Project.xcodeproj > project.pbxproj
删除所有这些行:
PROVISIONING_PROFILE = ...
"PROVISIONING_PROFILE[sdk=iphoneos*]" = ...
CODE_SIGN_IDENTITY = ...
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ...
【讨论】:
这解决了我的问题。正是CODE_SIGN_IDENTITY = ...
引起了问题。我不知道这是 Xcode 何时添加的,或者我自己是否错误地添加了它,但真是一团糟。与其他 IDE 相比,我在使用 Xcode 时遇到了很多奇怪的问题。我尽量避免它并坚持使用 AppCode。【参考方案11】:
pJosh,这可能有助于理解。就我而言,我的团队供应配置文件即将到期(供应门户表明它由 XCode 管理),以及应用程序的设备测试配置文件。 (我仍然不知道为什么,但是门户网站的团队资料旁边有一个“更新”按钮,但是当我点击它时它不会做任何事情。)
所以,我删除了即将过期的配置文件,然后在 XCode 中转到管理器(Command-Shift-2),在库/配置文件下,我删除了即将过期的配置文件。然后点击底部的“Refresh”,输入我的Apple ID,就可以更新过期的了。
最后,在我的 Target 上,我进入了构建设置、代码签名,并确保选择了配置文件。瞧,现在它可以构建到我的设备上。
【讨论】:
【参考方案12】:刚刚得到同样的错误代码。 似乎有不同的原因导致此问题,因此有不同的解决方法。
在我的例子中,我有两个不同的同名设备(iPhone 4 和 iPhone 4S)。更改其中一个的名称为我完全修复了此错误...
【讨论】:
【参考方案13】:我试图将 iCloud 支持添加到我现有的应用程序,但发现在添加权利和配置 iCloud 后,我的应用程序将不再调试。
我意识到我的通用 iOS 开发证书的 APPID 与我正在开发的应用程序不同。因此,为了修复它,我没有使用我的通用证书,而是为该 APPID 创建了一个特定的开发证书。
我在 XCode 中刷新了我的配置文件,清理了应用程序,断开了我的设备,重新启动了 XCOde 并连接了设备并运行,现在它可以工作了!
【讨论】:
【参考方案14】:我也花了几个小时来解决这个问题。修复非常简单。在项目目录的根目录中编辑 Entitlements.plist 文件。找到显示<key>get-task-allow</key>
的行。下面应该是<false/>
。将其更改为 <true/>
。
【讨论】:
【参考方案15】:抱歉,这很晚了,但我只是在看这个问题,发现一些对我有用的东西。我去了 PROJECT->Build Settings 并找到了 Code Signing 部分。除了调试之外,我选择了Iphone Distribution: MY NAME
的分发配置文件。我在IpodProfile (for bundle identifiers com.myName.myApp
下的下拉列表中选择了Iphone Developer: MY NAME
,这是我设备的配置文件。希望这会有所帮助!
【讨论】:
【参考方案16】:我刚刚在我管理的团队中的一位开发人员身上遇到了这种情况。
原来他的开发者证书过期了,续订后,我忽略了将他的证书添加到他的应用程序使用的配置文件中。
【讨论】:
【参考方案17】:我没有同意 Apple 更新后的新许可协议。
简要说明:请登录您的开发者帐户 -> 个人资料 -> 审核 -> 阅读协议或让您的律师为您阅读 -> 同意(根据您的意愿)-> 再次单击个人资料以检查状态您的个人资料。
在我的场景中,有效的代码签名实体没有出现。当我按照上述程序进行操作时,它是可见的,并且我能够在设备上运行应用程序和/或创建 iPA 文件而没有太大困难。
【讨论】:
【参考方案18】:如果一切似乎都设置正确,构建设置指向正确的配置文件,代码签名设置正确等,是否会出现此问题。
出现问题是因为我刚刚创建了一个新方案并且没有为新配置重新生成我的 CocoaPods。从图中可以看出,新的 ad-hoc 配置指向 Pods.production
配置,而不是 Pods.ad-hoc
配置(和分别测试)
修复:
将有问题的配置设置为None
-- 除非我这样做,否则 cocoapods 不会生成配置
关闭 XCode
运行pod install
重新打开 XCode 并将新方案的配置设置为新生成的配置。
就是这样!
【讨论】:
【参考方案19】:检查您的设备是否包含在配置文件中。
【讨论】:
以上是关于可执行文件已使用无效权利进行签名的主要内容,如果未能解决你的问题,请参考以下文章
无法解决错误:可执行文件在 xcode 4.2 中使用无效的调试权利签名