Dropbox API的协同设计在Xcode 4.6.3中失败:“代码对象根本未签名”


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,运行干净的构建以及清理构建文件夹。


XCode 8.2中仍然存在此问题,当我删除测试时,我得到此错误:由于无法找到其可执行文件,因此无法加载捆绑包“ XXXX”。
UKDataGeek

Answers:


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不再自动对您的应用捆绑包进行深度签名。)


39
是的-我能够在我的Xcode项目的“构建设置”中找到“其他代码签名标志”选项,并将--deep其添加到其中,该构建现在可以成功执行。我们将看看这是否通过Mac App Store进行。
Craig Otis

我认为codesign之前从未进行过“深层”签名。我一直在包含第三方库的应用程序中始终使用codesign,并且codesign仅对主要可执行文件(在Context / MacOS /中)进行签名,而其他lib文件则需要单独的codesign调用。
Thomas Tempelmann

1
@ThomasTempelmann我几乎codesign不了解确切的变化。我所知道的是,在10.8和10.9之间(或者可能是Xcode 4到Xcode 5,我同时升级了两者),行为确实发生了变化,这就是使我成功提交应用程序的原因。
Craig Otis 2013年

3
出于好奇,我在10.8上使用Xcode 5已经有一段时间了,但是直到今天我尝试在10.9下签名时才遇到这个问题。
罗伯·麦克布鲁姆

2
克雷格·霍肯伯里(Craig Hockenberry)(使用下面的答案链接)解释了为什么使用deep是错误的
Paul Bruneau

68

正如其他答案中突出显示的那样,代码签名的工作方式有所变化。如果您安装了任何Xcode 5 DP,那么即使您使用的是Xcode 4.6.X,也将使用新工具。

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

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


3
帮助过我。我想这意味着您正在以某种方式担保您使用的所有导入的库。
汤姆·安德森

根据我上面的答案评论,好像这实际上可能是一个问题,具体到OS 10.9,而不是Xcode的5
克雷格·奥的斯

3
Apple TechNote 2206声明“虽然--deep选项可以应用于签名操作,但不建议这样做。我们建议您在各个阶段对代码进行内外签名(因为Xcode会自动执行)。--deep签名用于紧急情况仅限维修和临时调整。”
Elise van Looij'3

12

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


这是我的问题。另请注意,通常的mac文件系统不区分大小写,因此,如果您有一个名为“ Resources”或“ RESOURCES”的文件夹或文件,也会导致此问题。
凯文(Kevin)

这也解决了我的问题。剩下要做的就是Resource从应用程序捆绑中删除文件夹,然后重新启动Xcode.app。
轰动

我遇到了一些问题,但是这个答案帮助了我。我看到我既有一个名为Resources的蓝色文件夹,又有一个名为Resources的黄色文件夹。我还看到它抱怨的文件仅在这些文件夹之一中。我最终完全删除了蓝色的文件(参考文件,而不是文件,它们是相同的)。我也将其重命名为Res。并非完全确定这是必要的(我在删除蓝色文件夹之前就做了),因为我有另一个项目,该项目的黄色文件夹名为Resources,并且在那里没有问题。
安迪·温斯坦

这也为我工作。我想在此页面添加关键字。我的问题是与nativescript。所以不是真正的x代码/纯ios开发。希望这也会对其他人有所帮助。
David Brown

对于以后的读者来说,如果您需要包括一个名为的文件夹Resources(就像我一样),那么您要做的就是,在添加到项目中时,选择Create Groups而不是,Create Folder References这样就不会发生此错误。(之后,请确保仍然为所述文件设置目标会员资格)
Albert Renshaw

4

我遇到了同样的问题,但是答案很简单:我的应用程序上的代码签名身份设置为“-”,因此只需将其设置为“ Do n't Code Sign”就可以解决问题。

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


1
该解决方案非常适合在模拟器上运行应用,但是当我们当时要制作ipa或存档时,该解决方案将无法在我这边工作。
Bhavsang果酱

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/#sthash.F0nF3BbC.dpuf


1
感谢@VBB的回复,但不幸的是,产品名称在过去几年中没有变化。(而且我现在不能更改它。)
Craig Otis

0

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

它解决了问题。出于某种原因,损坏的框架将阻止对其进行签名,不幸的是XCode并未真正清楚地显示此错误,并为您提供了很好的修复建议。提出了与Apple一起修复的错误。

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.