前言:App的开发过程中,打包测试也是非常重要的一环,但是频繁的机械式操作反而阻塞我们的开发测试效率,我们希望通过自动打包上传到测试环境减少一些不必要的简单操作,所以自动打包开发工具就应运而生了,常见的主流工具有
Jenkins
、fastlane
。Jenkins
功能强大,但是需要的配置也比较多,团队较大的可以优先考虑,fastlane
比较轻便,配置较为简单,使用起来也很方便。本文将基于fastlane自动化打包的功能,详细的介绍下fastlane安装到上传蒲公英的整个流程。
目录
<一>. fastlane的安装
<二>. fastlane的配置
<三>. fastlane打包并上传至蒲公英和fir.im
<一>. fastlane的安装
- 1.笔者配置fastlane的环境为 macOS Catalina v10.15.6版本。
- 2.fastlane 是用Ruby语言编写的一套自动化工具集和框架,fastlane的Github地址,fastlane的官网,fastlane的文档。
- 3.fastlane的安装(在终端命令行操作):
--第一步:因为fastlane是用Ruby语言编写的工具,所以必须保证已经配置好了Ruby开发环境。可以使用如下命令行查看是否安装了Ruby:
ruby -v
如果有以下提示说明你已经安装了Ruby:
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin19]
如果没有安装也没关系,这里提供一个博主的方法。
--第二步:安装Xcode命令行工具
xcode-select --install
如果没有安装,命令会有提示框,根据提示一步一步安装即可。
如果出现以下命令提示,说明已经安装成功:
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
--第三步:Ruby和Xcode环境都配置好之后,我们只需要执行以下命令来安装fastlane
sudo gem install -n /usr/local/bin fastlane
安装完成之后,输入以下命令查看是否安装成功:
fastlane --version
出现以下提示说明你已经安装成功了:
如果没有以上提示也没关系,回看前面的步骤,再仔细检查下,祝君好运。
<二>. fastlane的配置
fastlane安装成功之后,接下来就是比较重要的fastlane的配置。
-
<1>首先需要我们cd到你的iOS项目下,执行初始化命令:
fastlane init
命令执行完成之后会给出我们如下几个提示:
命令执行到最后有
What would you like to use fastlane for?
提示,此时fastlane列出几个选项,需要我们告诉它使用fastlane需要执行哪种操作:
- 第一种获取App Store的App预览照片。
- 第二种打包上传至TestFlight工具上。
- 第三种打包上传到App Store。
- 第四种自定义打包方式。
以上四种方式大家可以根据自己的需要自行选择,本文主要介绍打包上传至第三方平台,所以选择4
自定义打包方式。选择完成之后,fastlane会在我们项目中创建fastlane文件,这个过程大概需要两分钟等待。
出现以下截图说明已经创建成功:
此时只需要我们一直敲回车键即可,直到该命令运行结束,我们会看到如下创建的文件:
-
<2>创建好fastlane文件夹之后,
Appfile
是编辑我们相关App和开发者账号信息的,一般不需要我们去手动修改,在最后一步的打包过程中如果出现需要App ID的相关信息,我们在命令行中正常输入即可。Fastfile
是我们对自动打包这个过程的完整配置,默认的Fastfile文件内容如下:
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
default_platform(:iOS)
platform :iOS do
desc "Description of what the lane does"
lane :custom_lane do
# add actions here: https://docs.fastlane.tools/actions
end
end
- 1.主要介绍lane的任务结构和蒲公英、fir.im的api配置。
笔者给出一个自己的例子来作为参考并讲解主要参数的含义:
# gym(
# scheme:"NonTeacher", #项目名称
# export_method:"ad-hoc",#打包的类型
# configuration:"Release",#模式,默认Release,还有Debug
# output_name:"#{ipaName}",#输出的包名
# output_directory:"./build"#输出的位置
# )
# Uncomment the line if you want fastlane to automatically update itself
#
platform :iOS do
desc "打测试包上传到蒲公英"
lane :pgy do
build_app(
workspace: "XXXXX.xcworkspace",
scheme: "XXXXX",
export_method: "ad-hoc",
output_directory: "/Users/XXXXX/Desktop/IPA"
)
#蒲公英的配置 替换为自己的api_key和user_key
pgyer(api_key: "蒲公英api_key", user_key: "蒲公英user_key", update_description: "该版本更新的内容")
end
desc "打测试包上传到fir.im"
lane :fir do
build_app(
workspace: "XXXXX.xcworkspace",
scheme: "XXXXX",
export_method: "ad-hoc",
output_directory: "/Users/XXXXX/Desktop/IPA",
silent:"true"
)
gym(
output_directory: "/Users/XXXXX/Desktop/IPA",
)
# 上传ipa到fir.im服务器,在fir.im获取firim_api_token
firim(firim_api_token: "firim_api_token") # token 在fir 上查看
end
end
关于上述的蒲公英api_key和user_key可以到蒲公英Api网站查看:
关于fir.im的相关信息可以到fir.imApi网站查看:
-
- build_app 中主要是编译打包成ipa文件这个过程的相关操作,build_app中的相关参数介绍:
参数 | 参数的意义 | 默认值 |
---|---|---|
workspace |
iOS项目的workspace | |
project |
工程路径 | |
scheme |
iOS项目的scheme | |
clean |
fastlane自动打包之前知否clean项目 | false |
output_directory |
编译App完成后ipa包的存放地址,默认在工程中 | . |
output_name |
ipa包名称 | |
silent |
编译过程中隐藏掉不必要的信息 | false |
codesigning_identity |
描述文件 | |
skip_package_ipa |
自动跳过ipa打包 | false |
skip_package_pkg |
自动跳过pkg打包 | false |
include_symbols |
ipa包包含symbols? | |
include_bitcode |
ipa包包含symbolsbitcode? | |
export_method |
打包导出方式: app-store, ad-hoc, package, enterprise, development, developer-id | |
export_options |
需要一个export_options plist 文件路径或者export_options ,用 'xcodebuild -help' 查看提供的 options | |
skip_build_archive |
Export ipa from previously built xcarchive. Uses archive_path as source | |
skip_archive |
跳过打archive包过程 | |
skip_codesigning |
Build without codesigning | |
catalyst_platform |
catalyst app的打包平台: ios, macos | |
build_path |
The directory in which the archive should be stored in | |
archive_path |
The path to the created archive | |
sdk |
应用支持的手机系统版本 |
套用fastlane官方的配置例子:
build_app(
workspace: "MyApp.xcworkspace",
configuration: "Debug",
scheme: "MyApp",
silent: true,
clean: true,
output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
output_name: "my-app.ipa", # specify the name of the .ipa file to generate (including file extension)
sdk: "iOS 11.1" # use SDK as the name or path of the base SDK when building the project.
)
-
- gym 中主要是编译打包成功后,对导出的IPA包的操作,gym中的相关参数可参考build_app中的参数,因为两者的参数基本一致,最后用一个gym例子:
platform :iOS do
desc "打测试包上传到fir.im"
lane :fir do
build_app(
workspace: "XXXXX.xcworkspace",
scheme: "XXXXX",
export_method: "ad-hoc",
output_directory: "/Users/XXXXX/Desktop/IPA",
silent:"true"
)
gym(
workspace: "MyApp.xcworkspace",
configuration: "Debug",
scheme: "MyApp",
silent: true,
clean: true,
output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
output_name: "my-app.ipa", # specify the name of the .ipa file to generate (including file extension)
sdk: "iOS 11.1" # use SDK as the name or path of the base SDK when building the project.
)
end
end
- 4 蒲公英和fir.im的插件配置
经过上面的相关配置,我们的配置就差一步:第三方平台的插件配置。
@1.蒲公英插件的配置:
执行以下命令来安装蒲公英插件:
fastlane add_plugin pgyer
出现以下结果表明安装成功:
@2.fir.im插件的配置:
执行以下命令来安装fir.im插件:
fastlane add_plugin firim
出现以下结果表明安装成功:
<三>. fastlane打包并上传至蒲公英和fir.im
经过上面的配置,我们就可以愉快的自动打包上传啦,不过最后还有几点跟大家说明一下,首先贴出来笔者打包的配置文件:
platform :iOS do
desc "打测试包上传到蒲公英"
lane :pgy do
build_app(
workspace: "XXXXX.xcworkspace",
scheme: "XXXXX",
export_method: "ad-hoc",
output_directory: "/Users/XXXXX/Desktop/IPA"
)
#蒲公英的配置 替换为自己的api_key和user_key
pgyer(api_key: "蒲公英api_key", user_key: "蒲公英user_key", update_description: "该版本更新的内容")
end
desc "打测试包上传到fir.im"
lane :fir do
build_app(
workspace: "XXXXX.xcworkspace",
scheme: "XXXXX",
export_method: "ad-hoc",
output_directory: "/Users/XXXXX/Desktop/IPA",
silent:"true"
)
# 上传ipa到fir.im服务器,在fir.im获取firim_api_token
firim(firim_api_token: "firim_api_token") # token 在fir 上查看
end
end
首先lane作为一个单独的任务模块,它是可以自己定义的,例如笔者的例子中platform
为iOS
,下面有两个任务:pgy
和fir
,所以在我们只需要cd 到相关的iOS项目下执行以下命理即可:
(打包上传至fir.im ios为platform字段中的平台 fir为自己自定义的任务 当然这个名字可以任意取,在我们执行命令的时候对应上即可。)
fastlane ios fir
或者
fastlane ios pgy
出现下面的截图就代表你已经上传成功了:
附录:
<1> firim相关参数配置
参数 | 参数的意义 | 默认值 |
---|---|---|
platform | 平台:ios , mac, android | --- |
firim_api_url | https://www.betaqr.com/apps | --- |
firim_api_token | firim网站的API token | --- |
app_changelog | 更新日志 | --- |
firim_username | 用户名 | --- |
app_passwd | 安装密码 | --- |
ipa | ipa包 | --- |
apk | apk包 | --- |
gradle_file | --- | --- |
icon | --- | --- |
file | --- | --- |
app_identifier | --- | --- |
app_name | --- | --- |
app_desc | --- | --- |
app_short | --- | --- |
app_is_opened | --- | --- |
app_is_show_plaza | --- | --- |
app_store_link_visible | --- | --- |
app_version | --- | --- |
app_build_version | --- | --- |
app_release_type | --- | --- |
app_info_to_file_path | --- | --- |
<2> 蒲公英相关参数配置
参数 | 参数的意义 | 默认值 |
---|---|---|
api_key | https://www.pgyer.com/account/api | --- |
user_key | https://www.pgyer.com/account/api | --- |
ipa | ipa包 | --- |
apk | apk包 | --- |
password | 安装包密码 | --- |
update_description | 更新日志 | --- |
install_type | --- | --- |
写在最后:fastlane的本地打包主题感受是相比之前手工操作省去了不少机械操作,笔者80M左右的项目上传成功大概用了9分左右,还是挺有效率的。当然这也只是开发测试中的一环,弊端就是必须要本地配置好才可以,关于后续的服务器自动化打包测试会继续更新,感谢大家的拜读,如果文中有错误或者理解不对的地方,欢迎大家的批评指正。