更新后的XCode 6.3代码签名问题

时间:2015-04-10 11:50:30

标签: objective-c xcode code-signing code-signing-entitlements

我最近更新到XCode 6.3并开始遇到一些奇怪的代码签名问题。有时,XCode会开始抱怨代码签名问题。并且要么会出现类似问题:

invalid or unsupported format for signature ... Command /usr/bin/codesign failed with exit code 1

... Command /usr/bin/codesign failed with exit code 11

找不到模式,但看起来像是XCode代码符号的问题,因为有时在清理和重启XCode后它会起作用。

我没有更改有关代码签名的任何设置。项目结构非常复杂,它引用了项目和pod。

任何帮助表示感谢。

**更新**

删除派生数据或重新启动XCode对我没有帮助。 但是如果我删除了项目并从git下载了新内容,它确实有效。这删除了未提交给git的XCode文件。

再次清洁后它已停止工作。在控制台日志中我有这样的东西:

codesign[4111]: Internal error unloading bundle CFBundle 0x7fb44a40adc0 <(null)> (framework, not loaded)

**另一次更新**

在Twitter上找到有同样问题的人。 看起来问题是由代码签名中的--deep选项引起的。

https://github.com/atom/atom-shell/issues/1396

解决方案是不使用--deep对内部的签名应用和框架进行编码。而是代码分别签署每个框架。

http://furbo.org/2013/10/17/code-signing-and-mavericks/

2 个答案:

答案 0 :(得分:4)

在最新的X-Code更新之后,我也遇到过这种情况。但X-Code一直建议我暂时更新我的​​项目设置,我只是没有完成它。您提供的链接可以很好地解释它。

它实际上在导航器中显示为一个问题,当您选择问题时,X-Code会自动为您修复它。您只需要自己从构建设置中删除--deep选项。

这适用于我的2个第三方框架,Sparkle和Siphon。

答案 1 :(得分:2)

问题是由 - 深度代码签名选项和权利引起的。

要解决这个问题,我必须手动编码签名框架。 这需要添加新的运行脚本构建阶段,并运行与此类似的脚本:

IDENTITY="HEX_IDENTITY"

export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate"

FRAMEWORKS_LOCATION="${BUILT_PRODUCTS_DIR}"/"${FRAMEWORKS_FOLDER_PATH}"
EXECUTABLES_LOCATION="${BUILT_PRODUCTS_DIR}"/"${EXECUTABLE_FOLDER_PATH}"

codesign --verbose --force --deep --verify --sign "$IDENTITY" "$EXECUTABLES_LOCATION/MY_HELPER_APP.app"
codesign --verbose --force --deep --verify --sign "$IDENTITY" "$FRAMEWORKS_LOCATION/MY_FRAMEWORK/Versions/A"

可以使用shell命令获取HEX_IDENTITY:

security find-identity 

这将显示签名身份列表及其十六进制数字。

将应用程序导出为应用程序后,我使用命令验证了代码签名:

codesign --verify --verbose --deep MyApp.app
spctl --verbose --assess --type execute MyApp.app

参考文献: