更新于20181025,
最近更新:
- export_options,
- fir上传命令修改
什么是Fastlane
Fastlane是一套使用Ruby写的自动化工具集,旨在简化Android和iOS的部署过程,自动化你的工作流。它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App.
如何安装Fastlane
- 安装xcode命令行工具
xcode-select --install
如果没有安装,会弹出对话框,点击安装;
如果已经安装,就会提示
xcode-select: error: command line tools are already installed, use "Software Update" to install updates。
- 安装Fastlane
使用下面的命令
sudo gem install fastlane -NV
或是
brew cask install fastlane
来安装Fastlane。
安装完成后,可以执行下面命令,检查是否安装好。
fastlane --version
- 初始化Fastlane
cd到你的项目目录执行
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文件夹:
其中metadata
和screenshots
分别对应App元数据和商店应用截图。
Appfile
Appfile用来存放app_identifier,apple_id和team_id。 它的格式是这样的:
app_identifier "com.xxx.xxx" # app的bundle identifier
apple_id "[email protected]" # 你的Apple ID
team_id "XXXXXXXXXX" # Team ID
···
你也可以为每个lane(后面会讲到)提供不同的 app_identifier, apple_id 和 team_id,例如:
app_identifier "com.aaa.aaa"
apple_id "[email protected]"
team_id "AAAAAAAAAA"
for_lane : release do
app_identifier "com.bbb.bbb"
apple_id "[email protected]"
team_id "AAAAAAAAAA"
end
这里就是为Fastfile中定义的: release设置单独的信息。
Deliverfile
Deliverfile
中为发布的配置信息,一般情况用不到。
Fastfile
Fastfile
是我们最应该关注的文件,也是我们的工作文件。
下面是我的fastfile文件中上传至app store的lane:
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",
export_options: {
method: "ad-hoc",
provisioningProfiles: {
"com.whty.xxxx" => "对应provisioningProfiles文件名",
}
}
)
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,那么久执行如下命令:
fastlane appStore
或者采用下面的命令会更快:
bundle exec fastlane appStore
成功之后会在相应的路径下生成ipa文件,并会自动上传至app store。
如何配置Fastfile
上传到fir
安装 插件
bundle exec fastlane add_plugin fir
安装fir
使用如下命令,安装fir:
sudo gem install fir-cli
如果报如下错误:
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /usr/bin directory.
可以改为:
sudo gem install -n /usr/local/bin fir-cli
安装完成以后,登录fir:
fir login
会让你输入你的fir.im API Token
,去fir网站即可获得此token。
fir上传的lane:
#-----------------------------------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",
export_options: {
method: "ad-hoc",
provisioningProfiles: {
"com.xxxx" => "对应provisioningProfiles文件名",
}
}
)
# 上传ipa到fir.im服务器,在fir.im获取firim_api_token
#firim(firim_api_token: "451d867c8860da31exxxxxxxxxxxx")
fir(
api_token: '451d867c8860da31e5e4xxxx',
apk_path: "./fastlane/firIPA/Communication.ipa", #生成ipa路径
changelog: 'hehe123' #上传日志
)
end
如果你想上传到蒲公英,可以参考这篇文章:使用 fastlane 实现 iOS 持续集成(二)。
常见错误处理
- FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT
[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时间:
#更新timeout
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120
参考
- iOS效率神器fastlane自动打包
- 小团队的自动化发布-Fastlane带来的全自动化部署
- iOS中使用Fastlane实现自动化打包和发布
- 当Fastlane遇到Xcode9打包出来不一定是ipa而是坑
- Fastlane的gym指令
- 使用Fastlane实现iOS项目自动打包
- (译)iOS自动化打包发布(fastlane)