76

我有一个通过 Mac App Store 分发的 OS X 应用程序,最近更新到 Xcode 4.6.3。

当我现在运行常规构建时,我收到:

Command /usr/bin/codesign failed with exit code 1:

/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1

我似乎无法辨别我的项目中的任何其他更改,所以我无法判断这是与 4.6.3 更新相关的问题,还是其他问题。

我尝试重新启动 Xcode,运行干净的构建,并清理构建文件夹。

4

6 回答 6

140

我想我可能已经弄清楚了这一点。我一直在 OS X Mavericks 上运行 Xcode 4.6.3,我的印象是任何特定于构建的工具都捆绑在 Xcode 应用程序中。

但是,它似乎codesign/usr/bin. 无论它是由 Xcode 安装程序之一放置,还是附带香草系统安装,我都不确定。但是通过阅读man页面codesign,我发现了这个漂亮的选项:

--deep  When signing a bundle, specifies that nested code content such as helpers, frameworks, and plug-ins, should be recursively signed
             in turn. Beware that all signing options you specify will apply, in turn, to such nested content.
             When verifying a bundle, specifies that any nested code content will be recursively verified as to its full content. By default,
             verification of nested content is limited to a shallow investigation that may not detect changes to the nested code.
             When displaying a signature, specifies that a list of directly nested code should be written to the display output. This lists only
             code directly nested within the subject; anything nested indirectly will require recursive application of the codesign command.

然后我从两周前(~2013 年 6 月)发现了这篇文章( https://alpha.app.net/isaiah/post/6774960 ),其中提到(尽管是二手的):

@isaiah 我问了实验室里的一个人。他说,codesign 现在要求在对整个应用程序包进行代码签名之前单独对嵌入式框架进行签名。

手动重新运行codesignXcode 正常运行的命令,同时将--deep标志添加到末尾,正确签署应用程序。

我还不确定这个手动签名有什么后果,或者我是否可以调整 Xcode 构建以--deep自动添加标志,但这似乎是根本问题。(codesign不再自动对您的应用程序包进行深度签名。)

于 2013-07-01T00:37:33.213 回答
68

正如其他答案中强调的那样,代码签名的工作方式发生了变化。如果您安装了任何 Xcode 5 DP,那么即使您使用的是 Xcode 4.6.X,也会使用新工具。

在这个阶段(在 Xcode 4.6.X 中)您需要做的就是采用上面建议的 --deep 标志并将其添加到您的代码签名标志(目标,构建设置)中,见下图。

指定嵌入式框架的深度签名

于 2013-07-01T10:55:15.263 回答
13

对我来说,这个问题是在我的项目中拖动一个名为“resources”的文件夹后引起的。将其名称更改为其他名称后(例如“resourcessss”),错误消失了。

于 2016-05-18T15:21:43.927 回答
4

我遇到了同样的问题,但答案很简单:我的应用程序上的代码签名身份设置为“-”,因此只需将其设置为“不进行代码签名”即可解决问题。

当您执行某些操作时,“-”似乎是默认设置,尽管我无法告诉您这些是什么。

于 2014-06-25T21:14:12.653 回答
2

这可能会帮助某人:

我终于通过反复试验找到了解决方案。在我的例子中,我有一个与构建设置下的“产品名称”变量匹配的文件夹名称。这也匹配了整个项目名称!所以我只是改变了一个领域。我更改了“构建设置”->“产品名称”。MySpecialApp 的值已更改为 My-SpecialApp。就是这样!然后,我重新登录 Apple 开发者门户并创建了一个新的 App ID 和移动配置文件以用于开发和分发,剩下的就是历史了。通过 Ad Hoc 发行版部署时,我的版本现在可以工作。关于此的最后说明。这绝对是一个错误,Apple 应该提醒用户他们做错了什么并启用某种自动纠正措施。- 更多信息请访问:http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#stash.F0nF3BbC.dpuf

于 2013-06-26T11:00:56.893 回答
0

对我来说,这是一个损坏的框架 PaddleMAs,它:1.我从我的 Cocoapods 文件中删除了 2.Ran pod install 3.重新启动了我的 Xcode

它解决了这个问题。由于某种原因,损坏的框架会阻止它被签名,不幸的是 XCode 并没有真正清楚地显示这个错误并给你一个很好的修复建议。已向 Apple 提出要修复的错误。

于 2017-01-08T19:41:53.617 回答