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

12
我最近升级到Xcode 6.3,开始遇到一些奇怪的代码签名问题。偶尔Xcode会开始抱怨代码签名问题。有时会出现以下问题:
无效或不支持的签名格式... 命令/usr/bin/codesign执行失败,退出码为1
或者
... 命令/usr/bin/codesign执行失败,退出码为11
目前还没有找到规律,但看起来是与Xcode的代码签名有关,因为有时在清理和重启Xcode之后,它会正常工作。
我没有更改任何与代码签名相关的设置。项目结构相当复杂,它包含了引用的项目和pods。
非常感谢任何帮助。
** 更新 **
对我来说,删除派生数据或重新启动Xcode没有帮助。 但是,如果我删除项目并从git重新下载,它就可以工作。这将删除未提交到git的Xcode文件。
再次进行清理后,它停止工作了。在控制台日志中,我得到了类似以下内容的信息:
codesign[4111]: 内部错误,无法卸载捆绑包CFBundle 0x7fb44a40adc0 <(null)>(框架未加载)
**另一个更新**
在Twitter上发现有人遇到了同样的问题。 看起来问题是由于代码签名中的--deep选项引起的。

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

解决方案是不使用--deep对应用程序和框架进行代码签名,而是分别对每个框架进行代码签名。

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


可能是重复问题:https://dev59.com/vHNA5IYBdhLWcg3wGJ0V - gbuzogany
我曾经遇到过同样的问题,通过进入“首选项”->“帐户”->“查看详细信息”,然后点击左下角的刷新按钮,问题得以解决。 - doctorBroctor
2个回答

4
最近X-Code更新后,我也遇到了这个问题。不过,X-Code一直建议我更新项目设置,只是我一直没有去做。你提供的链接解释得很好。
实际上,它会在导航器中显示为一个问题,当您选择该问题时,X-Code将自动为您提供修复方案。您只需自己从Build Settings中删除--deep选项即可。
这对我的两个第三方框架Sparkle和Syphon都有效。

我不能轻易地删除--deep。因为我正在使用辅助应用程序,其他项目包含在框架和小部件中。我必须单独对它们进行签名。但是很好知道--deep是原因,并且需要被删除。 - Krzysztof

2
问题是由于--deep代码签名选项和授权引起的。
为了解决这个问题,我不得不手动对框架进行代码签名。 这需要添加新的运行脚本构建阶段,并运行类似于以下脚本的脚本:
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 

这将显示带有十六进制数字的签名标识列表。

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

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

References:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接