TLDR:系统设置->共享->远程登录 把登录用户加到列表里
当一台Ubuntu的Jenkins要在Mac从节点上编译iOS时,有可能会遇到Code sign失败。 报错信息类似于这样
The following build commands failed:
PhaseScriptExecution [CP]\ Embed\ Pods\ Frameworks /Users/XXXXX/Library/Developer/Xcode/DerivedData/XXXXX-adempnbmujttsbbhgpmmmtsvgjlz/Build/Intermediates.noindex/ArchiveIntermediates/XXXXX/IntermediateBuildFilesPath/XXXXX.build/Debug-iphoneos/XXXXX.build/Script-AFA8A4BB8D5635E83E7A238B.sh
这个报错很抽象,往前翻会发现这样的报错。
sent 3911085 bytes received 70 bytes 7822310.00 bytes/sec
total size is 3910365 speedup is 1.00
Code Signing /Users/XXXX/Library/Developer/Xcode/DerivedData/XXXXX-adempnbmujttsbbhgpmmmtsvgjlz/Build/Intermediates.noindex/ArchiveIntermediates/XXXXx/InstallationBuildProductsLocation/Applications//XXXX.app/Frameworks/AFNetworking.framework with Identity Apple Development: yixxx xxx (22XXXXXXX)
/usr/bin/codesign --force --sign 38XXXXXXXXXXXB56895DB1A03 --preserve-metadata=identifier,entitlements '/Users/XXX/Library/Developer/Xcode/DerivedData/XXXXX-adempnbmujttsbbhgpmmmtsvgjlz/Build/Intermediates.noindex/ArchiveIntermediates/XXXXX/InstallationBuildProductsLocation/Applications//XXXXX.app/Frameworks/AFNetworking.framework'
/Users/XXXXX/Library/Developer/Xcode/DerivedData/XXXXXX-adempnbmujttsbbhgpmmmtsvgjlz/Build/Intermediates.noindex/ArchiveIntermediates/Dolphin/InstallationBuildProductsLocation/Applications//XXXXXX.app/Frameworks/AFNetworking.framework: errSecInternalComponent
Command /bin/sh failed with exit code 1
这样都很明确了是code sign的失败。
如果你在mac本机安装jenkins构建,可以成功,但作为从节点构建,遇到这样的code sign问题。
搜索引擎排名靠前的文章里指导了重新上传login.keychain。然而,不知道是不是年份久了,我最新搭建的jenkins,上传功能用不了。
iOS Jenkins自动化远程Mac节点打包遇到的坑
Jenkins一:iOS自动打包完整实践
经过我个人实践,发现了另一种方法可以解决这个问题。
既然本机可以签名,说明签名命令没问题。远程不能签名十有八九是权限的问题。因为设置mac节点的时候用了新建的账户连接ssh,顺着这个思路,我去系统设置->共享->远程登录 查看可能修改的设置。
经实践,在允许访问的用户列表中默认只有一个Administrator。点击列表下面的加号,可以看到新建的用户没有加在列表里。把登录的用户加到列表里之后,再到主节点点击这台mac从节点的编译任务,code sign成功完成。