
Fastlane是一套使用Ruby寫(xiě)的自動(dòng)化工具集,旨在簡(jiǎn)化Android和iOS的部署過(guò)程,自動(dòng)化你的工作流。它可以簡(jiǎn)化一些乏味、單調(diào)、重復(fù)的工作,像截圖、代碼簽名以及發(fā)布App
我認(rèn)為我們?cè)谶x擇一些三方開(kāi)源庫(kù)或是工具的前提是:可以滿足我們當(dāng)下的需求并且提供好的擴(kuò)展性, 無(wú)疑對(duì)我而言Fastlane做到了。我當(dāng)前項(xiàng)目的需求主要是下面幾方面:
一行命令實(shí)現(xiàn)打包工作,不需要時(shí)時(shí)等待操作下一步,節(jié)省打包的時(shí)間去做其他的事。
避免頻繁修改配置導(dǎo)致可能出現(xiàn)的Release/Debug環(huán)境錯(cuò)誤,如果沒(méi)有檢查機(jī)制,那將是災(zāi)難,即使有檢查機(jī)制,我們也不得不重新打包,浪費(fèi)了一次打包時(shí)間。畢竟人始終沒(méi)有程序可靠,可以告別便利貼了。
通過(guò)配置自動(dòng)上傳到蒲公英,fir.im內(nèi)測(cè)平臺(tái)進(jìn)行測(cè)試分發(fā),也可以直接上傳到TestFlight,iTunes Connect。
證書(shū)的同步更新,管理,在新電腦能夠迅速具備項(xiàng)目打包環(huán)境。
如果你也有上述需求,那我相信Fastlane是一個(gè)好的選擇。
那既然說(shuō)Fastlane是一套工具的集合,那認(rèn)識(shí)并了解其中的工具的作用是必不可少的環(huán)節(jié)。按照功能屬性Fastlane對(duì)工具進(jìn)行了如下分類(lèi)(鏈接至官網(wǎng)詳細(xì)介紹):
Testing 測(cè)試相關(guān)
Building 打包
Screenshots 截圖
Project 項(xiàng)目配置
Code Signing 代碼簽名
Beta 內(nèi)測(cè)相關(guān)
Push 推送
Releasing your app 發(fā)布
Source Control Git工作流
Notifications 通知相關(guān)
Misc 其他的雜七雜八
分類(lèi)下對(duì)應(yīng)的就是具體的每一個(gè)工具的介紹,在這里每一個(gè)工具Fastlane叫做action,下文我們也統(tǒng)一叫action。這里我會(huì)列舉一些我認(rèn)為常用的action,其他的大家可以去官網(wǎng)看下
gym:是fastlane提供的打包工具。
snapshot: 生成多個(gè)設(shè)備的截圖文件
frameit :對(duì)截圖加一層物理邊框
increment_build_number:自增build number 然后與之對(duì)應(yīng)的get_build_number。Version number同理。
cert:創(chuàng)建一個(gè)新的代碼簽名證書(shū)
sigh:生成一個(gè)provisioning profile并保存打當(dāng)前文件
pem:確保當(dāng)前的推送證書(shū)是活躍的,如果沒(méi)有會(huì)幫你生成一個(gè)新的
match:在團(tuán)隊(duì)中同步證書(shū)和描述文件。(這是一種全新的管理證書(shū)的方式)
testflight:上傳ipa到testflight
deliver:上傳ipa到AppStore
當(dāng)然官網(wǎng)里面其實(shí)是有很多可以劃等號(hào)的Action,大家在看的時(shí)候注意下。Actions官網(wǎng)關(guān)于Action的介紹
多說(shuō)無(wú)益,開(kāi)始上手
當(dāng)前最新版本是2.8.4
一、安裝xcode命令行工具
xcode-select --install,如果沒(méi)有安裝,會(huì)彈出對(duì)話框,點(diǎn)擊安裝。如果提示xcode-select: error: command line tools are already installed, use "Software Update" to install updates表示已經(jīng)安裝
二、安裝Fastlane
sudo gem install fastlane -NV或是brew cask install fastlane我這里使用gem安裝的
安裝完了執(zhí)行fastlane --version,確認(rèn)下是否安裝完成和當(dāng)前使用的版本號(hào)。
三、初始化Fastlane
cd到你的項(xiàng)目目錄執(zhí)行
fastlane init

這里會(huì)彈出四個(gè)選項(xiàng),問(wèn)你想要用Fastlane做什么? 之前的老版本是不用選擇的。選幾都行,后續(xù)我們自行根據(jù)需求完善就可以,這里我選的是3。
如果你的工程是用cocoapods的那么可能會(huì)提示讓你勾選工程的Scheme,步驟就是打開(kāi)你的xcode,點(diǎn)擊Manage Schemes,在一堆三方庫(kù)中找到你的項(xiàng)目Scheme,在后面的多選框中進(jìn)行勾選,然后rm -rf fastlane文件夾,重新fastlane init一下就不會(huì)報(bào)錯(cuò)了。

接著會(huì)提示你輸入開(kāi)發(fā)者賬號(hào)和密碼。
[20:48:55]: Please enter your Apple ID developer credentials
[20:48:55]: Apple ID Username:
登錄成功后會(huì)提示你是否需要下載你的App的metadata。點(diǎn)y等待就可以。
如果報(bào)其他錯(cuò)的話,一般會(huì)帶有g(shù)ithub的相似的Issues的鏈接,里面一般都會(huì)有解決方案。
四、文件系統(tǒng)
初始化成功后會(huì)在當(dāng)前工程目錄生成一個(gè)fastlane文件夾,文件目錄為下。

其中metadata和screenshots分別對(duì)應(yīng)App元數(shù)據(jù)和商店應(yīng)用截圖。
Appfile主要存放App的apple_id team_id app_identifier等信息
Deliverfile中為發(fā)布的配置信息,一般情況用不到。
Fastfile是我們最應(yīng)該關(guān)注的文件,也是我們的工作文件。
Fastfile

之前我們了解了action,那action的組合就是一個(gè)lane,打包到蒲公英是一個(gè)lane,打包到應(yīng)用商店是一個(gè)lane,打包到testflight也是一個(gè)lane。可能理解為任務(wù)會(huì)好一些。
打包到蒲公英
這里以打包上傳到蒲公英為例子,實(shí)現(xiàn)我們的一行命令自動(dòng)打包。
蒲公英在Fastlane是作為一個(gè)插件存在的,所以要打包到蒲公英必須先安裝蒲公英的插件。
打開(kāi)終端輸入fastlane add_plugin pgyer
更多信息查看蒲公英文檔
新建一個(gè)lane
desc "打包到pgy"
lane :test do |options|
gym(
clean:true, #打包前clean項(xiàng)目
export_method: "ad-hoc", #導(dǎo)出方式
scheme:"shangshaban", #scheme
configuration: "Debug",#環(huán)境
output_directory:"./app",#ipa的存放目錄
output_name:get_build_number()#輸出ipa的文件名為當(dāng)前的build號(hào)
)
#蒲公英的配置 替換為自己的api_key和user_key
pgyer(api_key: "xxxxxxx", user_key: "xxxxxx",update_description: options[:desc])
end
這樣一個(gè)打包到蒲公英的lane就完成了。
option用于接收我們的外部參數(shù),這里可以傳入當(dāng)前build的描述信息到蒲公英平臺(tái)
執(zhí)行
在工作目錄的終端執(zhí)行
fastlane test desc:測(cè)試打包

然后等待就好了,打包成功后如果蒲公英綁定了微信或是郵箱手機(jī)號(hào),會(huì)給你發(fā)通知的,當(dāng)然如果是單純的打包或是打包到其他平臺(tái), 你也可以使用fastlane的notification的action集進(jìn)行自定義配置。
其他的一些配置大家可以自己組合摸索一下,這樣會(huì)讓你對(duì)它更為了解。
match
開(kāi)頭已經(jīng)說(shuō)了,match是一種全新的證書(shū)同步管理機(jī)制,也是我認(rèn)為在fastlane中相對(duì)重要的一環(huán),介于篇幅這篇就不細(xì)說(shuō)了,可以看下我的這篇文章iOS使用fastlane match來(lái)管理代碼簽名。
其他的一些小提示
可以在before_all中做一些前置操作,比如進(jìn)行build號(hào)的更新,我個(gè)人建議不要對(duì)Version進(jìn)行自動(dòng)修改,可以作為參數(shù)傳遞進(jìn)來(lái)。
如果ipa包存放的文件夾為工作區(qū),記得在.gitignore中進(jìn)行忽略處理,我建議把fastlane文件也進(jìn)行忽略,否則回退版本打包時(shí)缺失文件還需要手動(dòng)打包。
如果你的Apple ID在登錄時(shí)進(jìn)行了驗(yàn)證碼驗(yàn)證,那么需要設(shè)置一個(gè)專(zhuān)業(yè)密碼供fastlane上傳使用,否則是上傳不上去的。
如果你們的應(yīng)用截圖和Metadata信息是運(yùn)營(yíng)人員負(fù)責(zé)編輯和維護(hù)的,那么在打包到AppStore時(shí),記得要忽略截圖和元數(shù)據(jù),否則有可能因?yàn)椴灰恢露鴮?dǎo)致覆蓋。
skip_metadata:true, #不上傳元數(shù)據(jù)skip_screenshots:true,#不上傳屏幕截圖
關(guān)于fastlane的一些想法
其實(shí)對(duì)于很多小團(tuán)隊(duì)來(lái)說(shuō),fastlane就可以簡(jiǎn)化很多操作,提升一些效率,但是還不夠極致,因?yàn)槲覀儧](méi)有打通Git環(huán)節(jié),測(cè)試環(huán)節(jié),反饋環(huán)節(jié)等,fastlane只是處于開(kāi)發(fā)中的一環(huán)。許多團(tuán)隊(duì)在進(jìn)行Jenkins或是其他的CI的嘗試來(lái)摸索適合自己的工作流。但是也不要盲目跟風(fēng),從需求出發(fā)切合實(shí)際就好,找到痛點(diǎn)才能找到止痛藥!