前言
在我们的日常开发工作中, 避免不了会出现这样的场景: 需求迭代开发完成之后, 需要提供 ipa 包给 QA 同学进行测试, 一般会执行如下流程: 1. 执行 Git Pull 命令, 拉最新的代码到本地 2.Pod Install 安装最新的依赖库 3. 在 Xcode 点击 Archive 编译并打包 4. 选择输出一个 iOS AdHoc 模式的 ipa 文件 5. 将 ipa 上传到 Fir 平台, 生成二维码供测试同学安装.
即便整个过程很顺利, 也需要消耗开发同学十到二十分钟的时间, 但如果测试过程中发现有问题, 那么需要修复完毕后重复上面的这几个步骤. 对于开发同学来说, 这种重复且没有技术含量的机械工作简直是噩梦啊!
正文
那么什么样的工具可以帮助开发同学解决这个问题呢? 下面就介绍一下, 目前市面上比较流行的自动化流程工具 --Fastlane.Fastlane 是用 Ruby 语言编写的一套自动化工具集和框架, 每一个工具实际都对应一个 Ruby 脚本, 用来执行某一个特定的任务, 而 Fastlane 核心框架则允许使用者通过类似配置文件的形式, 将不同的工具有机而灵活的结合在一起, 从而形成一个个完整的自动化流程. 到目前为止, Fastlane 的工具集基本上涵盖了打包, 签名, 测试, 部署, 发布, 库管理等等移动开发中涉及到的内容. 同时该套件也支持与 Jenkins ,CocoaPods,xctools 等其他第三方工具的集成.
初步了解之后, 让我们来看一下在如何项目里面应用 fastlane.
第一步, 安装及初始化:
1. 安装 Xcode command line tools:
xcode-select -install
2. 安装 fastlane
sudo Gem install fastlane -NV
3. 进入项目路径下, 初始化 fastlane(这部分可根据实际项目需要配置)
fastlane init
3.1. 选择想使用 fastlane 做什么?
3.2. 要求你输入 Apple 开发证书的 App ID
3.3. 是否管理 App 的 metadata
3.4. 一路 enter, 直到初始化成功
3.5. 初始化完成后的文件目录结构
第二步, 知识准备:
1. 文件介绍
Appfile
存储 App 信息, 比如 Apple ID,App Identifier,Team ID 等信息.
Fastfile
自动化脚本配置文件, 所有的任务都是在这个文件来调度的.
.env
全局的环境配置文件, 文件里面我们可以配置一些全局的信息, 其他文件可以通过类似 ENV['Apple_Id']这种方式获取.
Deliverfile
上传 AppStore 包需要的配置文件, 在这个文件里面可以设置 App Store Connect 的所有配置项.
metadata
存放 App 元数据文件, 包括关键词, 版本更新日志, 图标等.
screenshots
存放应用截图
2. 常用的工具集 (action) 介绍
scan(run_tests): 自动运行测试工具.
cert(get_certificates): 自动创建 iOS 代码签名证书(.cert 文件), 如果存在则下载已存在的证书文件.
sigh(get_provisioning_profile): 下载 provisioning profiles.
gym(build_ios_app): 编译, 打包, 生成签名的 ipa 文件 .
deliver(upload_to_app_store): 上传 App 到 App Store Connect.
snapshot(capture_ios_screenshots): 截图.
...
更多的 action 介绍可以参考 fastlane 文档中的介绍: https://docs.fastlane.tools/actions/
3.lane 介绍
当我们对 Fastfile 文件进行编写时, 实际上就上通过在自定义的 lane 中添加合适的工具集 action 让 fastlane 按照我们的意愿去顺序执行任务, 当然 fastlane 默认就有一些系统级 lane.
系统级 lane:
before_all, 就是在执行一次脚本之前首先执行的代码, 我们可以在这里面执行一些公共的东西, 比如 git_pull,CocoaPods.
after_all, 成功结束之后, 处理共有的后置逻辑.
before_each, 每次执行 lane 之前都会执行一次.
after_each, 每次执行 lane 之后都会执行一次.
error, 在执行上述情况任意环境报错都会中止并执行一次.
第三步, 代码示例:
有了上面的知识准备, 我们就以上传 ipa 包到 Fir 为例, 来看看 fastlane 自动化打包具体的代码是怎么实现的.
首先看一下. env 文件:
然后是 Appfile:
最后就是我们的 FastFile:
当我们完成上面的操作以后, 我们就可以在终端工具内通过 fastlane upload_fir build:PublicDebug log:update_info 一行代码来实现打包并上传 ipa 包到 Fir 平台了, 是不是很酷!
当然你也可以在我们的项目目录中找到我们的 ipa 包, dsym 文件, fastlane 的打包日志文件等等.
结语
通过使用 Fastlane 实现自动化打包以后, 开发同学终于可以跟繁琐的机械工作说拜拜了~
除了本文介绍的功能, fastlane 还有更多的妙用等着大家去挖掘, 比如自定义 action,Plugin, 又比如持续集成, 等等. 在此本文也仅是起一个抛砖引玉的作用, 希望大家能共同探讨 fastlane 的更深层的用途.
来源: https://juejin.im/post/5bf2477a51882572ac7f1a26