持续集成实施(十七)——Fastlane总结
一、目标
持续集成是一个不断迭代优化演进的过程,持续集成iOS打包,当前任务需要完成:
- 内部测试版本:使用标准开发者的Developer证书签名的ipa文件。
- 公开测试版本:使用企业账户的Distribute InHouse证书签名的ipa文件。
- AppStore版本:使用标准开发者的AppStore证书签名的ipa文件。
- 将打包结果推送公司Slack群
- 让测试和开发解耦开,测试随时自由打包
二、初识
一开始使用的是xcodebuild
写的shell
打包脚本,初次认识fastlane 的时候是去年的 10 月份,是老大开会提到了这样的以打包工具。仔细调研了一下,非常精细。它一个针对于 iOS 和 Android(后来才支持的)全方位自动化流程的工具套件。 - deliver: Upload screenshots, metadata, and your app to the App Store
- supply: Upload your Android app and its metadata to Google Play
- snapshot: Automate taking localized screenshots of your iOS and tvOS apps on every device
- screengrab: Automate taking localized screenshots of your Android app on every device
- frameit: Quickly put your screenshots into the right device frames
- pem: Automatically generate and renew your push notification profiles
- sigh: Because you would rather spend your time building stuff than fighting provisioning
- produce: Create new iOS apps on iTunes Connect and Dev Portal using the command line
- cert: Automatically create and maintain iOS code signing certificates
- spaceship: Ruby library to access the Apple Dev Center and iTunes Connect
- pilot: The best way to manage your TestFlight testers and builds from your terminal
- boarding: The easiest way to invite your TestFlight beta testers
- gym: Building your iOS apps has never been easier
- match: Easily sync your certificates and profiles across your team using Git
- scan: The easiest way to run tests for your iOS and Mac apps
它可以集成打包,甚至上传AppStore和TestFlight,简直神器。三、使用Fastlane打包
下载fastlane,就三个命令:
|
|
可以查看一下 fastlane -v
的版本,我们打包主要用到gym
和上传命令pilot
,其他工具略有研究,但是未深入,还要提醒,我都是用的命令行格式,未使用官方推荐的Fastfile的方式,主要是我对ruby不够了解,因为我也是个大菜鸟。附上打包命令。
gym打包,需要讲解的不多,DEVELOPMENT_TEAM等等解释,可以详细看这里https://dpogue.ca/articles/cordova-xcode8.html
需要提醒的是 xcpretty_report_josn可以输出oclint需要的xcpretty执行之后的内容,这里可以oclint集成到一起。
|
|
四、集成推送Slack
讲讲其他遇到的坑和解决方案。
由于主要使用fastlane中gym打包,但是这次需要注意的我们的需求是:
- 需要分别打inhouse,adhoc,appstore的包
- inhouse和adhoc作为内测,需要更换显示图标,加上内测字样。
- inhouse包需要上传蒲公英(之前选择的Fir因为部分收费要求放弃了),需要跟slack对接,并且自动推送。
1、分别打三种包,对证书和rightProvision
了解的不够透彻?
解决:把三种证书都从开发那里要过来,然后将自己的APPLE ID升级到开发者Admin
状态,就具有了三种证书的使用权限,然后跟开发一一对接,对每个包分别对应的证书了解并整理,打包的时候一一对应上就好。这个过程中,收获的是对xcodebuild的method参数有更深的了解,其实inhouse,adhoce,appstore分别对应的打包方式是enterprise
,ad-hoc
,app-store
。
2、需要更换inhouse的图标?
解决:之前想通过是打包的时候指向不同的target
,后来的解决方案是直接替换。
|
|
但是需要注意的是像素和尺寸需要保持一致,设计同学的帮忙很必要。
3、和slack对接
解决:其实我觉得slack真的非常好用,因为它提供了各种整合持续集成的api,这里特别佩服我们老大对这块内容的重视,slack和jenkins集成非常方便。
只是网速有点不靠谱。slack api地址:https://api.slack.com/docs/message-guidelines
附上我写的脚本,借助slack web api推送信息到slack,并且可以取出jenkins中执行者的信息:
|
|
然后构造请求,发送即可,详细不表。
4、因为我们app两个平台用的xcode版本不一致,需要升级到xcode8,需要将自动管理改为手动管理证书。
|
|
5、pod install总是出现问题,分析可能是因为网络或者本机pod安装有问题。
若是pod问题,可以通过升级gem解决。
|
|
小贴士:谨慎使用sudo gem update
6、结果展示
这是我们已经落地的工程,送上Slack推送截图。
五、集成推送TestFlight
Testflight当前已经被苹果公司收购并完善了功能,可以分发内测,作为提升app质量有很好的推动作用。推送TestFlight主要借助fastlane pilot
看到pilot是最好的方式管理你的TestFlight 测试人员和从终端构建的工具。
小贴士:上传TestFlight的ipa必须打包方式是appstore,且版本号应该为3位并高于已经在线上Appstore可以下载的版本。
1、上传脚本
|
|
脚本中的例如team_id等这些值,对于开发或者测试来说应该都不陌生,虽然脚本简单,但是能方便的上传TestFlight,并且分发外部测试,真的非常方便。
2、结果展示
最后集成到jenkins,可以看到结果:
看到箭头指示的出现,代表已经成功的分发测试,可以去Testflight app下载安装新版本了。
六、总结
持续集成工作的开展不是一蹴而就的,iOS打包集成涉及到各种证书环节,需要仔细理清。