Fastlane 持续集成小记

fastlane 是一个关于打包编译的小工具合集。它能够很方便的帮助开发者集成自动化编译上传环境,具体小工具的内容可以参考这里

1. 目的

为了实现 持续集成 ,持续集成能带来的好处可以参考这篇文章,同时持续集成还是测试驱动开发(TDD)的前提之一。

2. 概述

2.1 fastlane 安装与基础概述

2.1.1安装

  • xcode-select --install Xcode 命令行工具(依赖项)。
  • sudo gem install fastlane -NV 通过 Gem 安装 fastlane。
  • bundle update fastlane 升级 fastlane,适用于已经安装过的用户。

2.1.2 工具简要概述

deliver 上传屏幕截图,二进制数据和应用程序
snapshot 自动截屏
frameit 为截屏添加设备框架
pem 自动化生成和更新应用推送描述文件
sigh 生成下载应用商店的配置文件
produce 命令行在 iTunes Connect 创建一个新的 app
cert 自动创建 iOS 证书
pilot 在终端管理测试和建立的文件
boarding 邀请 beta 测试
gym 建立的新的发布版本,打包
match 使用 git 同步开发者证书和文件配置
scan iOS 上执行测试用例

2.1.3 文件系统

Fastfile 定义所有的lane任务,自定义的功能也在这里。
Appfile 是用来存储一些App公共信息的,比如app_identifier,apple_id,team_id,itc_team_id(ADC的team_id)
Deliverfile deliver的配置文件
Snapfile 截图配置文件
/metadata 保存各种元信息
/screenshots 截图信息

2.2 fastlane

也就是Fastfile文件里面定义的内容,有点类似宏定义,在这个文件里面你可以自定义某项操作,比如提交到Testflight,或者是执行自动化测试。

2.2.1 脚本执行的生命周期

执行顺序 方法名 说明
1 before_all 在执行 lane 之前只执行一次
2 before_each 每次执行 lane 之前都会执行一次
3 lane 自定义的任务
4 after_each 每次执行 lane 之后都会执行一次
5 after_all 在执行 lane 成功结束之后执行一次
6 error 在执行上述情况任意环境报错都会中止并执行一次

2.2.2 语法定义

desc 描述
lane : lane_name do 定义一个任务,任务名称一旦设定好了,可以任意调用
fastlane : lane_name optional_param
when '' else 类似 if define XX else XXX
import_from_git(url: 'XX') 导入 git 上的文件
fastlane search_plugins 查看可用的 fastlane 插件

2.3 其他基础工具

2.3.1 cert

自动创建管理iOS代码签名证书,基本上会查看 Developer 上的证书,如果不存在的话就会自动创建一个,然后下载到本地,再安装。建议先定义一下DEV_PORTAL_TEAM_ID这个环境变量
结果:

2.3.2 scan

提供测试功能,用法是直接fastlane scan即可,前提是已经在过程里面写好了单元测试用例或者是 UI 测试用例。
同时会自动在/test_output下生成结果描述
结果:

+--------------------+---+
|      Test Results      |
+--------------------+---+
| Number of tests    | 1 |
| Number of failures | 0 |
+--------------------+---+

其他参数:
--workspace "Example.xcworkspace" --scheme "AppName" --device "iPhone 6" --clean 构建测试的一些参数
你也可以建立 Scanfile 来进行配置
Scanfile:

scheme "Example"
devices ["iPhone 6s", "iPad Air"]
clean true
output_types "html"

2.3.3 sigh

自动生成 Provisioning Profile,Sigh会自动根据Appfile里设置的app_identifier从ADC(苹果开发者中心)生成证书,并下载到项目根目录下,建议不要把这个文件夹同步到项目的git中
带的参数有:
-adhoc

-development 开发证书
-o "~/path/" 制定输出路径
download_all 下载所有的 Provisioning Profile
repair 修复过期或者无效的 Provisioning Profile
manage 管理本地所有的 Provisioning Profile
manage -e 管理本地所有的 Provisioning Profile 删除不用的

2.3.4 gym

工程构建和签名,使用fastlane gym init会生成一个Gymfile文件用于设定导出目录、导出 ipa 名称、导出方式(adhoc、app store)。
fastlane gym 即可进行打包操作,生成 ipa 文件和 dSYM 文件。

scheme "Example" #如果不清楚应该选择哪个 scheme 可以使用 xcodebuild -list
clean true
output_directory "./build"
output_name "MyApp"

其他参数:
--export_method ad-hoc 只导出文件而不上传到 App Store 和 ITunes Connect,当然还有其他的导出方式,包括:develop、enterprise、adhoc、app-store、package
--include_bitcode true --include_symbols false 构建时候的一些参数
--workspace "Example.xcworkspace" --scheme "AppName" --clean 设置构建应用的信息

2.3.5 deliver

Deliver可以完全管理与iTC的交互,包括:

  • 上传和下载多语言截图
  • 上传和下载多语言元数据
  • 上传二进制文件

deliver download_screenshots 下载 ITC 上的截图
deliver download_metadata 下载 ITC 上的元信息

一些参数信息可以在这里查看
需要注意的是至少要填写 icon 地址
如果需要填写评级的需要创建一个itunes_rating_config.json文件
结果如下:

fastlane deliver --force
...
[14:13:33]: This might take a few minutes. Please don't interrupt the script.
[14:14:57]: iTunes Transporter successfully finished its job

[14:14:57]: --- Successfully uploaded package to iTunes Connect. It might take a few minutes until it's visible online. ---

[14:14:57]: Finished the upload to iTunes Connect

关于两步验证:

  1. 前往 https://appleid.apple.com/account/manage
  2. 在 Security 中设置APP-SPECIFIC PASSWORDS
  3. 将苹果生成的密码填写在FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD

2.3.6 match

证书管理和配置解决方案,不支持企业账户

  1. 使用fastlane match init来创建Matchfile文件,需要你填入 git 仓库地址(SSH)。
  2. 使用fastlane match development或者是fastlane match appstore来将证书上传到仓库中,需要提供一个passphrase,每一个文件都会使用 openssl 进行加密,请记住你输入的。 passphrase。
  3. match

2.3.7 pem

自动生成和更新你的推送通知证书
fastlane pem --development 生成开发的推送证书
-p "MyPass" 添加文件密码
-o my.pem 给输出的文件制定名字

2.3.8 pilot

构建的 App 上传到 TestFlight
fastlane pilot upload 执行上传
其他参数:
--skip_submission 跳过分发动作
list 列出测试人员
builds 列出所有构建的版本
add email@invite.com 添加新的构建人员
find email@invite.com 查找构建人员
remove email@invite.com 移除指定的构建人员
import -c "csv_file" 导入测试人员列表

2.4 其他 Action

swiftlint swift 代码验证库
oclint
ensure_xcode_version
检测 Xcode 版本,比如ensure_xcode_version(version: "7.2")
xcclean 清除工程缓存
xcarchive 工程打包
cocoapods 执行pod install
clean_cocoapods_cache 清除 Pod 缓存
carthage 运行carthage
xcbuild 构建应用版本
xcode_install 确保特定版本的 Xcode 已经被安装了
increment_version_number 自动给版本数加一,或者指定为特定版本
update_info_plist 更新 plist 文件内容,比如scheme、display_name
increment_build_number 增加 build 数
register_devices 添加一个新的测试设备
set_changelog将更改内容发布到 ITC
reset_git_repo 将 git 里面没有更新的部分丢弃
hg_add_tag 打 tag
last_git_tag 获取最近的 tag
git_pull 执行 git pull 操作
git_add 执行 git add 操作
push_to_git_remote push本地修改到远程仓库
notification 发送 mac 通知
ifttt 使用 IFTTT 服务
download执行下载操作
prompt需要用户确认
backup_xcarchive将打包文件存储到其他位置
zip压缩文件
案例

Comments
Write a Comment