遇到的问题是这样:有一台通用的构建服务器,自动打包脚本已经写好,本地测试通过,需要在这台构建服务器上通过Jenkins调用这个自动打包脚本,完成持续化集成的工作。但是在构建过程中报了如下错误:
/usr/bin/codesign --force --sign 5F99020C8E18342FDC41502FACD430C23B975430 --entitlements /Users/wsbg/Library/Developer/Xcode/DerivedData/WesaiPoker-doyqrrerzicjnzekyyrdbzcmjhju/Build/Intermediates/ArchiveIntermediates/WesaiPoker/IntermediateBuildFilesPath/WesaiPoker.build/Release-iphoneos/WesaiPoker.build/WesaiPoker.app.xcent --timestamp=none /Users/wsbg/Library/Developer/Xcode/DerivedData/WesaiPoker-doyqrrerzicjnzekyyrdbzcmjhju/Build/Intermediates/ArchiveIntermediates/WesaiPoker/InstallationBuildProductsLocation/Applications/WesaiPoker.app/Users/wsbg/Library/Developer/Xcode/DerivedData/WesaiPoker-doyqrrerzicjnzekyyrdbzcmjhju/Build/Intermediates/ArchiveIntermediates/WesaiPoker/InstallationBuildProductsLocation/Applications/WesaiPoker.app: unknown error -1=ffffffffffffffffCommand /usr/bin/codesign failed with exit code 1 ** ARCHIVE FAILED **
问题排查
排查1:直接登录进入远程的构建机,手动运行打包脚本是没有问题的,这说明脚本本身是没有问题的。看了上面的输出错误日志,应该是签名问题
排查2:通过ssh的方式登录远程的构建机,运行打包脚本报同样的错误,说明如果通过ssh方式解决了,那Jenkins应该也可以
排查3:在Google上搜索了Command /usr/bin/codesign failed with exit code 1 附带ssh 关键词,发现很多人也遇到了这个问题。同样的持续集成工具fastlane有很多相似的[Issue]。大致的原理是因为codesign命令需要进行签名的时候,会访问keychain来获取打包脚本中对应的证书。通过ssh这种方式访问的时候,是没有访问权限的。
排查4:按照网友们的做法,添加命令 security unlock-keychain -p password /Users/username/Library/Keychains/Login.keychain
. 其中password是你登录当前机器账户的密码,username是当前账户的名称。在最新的Mac Sierra中在Keychains下面是没有Login.keychain的,新的名字被改成了Login.keychain-db.所以需要做一个软连接ln -s ~/Library/Keychains/login.keychain-db ~/Library/Keychains/login.keychain
然后先执行上面的命令,然后执行打包脚本,就可以远程打包了
补充:由于这个解锁并不是永久的,所以每次在执行打包脚本时,必须先执行解锁命令后执行打包脚本。