Fastlane是什么
Fastlane官网地址
fastlane类似js的任务流工具gulp的一个用于android/ios的任务流工具,使用ruby实现。
fastlane整合了一系列移动端开发中签名,编译,发布等工具,堪称打包神器。
fastlane不仅可以本地使用,还可以很好地和常用的部署工具集成。
安装
请参照官网
brew cask install fastlane
Fastlane怎么用
以IOS为例
1. 初始化fastlane
一个简单的demo
- 新建一个新的xcode工程
- 在工程目录下,运行
fastlane init
- 选择
4. Manual setup
, 初始化后会在工程目录下生成fastlane
的目录,里面有两个文件Fastfile
和Appfile
,Fastfile是整个任务流的配置文件,Appfile是app信息配置文件。
接下来我们将深入Fastfile,以配置我们的任务流。fastlane的运行机制是插件化,每个任务称为一个lane
,可以理解为一个task,每个lane可以有多个action,action可以理解为插件。
目前官方开发的插件几乎覆盖了整个发布流程。
fastlane actions
当然,我们也可以很方便地定制自己的插件,真的非常简单。插件使用ruby编写,如果不会ruby,你甚至可以在ruby中调用shell(当然,ruby比shell方便多了)
2. 生成app
使用 fastlane produce
在ITunes Connect (简称itc)上生成一个新的APP
详细使用地址见:
https://docs.fastlane.tools/actions/produce/#produce
下面是一个简单的任务。
default_platform(:ios)
platform :ios do
desc "下面就是一个个的任务,这里称之为lane"
# 新创建一个app
lane :new_app do
produce(
username: 'test@qq.com',
app_identifier: 'com.compnay.TestProject',
app_name: '测试工程',
language: 'English',
app_version: '1.0',
sku: '123', # 注意,sdk必须大于2个字符
#team_name: 'SunApps GmbH', # only necessary when in multiple teams
# Optional
# App services can be enabled during app creation
enable_services: {
#apple_pay: "on", # Valid values: "on", "off"
push_notification: "on", # Valid values: "on", "off"
}
)
end
end
运行 fastlane new_app
即可运行该任务。全命令行自动化,这样才能做到自动化打包发布。
3. 证书管理
在itc生成新的app后,就需要申请证书进行开发了。
Fastlane开发了Match工具进行管理。
Match使用git对证书进行管理。
团队成员无需要再相互传递证书文件。在fastlane中可以配置证书,自动进行匹配,下载,安装。让开发人员可以专心于业务开发,而无须关注环境细节。
match的使用方法:
- 新建一个git工程如 certificates,配置好远程仓库,如gitlab,github。
- 在工程目录下运行
fastlane match init
,该命令会在工程目录下生成Matchfile配置文件,进行账号工程等配置。 - 使用
fastlane match appstore
生成证书。appstore是证书类型,可以在matchfile中配置,类型就是apple开发者网站的:development,adhoc,appstore这几种。生成后,证书会自动提交到git仓库进行管理。
一个简单的配置文件如下:
git_url("git@code.company.com:amazing_ios/certificates.git")
# The default type, can be: appstore, adhoc, enterprise or development
type("development")
username("test@qq.com")
app_identifier(["com.compnay.TestProject"])
有了配置文件,可以直接运行fastlane match
即可。
Fastlane也可以管理多团队账号的证书,在certificates工程checkout一个新分支,再运行match命令即可。
其他成员机器上运行match时使用git_branch参数指定分支即可。
有个证书,接下来可以进行开发了。
papapa...享受了一阵美好时光,代码写好了。
编译
编译用的gym
xcode自带的xcodebuild的编译命令如下:
xcodebuild clean archive -archivePath build/MyApp \
-scheme MyApp
xcodebuild -exportArchive \
-exportFormat ipa \
-archivePath "build/MyApp.xcarchive" \
-exportPath "build/MyApp.ipa" \
-exportProvisioningProfile "ProvisioningProfileName"
稍显复杂。使用fastlane命令如下(官网上有很多别名,build_app/build_ios_app都是这个):
fastlane gym
gym可以很方便地配置参数,而且编译速度更快,再加上对错误有更友好的提示。
gym的参数也可以放到Gymfile文件中单独保存。
编译过程中非常容易遇到证书问题,确保bundle名字一致
编译完成后会生成ipa文件和dSYM文件。
Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 文件是保存 16 进制函数地址映射信息的中转文件。如果Debug调试模式的话,我们可以根据log的输出轻松定位到导致crash的原因,但当应用 release 模式打包或上线后出现Crash,这个时候就需要通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。
上传审核
最开始我们生成了一个APP,所以现在我们只需要上传APP的信息即可。
fastlane使用deliver
工具进行上传。
deliver的详细介绍见:https://docs.fastlane.tools/actions/deliver/
可以理解为就是把itc后台的表单挪到的命令行,如app关键字,标题,权限,审核信息等,这样整个流程可以自动化完成。
信息可以单独写在文件,或者直接在命令行参数里面指定。
先执行fastlane deliver init
初始化上传信息。
接下来,完善信息,执行fastlane deliver
上传。
简单的demo如下:
更多的demo可以参见:
https://github.com/fastlane/examples
自动化流程
fastlane是把这些命令串起来,接下来,我们需要把整个开发流程串起来。简单的分工如下:
CI集成
todo
其他
设备管理
lane :register_devices do
register_devices(
username: "xxx@qq.com",
devices: {
"Luka iPhone 6" => "1234567890123456789012345678901234567890"
}
)
end
# 加新设备后,同步证书
lane :sync_cert do
match(
type:"development",
# 证书仓库地址
git_url:"git@code.37ops.com:amazing_ios/certificates.git",
# 分支以区别不同账号
#git_branch: "fengzgu@sohu.com",
# appid
username: "fengzgu@sohu.com",
#
app_identifier:"com.2345.TestProject",
# 设置只读权限,防止证书被修改
readonly:true,
# 如果有新设备,加上这个字段可以生成新的provisioning file
force_for_new_devices: true,
)
end
Fastlane原理介绍
fastlane使用spaceship 与苹果进行交互,具体细节请看:
https://github.com/fastlane/fastlane/tree/master/spaceship#technical-details