前篇文章介紹Android多環(huán)境編譯打包霜幼。
本篇介紹如何使用fastlane構(gòu)建多版本應(yīng)用。
安裝
工具的起源本身是專門針對 iOS 項目类嗤,因此目前依賴于 macOS 10.9 以上系統(tǒng)裂七,Ruby 是一個眾所周知的輪子發(fā)明者褥符,很多知名的工具都是它開發(fā)的鹃操,fastlane 也不例外韭寸。以下是依賴環(huán)境:
- macOS 10.9+
- Ruby 2.0+ (推薦 rvm 或 rbenv 安裝)
- Xcode + command line tools
安裝最新的Xcode命令行工具
xcode-select --install
安裝fastlane
# Using RubyGems
sudo gem install fastlane -NV
# Alternatively using Homebrew
brew cask install fastlane
使用
切換到你的iOS工程目錄,在目錄下執(zhí)行:
fastlane init
初始化過程會有選項提示组民,根據(jù)自己的情況選擇即可棒仍,我一般選擇“Manual setup”悲靴。
完成后會看到目錄下多了一個Gemfile臭胜,還有一個fastlane文件夾,里面包含兩個文件:AppFile和Fastfile癞尚。
先將注意力集中在Fastfile中。新創(chuàng)建的文件內(nèi)容如下:
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
我們需要編寫的內(nèi)容都在platform :ios do
到末行end
之間浇揩。
- lane:定義一個名為
custom_lane
的任務(wù)方法仪壮。任務(wù)可以定義多個并互相調(diào)用,支持參數(shù)胳徽。 - desc:任務(wù)描述
我們的目標(biāo)是構(gòu)建應(yīng)用积锅,先來創(chuàng)建一個最簡單的任務(wù):
platform :ios do
desc "構(gòu)建beta版本"
lane :beta do
# add actions here: https://docs.fastlane.tools/actions
build_app(scheme: "myapp",
workspace: "myapp.xcworkspace",
export_method: "development",
include_bitcode: true)
end
end
執(zhí)行命令:fastlane beta
編譯結(jié)束后,你就會在根目錄看到已經(jīng)編譯好的ipa文件:MyApp.ipa
build_app
是一個action养盗,是build_ios_app
的別名缚陷,常用的參數(shù)配置如下:
-
workspace
:xcworkspace工程文件路徑 -
project
:xcodeproj工程文件路徑,如果是workspace工程不需要填這個 -
scheme
:指定scheme -
clean
:編譯前是否清理 -
output_directory
:ipa文件保存路徑 -
output_name
:自定義ipa文件名 -
export_method
:支持app-store, ad-hoc, package, enterprise, development, developer-id -
include_bitcode
:是否開啟include_bitcode選項
更詳細(xì)的參數(shù)列表請看文檔:https://docs.fastlane.tools/actions/build_app/#parameters
除了build_app
之外往核,falstlane還支持非常多的action箫爷,更多action查看文檔https://docs.fastlane.tools/actions
下面列舉幾種:
-
increment_version_number
:自動更新版本號 -
update_app_identifier
:更新bundleID -
update_info_plist
:更新info.plist,不過只能更新bundle id和Display Name聂儒。不要用此方法更新bundle id虎锚,而是建議用update_app_identifier
更新。 -
update_plist
:更新plist文件中衩婚,可以修改plist中的鍵值對窜护。
多版本構(gòu)建
我希望通過fastlane在本地快速構(gòu)建開發(fā)、生產(chǎn)環(huán)境不同版本的App非春,需求點依然是每個版本的bundle id柄慰、接口地址鳍悠、應(yīng)用名稱、sdk secret key不一樣坐搔,最終只通過命令完成一鍵構(gòu)建藏研。
我們先定一個任務(wù)(lane),用來修改配置
desc "修改項目配置"
desc "參數(shù) prod 判斷是否為生產(chǎn)版本"
lane :set_app_mode do |options|
prod = options[:prod] || false
# bundle id
app_id_suffix = prod ? "prod" : "dev"
# 應(yīng)用名稱
app_name_suffix = prod ? "" : "測試版"
# app center應(yīng)用統(tǒng)計sdk的secret key概行,分環(huán)境
app_center_dev_secret = "aaaaaa"
app_center_prod_secret = "bbbbbb"
app_center_secret = prod ? app_center_prod_secret : app_center_dev_secret
# 接口地址
backend_dev = "https://dev.example.com"
backend_prod = "https://prod.example.com"
backend = prod ? backend_prod : backend_dev
# 更新bundle id
update_app_identifier(
xcodeproj: "myapp.xcodeproj",
plist_path: "myapp/Info.plist",
app_identifier: "com.example.myapp.#{app_id_suffix}"
)
# 更新應(yīng)用名稱字段display_name
update_info_plist(
xcodeproj: "myapp.xcodeproj",
plist_path: "myapp/Info.plist",
display_name: "MyApp#{app_name_suffix}"
)
update_plist(
plist_path: "myapp/Config.plist",
block: proc do |plist|
plist[:appSecret] = app_center_secret
plist[:backend] = backend
end
)
end
有了這個方法蠢挡,我們可以輕松得通過fastlane命令來切換環(huán)境配置
# 切換到生產(chǎn)環(huán)境
fastlane set_app_mode prod:true
接著我們編寫一個編譯任務(wù)
desc "編譯任務(wù)"
lane :build do |options|
prod = options[:prod] || false
suffix = prod ? "prod" : "dev"
set_app_mode(prod: prod)
build_app(
scheme: "myapp",
workspace: "myapp.xcworkspace",
include_bitcode: true,
export_method: prod ? "ad-hoc" : "development",
output_directory: "./build",
output_name: "myapp_#{suffix}.ipa"
)
# 重置回開發(fā)版配置。日常開發(fā)使用的就是開發(fā)版配置凳忙,這里只是置到日常狀態(tài)
set_app_mode(prod: false)
end
desc "編譯beta版本"
lane :beta do
build(prod: false)
end
desc "編譯release版本"
lane :release do
build(prod: true)
end
這里就實現(xiàn)了輕松編譯兩個版本的命令
#編譯生產(chǎn)環(huán)境ipa业踏,保存路徑 ./build/myapp_prod.ipa
fastlane release
#編譯開發(fā)環(huán)境ipa,保存路徑 ./build/myapp_dev.ipa
fastlane beta
實現(xiàn)分發(fā)
fastlane還有個很好用的插件機制涧卵,官方還提供了個可用的插件列表https://docs.fastlane.tools/plugins/available-plugins/
我app分發(fā)用的fir.im勤家,當(dāng)然也可以使用蒲公英。他們在fastlane中都有對應(yīng)的插件:fir
和 pgyer
首先引入插件柳恐,執(zhí)行
fastlane add_plugin fir
如果你之前沒有裝過插件伐脖,它會在fastlane文件夾中創(chuàng)建一個Pluginfile文件,內(nèi)容如下:
# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!
gem 'fastlane-plugin-firim'
好了乐设,這樣插件就裝好了讼庇,接著是使用,直接定義兩個任務(wù)
desc "編譯beta版本并上傳至fir.im"
lane :beta_fir do
beta
firim(firim_api_token: ENV["FIR_TOKEN"])
end
desc "編譯release版本并上傳至fir.im"
lane :release_fir do
release
firim(firim_api_token: ENV["FIR_TOKEN"])
end
這樣就非常方便的打包和發(fā)布不同版本的安裝包了近尚。
# 編譯beta版本并上傳至fir.im
fastlane beta_fir
# 編譯release版本并上傳至fir.im
fastlane release_fir
推薦寫的非常詳細(xì)的關(guān)于fastlane的博客:
Fastlane - iOS 和 Android 的自動化構(gòu)建工具
深入淺出 Fastlane 一看你就懂