最近正在基于Jenkins工具,实现IOS项目的CI构建,虽然已经折腾出来,但是记录一下踩过的坑
Jenkins打包IOS两种方案:
方案一:在Mac电脑上安装Jenkins,然后将本地作为一个专门用来打包IOS工程的打包机
方案二:装在Linux端的Jenkins,通过新建一个Mac的Slave,来远程操作Mac电脑实现打包
Jenkins新建Mac节点细节和工程配置、插件等就不细说了,网上都可自行查阅
这里记录一个通过jenkins打包ipa包报错:
Command CodeSign failed with a nonzero exit code(errSecInternalComponent)
描述 :
在打包机通过 xcode打包不报错
在打包机直接运行打包shell不报错
但是通过jenkin打包就会出现下面的错误
KitExtension.appex
/Users/5i5j/Library/Developer/Xcode/DerivedData/cbs_new5iwork-ebjitbdetyopmbadzpizhbztfpyw/Build/Intermediates.noindex/ArchiveIntermediates/cbs_new5iwork/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/CallKitExtension.appex: errSecInternalComponent
Command CodeSign failed with a nonzero exit code
出现这个问题的主要原因是是Jenkins,以ssh方式到slave机上,默认是没有账户的,但是访问钥匙串要求必须有用户身份
通过Xcode打包的过程中,的确是要求输入登录密码,之后才打包成功的。
通过xcode打包成功之后,再使用shell脚本直接打包,也还需要输入登录密码才能打包成功
解决办法
添加一步输入密码解锁钥匙串,可以给Jenkins一个用户身份。 build步骤前添加一步解锁钥匙串。
在Jenkins execute shell中加上下边指令;
security unlock-keychain -p "login pwd" ~/Library/Keychains/login.keychain