移动端一键自动化打包发布-Fastlane

Fastlane官网
Fastlane官方文档
Fastlane Github地址

摘要

Fastlane 是一个完全开源的项目,是一款为 iOS 和 Android 开发者提供的自动化构建工具,它可以帮助开发者将 App 打包、签名、测试、发布、信息整理、提交 App Store 等工作完整的连接起来,实现完全自动化的工作流。

安装

安装fastlane之前需要安装一些前置软件包。

安装Homebrew

安装具体步骤可参考文章:Mac包管理工具-Homebrew

Ruby

首先mac系统会自带一个ruby版本。
通过如下命令查看ruby版本:

1
ruby -v

如果ruby版本过低可通过以下命令安装指定版本ruby环境:

1
brew install ruby@x.x

安装完成后需要配置环境变量。国内的话需要替换gem source,替换为 gems.ruby-china.com。
查看gem source命令如下:

1
gem sources

安装xcode命令行工具

执行如下命令:

1
xcode-select --install

如果安装过会有提示,如果没装过就会自动开始安装。一般你如果安装了xcode,并且打开过,都会提示已安装。

安装fastlane

安装fastlane有两种方式。
第一种是通过gem安装:

1
sudo gem install -n /usr/local/bin fastlane

第二种是通过Homebrew安装:

1
brew install fastlane

推荐第二种。
安装完成后可通过如下命令查看版本,可以正常输出版本信息及安装成功:

1
fastlane --version

安装pgyer插件

如果使用的是pgyer作为分发平台,需要安装插件:

1
fastlane add_plugin pgyer

iOS setup

初始化

打开终端,cd到iOS项目根目录(xcodeproj 的同级目录),输入:

1
fastlane init

根据提示选择或者输入对应信息,会要求你输入apple id账号。初始化完成后项目目录下会出现新的文件夹/fastlane,其中 Appfile 里面存放了 App 的基本信息包括 App_Identifier 、AppID 、Team_ID 等,Fastfile 是最重要的一个文件,在这个文件里面可以编写和定制我们打包脚本的一个文件,所有自定义的功能都写在这里。

配置Fastfile

打开并编辑Fastfile文件。
根据需求修改下方配置,并将其粘贴进Fastfile。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
default_platform(:ios)

platform :ios do

desc "以 development 方式打包并上传到蒲公英"
lane :test_pgyer do

puts "以 development 方式打包"
gym(
# 指定打包所使用的输出方式 (可选: app-store, package, ad-hoc, enterprise, development)
export_method: "development",
# 指定项目的 scheme 名称
scheme: "xxx",
# 指定输出的文件夹地址
output_directory: "./archive/test_pgyer/" + Time.new.strftime("%Y-%m-%d-%H:%M:%S"),
)

puts "上传 ipa 包到蒲公英"
pgyer(
# 蒲公英 API KEY
api_key: "xxx",
# 蒲公英 USER KEY(最新版本不需要配置user_key了)
# user_key: "xxx"
)

end

desc "以 ad-hoc 方式打包并上传到蒲公英"
lane :beta do
puts "自动生成 Provisioning Profiles 文件"
sigh(
# 指定输出的文件夹地址
output_path: "./archive/sign",
# 是否为 AdHoc 证书(设为 false 或不写默认为 AppStore 证书)
adhoc: true
)

puts "以 ad-hoc 方式打包"
gym(
# 指定打包所使用的输出方式 (可选: app-store, package, ad-hoc, enterprise, development)
export_method: "ad-hoc",
# 指定项目的 scheme 名称
scheme: "xxx",
# 指定输出的文件夹地址
output_directory: "./archive/beta/" + Time.new.strftime("%Y-%m-%d-%H:%M:%S"),
# 指定打包方式 (可选: Release, Debug)
configuration: "Release"
)
puts "上传 ipa 包到蒲公英"
pgyer(
# 蒲公英 API KEY
api_key: "xxx",
# 蒲公英 USER KEY(最新版本不需要配置user_key了)
# user_key: "xxx"
)

end

desc "以 app-store 方式打包并上传到 iTunes Connect"
lane :release do

puts "自动生成 Provisioning Profiles 文件"
sigh(
# 指定输出的文件夹地址
output_path: "./archive/sign"
)

puts "以 app-store 方式打包"
gym(
# 指定打包所使用的输出方式 (可选: app-store, package, ad-hoc, enterprise, development)
export_method: "app-store",
# 指定项目的 scheme 名称
scheme: "xxx",
# 指定输出的文件夹地址
output_directory: "./archive/release/" + Time.new.strftime("%Y-%m-%d-%H:%M:%S"),
# 指定打包方式 (可选: Release, Debug)
configuration: "Release"
)

puts "上传 ipa 包到 iTunes Connect"
deliver(
# 跳过截图上传
skip_screenshots: true,
# 跳过元数据上传
skip_metadata: true,
# 跳过审核直接上传
force: true
)
end
end

打包

打开终端,cd到项目根目录,自动打包并上传至pgyer:

1
fastlane test_pgyer

自动打包并上传至App connect:

1
fastlane release

Android setup

安装获取应用版本的 Fastlane 插件

1
fastlane add_plugin android_versioning

初始化

打开终端,cd到Android项目根目录,输入:

1
fastlane init

根据提示选择或者输入对应信息,需要输入package name,初始化完成后项目目录下会出现新的文件夹/fastlane,其中 Appfile 里面存放了 App 的基本信息,Fastfile 是最重要的一个文件,在这个文件里面可以编写和定制我们打包脚本的一个文件,所有自定义的功能都写在这里。

配置Fastfile

打开并编辑Fastfile文件。
根据需求修改下方配置,并将其粘贴进Fastfile。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
default_platform(:android)

platform :android do

lane:beta do
#从蒲公英平台拿到的api_key和user_key
#api_key = "xxx"
#user_key = "xxx"
puts "开始打包xxxdebug版本"
# 开始打包
gradle(task:'clean')
gradle(
task: 'assemble',
build_type: 'Debug',
)
puts "xxx打包成功"
#puts "开始上传到蒲公英"
#开始上传ipa到蒲公英,这里用的是蒲公英提供的插件
#update_description代表更新信息,password代表安装密码
#pgyer(update_description: "#{desc}", api_key: "#{api_key}", password: "123456", install_type: "2")
#puts "上传到蒲公英成功"
#在上传完apk后,打开apk的存放文件夹,起到提示上传完成的作用
#system "open /User/wangchang/Desktop/defaultFlavor/debug"
end


lane:release do
#从蒲公英平台拿到的api_key和user_key
#api_key = "xxx"
#user_key = "xxx"



#输入蒲公英上传apk包后输入的版本描述信息
#puts "请输入版本描述:"
#desc = STDIN.gets

puts "开始打包xxxrelease版本"
# 开始打包
gradle(task:'clean')
gradle(
task: 'assemble',
build_type: 'Release',
)
puts "xxx打包成功"
#puts "开始上传到蒲公英"
#开始上传ipa到蒲公英,这里用的是蒲公英提供的插件
#update_description代表更新信息,password代表安装密码
#pgyer(update_description: "#{desc}", api_key: "#{api_key}", password: "123456", install_type: "2")
#puts "上传到蒲公英成功"
#在上传完apk后,打开apk的存放文件夹,起到提示上传完成的作用
#system "open /User/wangchang/Desktop/defaultFlavor/debug"
end
end

fastlane打Android渠道包

首先,我们自定义一个 Action:add_channels_to_apk,这个 Action 的作用就是: 拷贝最终打包生成的 apk 文件,并修改文件名为渠道名,如 gengmei_qq_630.apk 然后将一个渠道名写入到 apk 文件的 META-INFO 目录中 其次,新建一个 txt 文件,里面写入所有需要打包的渠道名,如:QQ,360,Baidu…等等,渠道名之间用逗号隔开。
最后,在 Fastfile 中定义一个 Lane 来进行最终的集成处理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
desc "Package a new app version with different channels"
lane :do_package_apk do |options|
project = "#{options[:project]}"
target_version = options[:version]

hipchat(message: "Start package #{project} at version #{target_version}")

git_pull
gradle(task: "clean")
gradle(task: "assembleRelease")
add_channels_to_apk(channels: './channels.txt')

hipchat(message: "Deliver app #{project} successfully!")
end

然后执行如下的命令打包:

1
fastlane do_package_apk project:Gengmei version:7.0.0

Fastlane常用命令

命令 说明
fastlane actions 展示所有有效action列表
fastlane action [action_name] 展示一个action的详细说明,使用方法等
fastlane lanes 展示fastfile中的所有lane
fastlane list 展示fastfile中的所有的有效的lane
fastlane new_action 创建一个新的action
fastlane env 打印fastlane、ruby环境,一般提bug到issue的时候会要求提供

移动端一键自动化打包发布-Fastlane
https://houboye.github.io/2023/07/28/CI/230728-fastlane/
作者
boye
发布于
2023年7月28日
许可协议