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

我在 iPhone 上的即席发布出了问题。我用 SDK 3.0开发了一个应用程序。我有开发商执照。我在项目中添加了证书和供应配置文件。所以,没问题。

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

请帮我解决这个问题。

129907 次浏览

在“门户程序”中有相当好的说明。如果你登录

Http://developer.apple.com/iphone

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

为 Ad Hoc 分发创建和下载分发配置文件

链接在底部。

关键是:

对于临时分发,请完成以下步骤:

  • 在“文件”菜单中,选择“新建文件”-> iPhone OS-> “代码签名”-> “权限”。 将文件命名为“ Entitlements.plist”并单击“ Finish”。
  • 选择新的 Entitlments.plist 文件并取消选中“ get-task-allow”属性。保存 Entitlements.plist 文件。(在 Xcode 4中,get-task-allow 被称为“ Can be debug”)
  • 选择 Target 并打开 Build 设置检查器。在“ Code Signing Entitments”构建设置中,键入包含扩展名的新 Entitlements.plist 文件的文件名。没有必要指定路径,除非您将 Entitlements.plist 文件放在项目顶层以外的某个地方。
  • 点击‘ Build’。(注意: 您的二进制文件必须包含一个57x57像素的扁平正方形图像图标。此图标显示在 iPhone 或 iPod touch 主屏幕上。)

约翰的答案99% 正确。我发现(至少在我的配置中) ,您必须为 项目打开 Build 设置检查器。目标的生成设置不包含“代码签名权限”。如果您的项目中只有一个目标,那么这可能没有什么区别。但是如果有多个目标,则需要转到项目生成设置。无论如何,在执行了 John 所说的操作之后,我的特别发行版构建工作得非常完美。

我发现开发构建需要检查“ get-task-allow”,而分发构建则不需要检查。实现这一点的最简单的方法(AFAIK)是在你的项目中包含 权利文件: Entitlements.plist 和 EntitlementsDebug.plist ——并且在构建项目设置中为你的项目中的各种配置引用合适的权利文件。

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

A)检查生成设置。调试的“代码签名权限”中应该没有条目 B)暂时删除 Entitlements.plist 并构建调试版本。如果它抱怨一个丢失的 Entitlements.plist,那么你可能有同样的情况,我今天不得不战斗。 C)使用 Entitlements.plist 重新编译,并启用“ get-task-allow”。如果现在它可以工作,你可能会遇到同样的问题:

After messing around with new profiles I couldn't deploy my Debug build to the phone. AdHoc was fine. I checked a) - empty.. Hmm. I checked b) - complains. c) - worked...

毕竟,我在一个编辑器中检查了 project.pbjproj,而且——尽管 GUI 确实声称,没有“ Code Signing Entitments”条目,但实际上在 Debug 部分中有一个条目。我喝光了,然后就完事了。

我刚经历了激动人心的三个小时。我刚刚把一个项目升级到了4.2,不知道为什么它就是不能工作。

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

文件 > 新建文件 > 代码签名 > 权限

将文件命名为 Entitlements.plist

确保它在 xCode 中的 Resources 组中。

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

然后,我删除了我创建的 Adhoc 和 Release 配置文件。从供应门户重新下载它们,并将它们放回到 xCode 组织程序中。

然后,我进入构建设置,并确保正确的配置文件被分配给调试和发布配置文件。

然后我改为发布/设备。点击构建按钮,它工作了。

我不知道为什么。

如果您试图分析一个设备不包含在配置文件中的应用程序,也可能发生此错误。

确保您的设备包含在您想要使用的开发配置文件中。不知何故,错误消息具有误导性。我的权利其实没问题。

代码签名权利对于 Xcode 4中的 Ad Hoc 构建不再是必需的-请参阅 苹果技术说明 TN2250中的详细说明

乔什,这可能有助于理解。在我的案例中,我的团队供应配置文件过期了(供应门户指出它是由 XCode 管理的) ,以及应用程序的设备测试配置文件。(我仍然不知道为什么,但是门户在团队配置文件旁边有一个“更新”按钮,但是当我点击它的时候它什么都不会做。)

因此,我删除了即将过期的概要文件,然后在 XCode 中转到 Organizer (Command-Shift-2) ,在 Library/Provisoning Profiles 下,我删除了即将过期的概要文件。然后点击底部的“刷新”,输入我的苹果 ID,它就会更新过期的。

最后,在 Target 上,我转到 Build Settings,Code Signing,并确保选择了供应配置文件。瞧,现在我的设备上有了。

刚收到同样的错误代码。 似乎有不同的事情导致这种情况,因此不同的方式来解决它。

在我的例子中,我有两个不同的同名设备(iPhone4和 iPhone4S)。改变其中一个人的名字,为我完全修复了这个错误..。

我试图给我现有的应用程序添加 iCloud 支持,但是发现在添加应用程序和配置 iCloud 之后,我的应用程序不再进行调试。

我意识到我的普通 iOS 开发证书与我正在开发的应用程序有不同的 APPID。因此,为了解决这个问题,我没有使用通用证书,而是为该 APPID 创建了一个特定的开发证书。

我刷新了 XCode 中的供应配置文件,清理了应用程序,断开了设备连接,重新启动了 XCode 并连接了设备,然后运行,现在它可以工作了!

我也花了几个小时和这个做斗争。解决办法很简单。在项目目录的根目录中编辑 Entitlements.plist 文件。找到写着 <key>get-task-allow</key>的那一行。下面应该是 <false/>。改成 <true/>

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

对不起,这是非常晚,但我只是看着这个问题,并找到了一些工作,为我。我转到 PROJECT-> Build Settings,找到了 Code Signing 部分。除了调试,我的发行版配置文件说,Iphone Distribution: MY NAME被选中。相反,我选择了 IpodProfile (for bundle identifiers com.myName.myApp下拉列表中的 Iphone Developer: MY NAME,这是我的设备的配置文件。希望这个能帮上忙!

这是因为您的设备(在其上运行应用程序)没有被配置配置文件选中。

所以只要通过 证书、标识符和配置文件选择您的 iOS Provisioning Profiles点击编辑,然后选择您的设备

enter image description here

我管理的团队里有个开发人员碰到了这种情况。

原来他的开发者证书已经过期了,续期后,我忽略了把他的证书添加到他的应用程序使用的配置文件中。enter image description here

在 Xcode 5.1中,如果进入 Preferences-> Account-> View Details..。

确保签名身份状态有效。如果显示为“撤销”,请点击 Plus 按钮并添加适当的签名标识: iOS 开发或 iOS 发行版。Xcode 将用一个新的、有效的代码替换它。

我没有同意苹果新的授权协议。

简要地说: 请登录到您的开发者的帐户-> 个人资料的-> 审查-> 阅读协议或让您的律师为您阅读-> 同意(在您自己的意愿)-> 再次点击个人资料的检查您的个人资料的状态。

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

对我来说,这解决了问题: 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. 再次为目标设置供应配置文件和代码签名

如果这个问题发生时,一切似乎是正确的设置,构建设置指向正确的配置文件,代码签名是正确的设置,等等。

发生问题是因为我只有 创造了一个新方案,却没有再生我的可可豆荚来进行新的配置。从图中可以看到,新的 ad-hoc 配置指向 Pods.production配置,而不是 Pods.ad-hoc配置(分别进行测试)

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

修正:

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

就是这样!