Xcode 4.6.3中Dropbox API的协同设置失败:“代码对象根本没有签名”

时间:2013-06-23 18:32:05

标签: xcode macos dropbox code-signing mac-app-store

我有一个OS X应用程序,它通过Mac App Store分发,最近更新为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,运行干净的构建,并清理构建文件夹。

6 个答案:

答案 0 :(得分:140)

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

但是,似乎codesign位于/usr/bin。无论是由一个Xcode安装程序放在那里还是附带一个vanilla系统安装,我都不确定。但是,通过man的{​​{1}}页面,我发现了这个漂亮的选项:

codesign

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

  

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

手动重新运行Xcode正常运行的--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. 命令,同时在末尾添加codesign标志,正确签署应用程序。

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

答案 1 :(得分:67)

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

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

Specifying Deep Signing of Embedded Frameworks

答案 2 :(得分:12)

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

答案 3 :(得分:4)

我遇到了同样的问题,但答案很简单:我的应用上的代码签名身份设置为" - ",所以只需将其设置为"不要代码登录"把我搞定了。

" - "当你执行一些操作时似乎是默认设置,虽然我不能告诉你它们是什么。

答案 4 :(得分:2)

这可能有助于somone:

  
    

我终于通过反复试验找出了解决方案。在我的情况下,我有一个文件夹名称与构建设置下的“产品名称”变量匹配。这也与整个项目名称相匹配!所以我只是换了一个字段。我更改了“构建设置” - > “产品名称” 。 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

  

答案 5 :(得分:0)

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

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