自动化打包工具集Fastlnae

什么是Fastlane

Fastlane是一套使用Ruby写的自动化工具集,旨在简化Android和iOS的部署过程,自动化你的工作流。它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App.

如何安装Fastlane

  1. 安装xcode命令行工具
    1
    xcode-select --install

如果没有安装,会弹出对话框,点击安装;

如果已经安装,就会提示

xcode-select: error: command line tools are already installed, use “Software Update” to install updates。

  1. 安装Fastlane

使用下面的命令

1
sudo gem install fastlane -NV

或是

1
brew cask install fastlane

来安装Fastlane。

安装完成后,可以执行下面命令,检查是否安装好。

1
fastlane --version

  1. 初始化Fastlane

cd到你的项目目录执行

1
fastlane init

过一会会出现如下提示,让你选择一个选项:

我这里希望打包上传到app store,所以选择了3.

如果你的工程是用cocoapods的那么可能会提示让你勾选工程的Scheme,步骤就是打开你的xcode,点击Manage Schemes,在一堆三方库中找到你的项目Scheme,在后面的多选框中进行勾选,然后rm -rf fastlane文件夹,重新fastlane init一下就不会报错了。

接着会提示你输入开发者账号和密码。

[20:48:55]: Please enter your Apple ID developer credentials
[20:48:55]: Apple ID Username:

登录成功后会提示你是否需要下载你的App的metadata。点y等待就可以。

初始化成功以后,就会生成一个如下图所示的fastlane文件夹:
fastlane

其中metadatascreenshots分别对应App元数据和商店应用截图。

Appfile

Appfile用来存放app_identifier,apple_id和team_id。 它的格式是这样的:

1
2
3
4
5
app_identifier "com.xxx.xxx" # app的bundle identifier
apple_id "xxx@xxx.com" # 你的Apple ID

team_id "XXXXXXXXXX" # Team ID
···

你也可以为每个lane(后面会讲到)提供不同的 app_identifier, apple_id 和 team_id,例如:

1
2
3
4
5
6
7
8
9
app_identifier "com.aaa.aaa"
apple_id "aaa@aaa.com"
team_id "AAAAAAAAAA"

for_lane : release do
app_identifier "com.bbb.bbb"
apple_id "bbb@bbb.com"
team_id "AAAAAAAAAA"
end

这里就是为Fastfile中定义的: release设置单独的信息。

Deliverfile

Deliverfile中为发布的配置信息,一般情况用不到。

Fastfile

Fastfile是我们最应该关注的文件,也是我们的工作文件。
下面是我的fastfile文件中上传至app store的lane:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
platform :ios do
#------------------------------APP STORE-----------------------------------
desc "Push a new release build to the App Store"
lane :to_appStore do
#gym用来编译ipa
gym(clean:true,# 编译前执行 clean,可减少 ipa 文件大小
scheme: "MobileChecking",#要编译的scheme名称
export_method: "app-store", # Xcode 9增加export_method标签
silent: true, # 隐藏没有必要的信息
output_directory: "./fastlane/appstoreIPA", # ipa输出目录
output_name:"mobileChecking", #输出的ipa名称
archive_path:"./fastlane/appstoreIpaArchive", #archive文件导出地址
export_xcargs: "-allowProvisioningUpdates"
)
upload_to_app_store
end

其中一个lane就是一个任务,里面是一个个的action组成的工作流。

export_method:指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的。

如何使用Fastlane

定义完lane之后怎么执行呢?打开终端,切换到项目的根目录:执行fastlane [lane’name]就可以了。比如我的lane名称叫appStore,那么久执行如下命令:

1
fastlane  appStore

或者采用下面的命令会更快:

1
bundle exec fastlane  appStore

成功之后会在相应的路径下生成ipa文件,并会自动上传至app store。

如何配置Fastfile

上传到fir

####安装fir
使用如下命令,安装fir:

1
sudo gem install fir-cli

安装完成以后,登录fir:

1
fir login

会让你输入你的fir.im API Token,去fir网站即可获得此token。
安装fir:

1
fastlane add_plugin firim

fir上传的lane:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#-----------------------------------FIR-------------------------------

desc "Push a new release build to the FIR"
lane :to_fir do
#build_app(workspace: "MobileChecking.xcworkspace", scheme: "MobileChecking")
#gym用来编译ipa
gym(clean: true, # 编译前执行 clean,可减少 ipa 文件大小
scheme: "MobileChecking", # 要编译的scheme名称
export_method: "ad-hoc", # Xcode 9增加export_method标签
silent: true, # 隐藏没有必要的信息
output_directory: "./fastlane/firIPA", # ipa输出目录
output_name:"mobileChecking", # 输出的ipa名称
archive_path:"./fastlane/firIpaArchive", #archive文件导出地址
export_xcargs: "-allowProvisioningUpdates",
)
# 上传ipa到fir.im服务器,在fir.im获取firim_api_token
firim(firim_api_token: "451d867c8860da31e5e46062b1ecea57")

end

如果你想上传到蒲公英,可以参考这篇文章:使用 fastlane 实现 iOS 持续集成(二)

常见错误处理

  1. FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT
    1
    2
    3
    4
    5
    6
    7
    [14:57:59]: fastlane finished with errors

    [!] xcodebuild -showBuildSettings timed out after 4 retries with a
    base timeout of 3. You can override the base timeout value with the
    environment variable FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT, and the
    number of retries with the environment variable
    FASTLANE_XCODEBUILD_SETTINGS_RETRIES

在遇到这个错误之后,在命令窗口运行下面代码来更新timeout时间:

1
2
#更新timeout
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120

参考