flutter项目在Mac上打包iOS项目,在有UI界面的情况一点问题都没有,但是如果是通过ssh登录,远程进行打包,就会出现如下错误:
Error (Xcode): Target release_unpack_ios failed: Exception: Failed to codesign
...
说明是codesign失败,也就是证书签名之类。其实正常在有UI的界面上,会弹框让输入密码确认,但是ssh登录状态下,是无法弹框的,所以就出现此错误。
进一步验证,查询在keychain中的签名证书:
security find-identity -p codesigning login.keychain
然后随便找一个证书对某个文件进行签名:
codesign --force --sign BBD7BF414D06C83D...CA21A1537409 abc.txt
有UI界面的terminal上会返回:
abc.txt: replacing existing signature
没有UI界面的terminal上会返回:
abc.txt: errSecInternalComponent
解决办法就是通过密码解锁keychain:
security unlock-keychain -p xxxx login.keychain
这样就会暴露密码在脚本里,不过公共打包机密码好像大家也都知道,但为了保险起见,还是base64编码一下,所以就变成:
security unlock-keychain -p`echo XXXX | base64 --decode`
于是又可以愉快的自动化打包了。