1. 为什么选择fastlane
在程序的世界里,一切重复性的,流程化的工作都可以交给自动化/工具去完成。
在移动开发中也是如此,编写代码只是软件开发中的一部分,除此之外还需要我们编译、打包、上传、发布、部署、库管理、版本控制等coding 之外的事,而正是这些重复而又繁杂的工作,耗费了我们大量的时间。
所以面对这样的工作,总会有人想要做出改变,于是就会出现许多好用的工具,既方便了自己,又帮助了其他人。
2. 关于fastlane
今天就要给大家介绍一个工具: fastlane, 这个在GitHub上面属于明星项目,目前共有1万多个star,并且有1500多个fork,这个在开源方面算比较厉害的了。
先简单介绍一下,fastlane使用ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个ruby脚本,用来执行某一个特定的任务,而fastlane核心框架则允许使用者通过配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个完整的自动化流程
到目前为止,fastlane 的工具集大约包含了170多个小工具,基本涵盖了打包,签名,测试,部署,发布,库管理等移动开发中所涉及到的内容。关于这些工具详细的介绍和使用,可以在fastlane 文档中去查阅。
如果这些工具仍然没有符合你的要求,没有关系,得益于fastlane,本身强大的action和plug机制,如果你恰好懂一些ruby开发的话,可以轻易的编写出自己想要的工具。
其实fastlane 的安装非常简单,和cocoapod 一样,fastlane 也可以通过rubygems来安装,如果你的电脑上有ruby环境的话,只需要一句话就可以完成,gem install fastlane
3. 移动端持续集成和持续交付的场景和痛点
fastlane 本身能做的事情很多,但是其中一个最为重要的作用就是能够无缝的嵌入在持续测试和交付的体系中。
下面可以为大家例举一个场景
当一个迭代开发测试结束,服务器端上线之后,我们会使用Testflight进行线上跟测,一般会执行以下流程:
1. 执行git pull,拉取最新代码到本地
2. pod install 安装最新的依赖库
3. 在Xcode中将build version增加
4. 在Xcode中点击archive编译并打包
5. 选择输出一个iOS App Store模式的IPA文件
6. 通过application loader将IPA上传至ITC(Itunes connect)
7. 然后等待ITC Process 完成之后,登录ITC选择刚上传的IPA文件进行Testflight测试
8. 由于修改了版本号,所以需要将代码commit和push 一下
如果线上跟测发现有问题,那么需要修复完毕和重复上面8个步骤。
其实做过这件事的同学应该都有体会,顺利的话差不多一次得20到30分钟,如果某一次build version 忘记增加了,那么前面的工作都白做了。
4. fastlane 在项目中的应用
上面介绍了fastlane 在持续集成和交互上的一些优势,那么我们在来看看移动端目前的发展趋势。
最近几年,随着智能手机的普及,移动端不仅要承载更多业务场景的实现,并且还要应对不断变化的也无需求,敏捷开发也是如此,这就要求我们团队能够迅速响应变化,快速迭代,那么随之而来的问题就是,如何保障在不牺牲质量的前提下,尽可能的提升我们的速度,我觉得这一切需要建立在高质量的持续测试和持续交付体系之上,
所以我们团队从前一段时间开始,一直在尝试着寻找这样的一种工具,可以快速的帮助我们持续集成与交互。
刚开始我们在尝试使用Jenkins+pgyer搭建了一套持续测试的环境,大致的流程如下图:
说实话,效果还是可以的,至少在一定时期内满足了我们的要求,但是Jenkins本身只是一个通用的CI流程管理系统,本身并不提供诸如ITC提包和Meta内容管理,签名,证书管理等等和移动端业务紧密结合的场景,而且配置的过程相当繁琐。
前段时间闲暇之余,我们在许多博客上面发现了Fastlane,看了Readme后感觉有戏,于是决定尝试一下。其实刚开始的时候,我们也只是用Fastlane来解决iOS团队内证书同步和上传ITC的问题,但是随着深入的研究,发现其实Fastlane能做的更多,比如:私有Pod的发布,代码的静态检查,UIAutomation测试等等。
另外,Fastlane本身也可以和Jenkins,Circle等主流CI系统做很好的集成,并且由于主要的CI流程都由Fastlane来管理和执行,所以从根本上降低了这些系统配置的复杂度。
随着我们在项目中更深入的运用Fastlane, 持续集成、测试、交付离我们不远了。
参考文档:
http://www.infoq.com/cn/articles/actual-combat-of-fastlane-part01