这几天在做 ios 自动化打包。

现状

现在部署了两个 jenkins,一个在 linux 上,作为 master,另一个在 mac 上,作为 slave。在 master 上创建了 job,分发到 slave 上执行。命令很简单。

xcodebuild clean -workspace './AiCardForStaff.xcworkspace' -scheme 'AiCardForStaff' -configuration TestEv -archivePath build/AiCardForStaff.xcarchive archive

xcodebuild clean -exportArchive -exportFormat IPA -archivePath build/AiCardForStaff.xcarchive -exportPath build/AiCardForStaff.ipa -exportProvisioningProfile "XC: com.icar.staff"

问题:

job 分发到 slave 上执行时,提示签名错误:

The following build commands failed:
    CodeSign /Users/taoy/Library/Developer/Xcode/DerivedData/AiCardForStaff-ahaekiszslilvjcifzgyqjrabwkm/Build/Intermediates/ArchiveIntermediates/AiCardForStaff/InstallationBuildProductsLocation/Applications/AiCardForStaff.app

但是,我在 slave 的 jenkins 上单独配置一个 job,在 mac 本机上执行,就能成功。在 mac 机器上执行该命令也能成功,但是其他电脑 ssh 过去 mac 机器上,在终端下执行该命令也是同样失败了。尝试过把命令放在.sh 文件中,jenkins 去调用,也是同样的理由失败。

推测:

难道有啥机制限制外部电脑来执行 xcodebuild 命令?

后续:
有网友怀疑是 keychain 的证书签名问题。因为正常打包时,第一次也会提示是否允许访问 keychain。
准备尝试一下 jenkins 的 xcodebuild integration 插件。希望能搞定。


↙↙↙阅读原文可查看相关链接,并与作者交流