2013-06-23 66 views
75

我有一个OS X应用程序,通过Mac App Store分发,最近更新到Xcode 4.6.3。Xcode 4.6.3 Dropbox API代码签名失败:“代码对象根本没有签名”

当我现在运行我的正常的身材,我得到:

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,运行一个干净的生成,并清理生成文件夹。

+0

XCode 8.2中仍然存在这个问题当我删除了我的测试时,我现在得到这个错误:无法加载包“XXXX”,因为它的可执行文件找不到。 –

回答

138

我想我可能已经想通了这一个了。我一直在OS X Mavericks上运行Xcode 4.6.3,因为任何特定于构建的工具都捆绑在Xcode应用程序中。

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

--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. 

然后我发现这个职位(https://alpha.app.net/isaiah/post/6774960)两周前(〜2013年6月),其中提到的(虽然第二人之力):

@isaiah我问了一个在实验室里的人。他说Codeign 需要在代码 作为一个整体签署应用程序包之前分开签署嵌入式框架。

手动重新运行Xcode的正常运行codesign命令,同时加入了--deep标志结束,妥善签署应用程序。

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

+38

是的 - 我能够在我的Xcode项目的Build Settings中找到“其他代码签名标志”选项,为它添加'--deep',并且构建现在执行成功。我们将看看这是否通过Mac App Store。 –

+0

我不认为协调委员会曾经做过“深刻的”签名。我始终在包含第三方库的应用程序中使用密码,并且密码签名仅标记主要可执行文件(在Context/MacOS /中),而其他lib文件需要单独的编码调用。 –

+1

@ThomasTempelmann我对“codesign”知之甚少,无法确切了解发生了什么变化。我所知道的是,在10.8和10.9之间(或者Xcode 4到Xcode 5,我同时升级了两个)行为*确实改变了*,这是我成功提交应用程序的工作。 –

2

这可能有助于有人为:

我终于想通了,通过试验和错误的解决方案。在我的情况下,我有一个文件夹名称与构建设置下的“产品名称”变量相匹配。这也匹配了整个项目名称!所以我只是改变了一个领域。我更改了“Build Settings” - >“Product Name”。 MySpecialApp的值已更改为My-SpecialApp。那只是它!然后,我重新登录到Apple开发人员门户网站,并为开发和分发创建了一个新的App ID和移动设置配置文件,其余内容均为历史记录。我的发布版现在可以通过Ad Hoc发行版进行部署。 关于此的最后说明。这绝对是一个漏洞,苹果应该提醒用户他们做错了什么,并且启用某种自动纠正措施。 - 多见于:http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf

+1

感谢@VBB的回复,但不幸的是,产品名称在过去几年并没有改变。 (现在我不能改变它。) –

66

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

在这个阶段(在Xcode 4.6.X中),你需要做的就是将上面提到的--deep标志添加到你的代码签名标志(Target,Build Settings)中,如下图所示。

Specifying Deep Signing of Embedded Frameworks

+3

帮助了我。我想这意味着你对某些使用的导入库感到满意。 –

+0

根据上面对我的回答的评论,看起来这可能实际上是OS 10.9的特定问题,而不是Xcode 5的问题。 –

+2

完全是这样做的。保存我的一天,谢谢! –

3

我有同样的问题,但答案很简单:我的应用程序的代码签名身份被设定为“ - ”,这样简单的设置是“不要代码签名”定了我。

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

+1

此解决方案适用于模拟器上的运行应用程序,但当我们想在此时生成ipa或存档时,此解决方案无法从我身边运行。 –

11

对我来说,这个问题是由于在我的项目中拖拽一个名为“resources”的文件夹造成的。在将其名称更改为其他任何名称(例如“resourcessss”)后,错误消失。

+0

这是我的问题。还要注意,通常的mac文件系统是不区分大小写的,所以如果你有一个名为的文件夹或文件,例如“资源”或“资源”它也会导致此问题。 – Kevin

+0

这也解决了我的问题。剩下要做的唯一事情就是从应用程序包中删除'Resource'文件夹并重新启动Xcode.app。 – sensation

+0

我有一些问题,但这个答案帮助我。我看到我有一个名为Resources的蓝色文件夹和一个名为Resources的黄色文件夹。我也看到它抱怨的文件只在其中一个文件夹中。我最终完全删除了蓝色(参考,而不是文件,它们是相同的)。我也将它重命名为Res。不完全确定这是必要的(我在删除蓝色文件夹之前做过),因为我有另一个名为Resources的黄色文件夹,并且在那里没有问题。 –

0

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

,它解决了这个问题。出于某种原因,一个损坏的框架会阻止它被不幸签名XCode不会很清楚地显示这个错误,并给你一个很好的修复建议。已经提出了一个与苹果纠正错误。

相关问题