一、fastlane简介
Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作。
Github:https://github.com/fastlane/fastlane
官网:https://fastlane.tools/
文档:https://docs.fastlane.tools/
工具集说明如下:
- scan
- 自动运行测试工具,并且可以生成HTML文档报告
- cert
- 自动创建和管理iOS签名证书(Certificates)
- sigh
- 创建、更新、下载、修复Provisioning Profiles的工具
- pem
- 自动生成、更新推送配置文件
- snapshot
- 使用Xcode7的UITest功能实现自动化截图
- frameit
- 把截取的图片套上一层外边框
- gym
- 自动化编译工具,用来打包ipa或者pkg文件
- deliver
- 自动上传截图、App的元数据、二进制(ipa)文件到iTunes Connect
- produce
- 在iTunes Connect或者Apple Developer Center上创建新的iOS应用程序
备注:还有一些工具因为不常用或者被弃用了(比如:shenzhen),这里就不一一列举了。
二、操作步骤
-
安装fastlane
- 确保安装了最新版的Xcode command line tools
xcode-select --install
- 安装fastlane
[sudo] gem install fastlane -NV
或者也可以使用brew cask 来安装fastlane
- 确保安装了最新版的Xcode command line tools
-
初始化fastlane
- 打开terminal(终端),进入项目根目录下,初始化fastlane
fastlane init
出现如下选项,选择4:
① 自动化截图
② 将测试版分发自动化到TestFlight
③ 自动上传、发布到App Store
④ 手动设置 - 手动设置您的项目以使您的任务自动化
然后,输入开发者账号密码
如果开发者账号上没有对应的bundle id的App,会提示是否创建一个新的App,这里我们选择否(n),因为这样快速创建的App设置的信息有限,只能设置App名称等一些基本信息,我们可以通过produce工具创建一个可以设置更多信息的App
- 打开terminal(终端),进入项目根目录下,初始化fastlane
使用produce,在iTunes Connect或者Apple Developer Center上创建新的iOS应用程序
进入项目根目录,找到fastlane文件夹下的Fastfile文件, 编辑文件,内容如下:
platform :ios do
desc "create new app"
lane :produce_app do
produce(
username: "[email protected]",# APPle ID
app_name: "小鱼小鱼吃虾米",#App 名称
app_identifier: "com.test.www.FastlaneTest",#App bundle id
app_version: "1.0",#App 版本
sku: "10023500",#App sku
language: "Simplified Chinese",#App 语言,默认English
)
end
end
备注:language这个选项不能直接写Chinese,语言选项如下
["Brazilian Portuguese", "Danish", "Dutch", "English", "English_Australian", "English_CA", "English_UK", "Finnish", "French", "French_CA", "German", "Greek", "Indonesian", "Italian", "Japanese", "Korean", "Malay", "Norwegian", "Portuguese", "Russian", "Simplified Chinese", "Spanish", "Spanish_MX", "Swedish", "Thai", "Traditional Chinese", "Turkish", "Vietnamese"]
在terminal中执行fastlane produce_app命令,创建成功提示如下:
- 使用cert创建签名证书(Certificates)
① 在Fastfile中添加以下内容,生成开发证书:
lane :create_certificates do
cert(
username: "[email protected]",# APPle ID
development: true,# 创建一个开发证书
force: "false",#即使存在现有证书,也要创建证书,默认为false
output_path: "./certs/development",#存储所有证书和私钥的目录的路径
)
end
结果如下:
② 生成生产证书
lane :create_dcertificates do
cert(
username: "[email protected]",# APPle ID
development: false,# 创建一个开发证书
force: "false",#即使存在现有证书,也要创建证书,默认为false
output_path: "./certs/distribution",#存储所有证书和私钥的目录的路径
)
end
开发和生产证书,修改development的boolean值及output_path路径即可
- 使用sigh 生成描述文件(mobileprovision)
在Fastfile中
①生成开发mobileprovision
lane :get_dev_provisioningProfile do
get_provisioning_profile(
username: "[email protected]",# APPle ID
development: true,# 创建一个开发mobileprovision
app_identifier: "com.test.www.FastlaneTest",#bundle identifier
output_path: "./certs/development",#存储mobileprovision的目录的路径
filename: "fastlane_dev.mobileprovision",#用于生成的供应配置文件的文件名(必须包含.mobileprovision)
)
end
② 生成生产mobileprovision
lane :get_provisioningProfile do
get_provisioning_profile(
username: "[email protected]",# APPle ID
development: false,# 创建一个开发证书
app_identifier: "com.test.www.FastlaneTest",#bundle identifier
output_path: "./certs/distribution",#存储mobileprovision的目录的路径
filename: "fastlane_distr.mobileprovision",#用于生成的供应配置文件的文件名(必须包含.mobileprovision)
)
end
找到certs/development&&distribution目录下的证书及.mobileprovision文件,并安装到电脑上
- 使用gym来打包ipa
- 插件(Plugins)
可以在fastlane1.3.0以及更高版本的添加插件,通过添加插件,可以增加一些扩展功能,以便更好的使用
查看所有可用插件
fastlane search_plug
查找插件
fastlane search_plugins [query]
添加插件
fastlane add_plugin [name]
这里介绍两个将会用到插件:
① astlane-plugin-versioning => 用来修改build版本号和version版本号。
Fastlane内嵌的actionincrement_build_number使用的是苹果提供的agvtool,agvtool在更改Build的时候会改变所有target的版本号。这时如果你在一个工程里有多个产品的话,每次编译,所有的Build都要加1。
有了fastlane-plugin-versioning
不仅可以指定target增加Build,而且可以按照「语义化版本」规范增加Version,当然也可以直接设定Version。
② fastlane-plugin-firim => 直接把AdHoc或者InHouse打包的ipa上传到fir.im,供测试下载。
安装以上两个插件
- 插件(Plugins)
fastlane add_plugin versioning
fastlane add_plugin firim
使用gym打包ipa
- 打包之前,先使用xcode的archive一下,保证项目可以运行起来
- 打包企业版
lane :inhouse do
# 以下两个action来自fastlane-plugin-versioning,
# 第一个递增 Build,第二个设定Version。
# 如果你有多个target,就必须指定target的值,否则它会直接找找到的第一个plist修改
increment_build_number_in_plist(target: 'FastlaneTest')
increment_version_number_in_plist(
target: 'FastlaneTest',
version_number: '1.0'
)
# gym用来编译ipa
gym(scheme: 'FastlaneTest',#打包scheme
export_method:"enterprise",#打包类型app-store, ad-hoc, enterprise, development
output_directory: "./build",#ipa打包存放路径
output_name: 'inhouse.ipa'#ipa名称
)
end
- 上传到firim
firim(firim_api_token:'38536e6737457d269979734fdsfdsfa')
打包其他版本只需要把export_method方法改成对应的字段即可,这里就一一叙述了
- 通过deliver 上传截图、App的元数据、二进制(ipa)文件到iTunes Connect
①在Deliverfile中填写要上传的App元数据
# For more information, check out the docs
# https://docs.fastlane.tools/actions/deliver/
# bundle identifier
app_identifier "com.test.www.FastlaneTest"
# Apple ID用户名
username "[email protected]"
# 版权声明
copyright "#{Time.now.year} xiaoyuchixiami"
# 支持的语言
supportedLanguages = {
"cmn-Hans" => "zh-Hans"
}
# 副标题
subtitle(
'zh-Hans' => "小鱼小鱼,虾米虾米"
)
# App应用名称
name(
'zh-Hans' => "小鱼小鱼吃虾米"
)
# 关键字
keywords(
'zh-Hans' => "小鱼小鱼吃虾米,小鱼,吃虾米"
)
# 营销地址
marketing_url({
'zh-Hans' => "https:www.xiaoyuchixiami.com"
})
# 隐私地址
privacy_url({
'zh-Hans' => "https:www.xiaoyuchixiami.com"
})
# 支持网址
support_url({
'zh-Hans' => "https:www.xiaoyuchixiami.com"
})
# 发行说明
release_notes({
'zh-Hans' => "这是第一个版本哦"
})
# 应用说明
description({
'zh-Hans' => "小鱼小鱼吃虾米, 虾米被小鱼吃",
})
# App价格
price_tier 0
# 应用程序图标的路径
app_icon './fastlane/metadata/AppIcon.png'
# 屏幕截图的文件夹的路径
screenshots_path './fastlane/screenshots'
# ipa路径
ipa './build/release.ipa'
# 自动发布 app: false,则需要手动发布
automatic_release false
# 提交审核信息:加密, idfa 等
submission_information({
export_compliance_encryption_updated: false,
export_compliance_uses_encryption: false,
content_rights_contains_third_party_content: false,
add_id_info_uses_idfa: false
})
# 应用审核小组的联系信息 app 审核信息
app_review_information(
first_name: "杨",
last_name: "过",
phone_number: "13522945883",
email_address: "[email protected]",
demo_user: "测试账号",
demo_password: "测试密码",
notes: "account needed"
)
② 在Fastfile中编写上传元数据action
lane :upload_message do
deliver
end
③ 在terminal中执行fastlane upload_message,会生成一份app元数据确认的htm,输入y上传
上传成功截图:
通过以上截图,可以看到,我们打包的ipa包和其他元数据都上传到了iTunes Connect
④ 发布应用
在Deliverfile文件中添加以下内容即可
# 上传完成后提交新版本进行审查
submit_for_review: true
# 跳过HTML报告文件验证
force: true
注意事项:
-
截图文件需要区分语言,所以一个文件夹对应一种语言,以下是简体中文对应的截图,另外,同一个分辨率的图片排序顺序是根据字母顺序排列的。
2.Deliverfile文件元数据是区分语言的,所以app名称等信息需要加上语言标识,如下图: