前言:这篇文章写给iOS开发以及运维同学,以及自我总结。
自动化可以提高生产效率,在软件开发的过程中我们总是希望能让机器尽量替我们把需要重复的以固定模式的工作都做了,waykichain(前公司)也一样,作为一名软件工程师,我比较喜欢这种有意义的懒惰,由于是第一次做这样的工作,事情进行的不是很顺利,但是经过一段时间的研究终于在今天完成了,接下来我说一下我遇到坑希望可以帮到有需要的人。
目标以及工作原理:
我们希望在开发完毕使用 git push (或者其他命令)来触发iOS包的自动打包并内部发布的功能,显然这需要一台装有macOS系统的机器作为发版工具,我们公司提供了一台 MacMini,自动发板的软件我们使用了 jenkins 提供的 pipline 和 ci/cd , 如果是 github 项目推荐大家使用 github action 。
所以原理很简单
使用 jenkins 监听 git push 命令触发自动打包命令行(xcodebuild)等待ipa生成然后将生成的 ipa 包拷贝到目标服务器即可。
打包命令很简单
# 1 进入项目目录
cd /your/project/path
# 2 安装依赖
pod install
# 3 清除xcode编译缓存
xcodebuild clean -project yourProject.xcodeproj -scheme projectName -configuration Debug
# 4 编译打包
xcodebuild archive -project yourProject.xcodeproj -scheme projectName -archivePath ./projectName.xcarchive
# 5 导出ipa
xcodebuild -exportArchive -exportOptionsPlist ExportOptions.plist -archivePath ./projectName.xcarchive -exportPath ./output/path -allowProvisioningUpdates
一开始我很快找到了这几个命令但是很快就遇到麻烦了
坑1:
ExportOptions.plist 文件书写错误
解决办法:
起先我是自己手写的 ExportOptions.plist 文件所以各种找不到证书名组织名,很麻烦,其实可以通过 xcode 打一次包就能自动生成一个 plist 文件里面的证书名等各种配置都是正确的直接用就好了。
坑2:
找不到开发证书或者发布证书
这个是最坑的因为证书明明是存在的,本地打包,无论是通过命令行打包,还是xcode 打包都是完美运行,但是就是没办法通过远程连接调用命令行打包,一操作就找不到证书。诡异的很,后来捣鼓了好久才发现远程连接调用的命令行在macOS上的权限和本机的权限不完全一样。远程调用的命令行没办法访问钥匙串login目录下边的证书,但是能访问system目录下边的证书,知道原因后事情就好办了。
解决办法:
将钥匙串 login 目录下的发布证书或者是开发证书移动到 system 目录下就能完美解决。
总结: 遇到问题积极的去思考为什么就能找到解决的办法,就算一时没有解决也不要放弃,下次重新思考,总有找到办法的一天。
感谢阅读
(完)