一、fastlane簡介
fastlane是用Ruby語言編寫的一套自動(dòng)化工具集和框架,每一個(gè)工具實(shí)際都對應(yīng)一個(gè)Ruby腳本,用來執(zhí)行某一個(gè)特定的任務(wù),而fastlane核心框架則允許使用者通過類似配置文件的形式,將不同的工具有機(jī)而靈活的結(jié)合在一起,從而形成一個(gè)個(gè)完整的自動(dòng)化流程。
二、為什么選擇fastlane
1、行命令實(shí)現(xiàn)打包工作,不需要時(shí)時(shí)等待操作下一步,節(jié)省打包的時(shí)間去做其他的事。
2、避免頻繁修改配置導(dǎo)致可能出現(xiàn)的Release/Debug環(huán)境錯(cuò)誤,如果沒有檢查機(jī)制,那將是災(zāi)難,即使有檢查機(jī)制,我們也不得不重新打包,浪費(fèi)了一次打包時(shí)間。畢竟人始終沒有程序可靠,可以告別便利貼了。
3、通過配置自動(dòng)上傳到蒲公英,fir.im內(nèi)測平臺進(jìn)行測試分發(fā),也可以直接上傳到TestFlight,iTunes Connect。
4、證書的同步更新,管理,在新電腦能夠迅速具備項(xiàng)目打包環(huán)境。
一個(gè)需求完成后需要打包并上傳至蒲公英供產(chǎn)品測試驗(yàn)收,而打包是一個(gè)復(fù)雜且需要謹(jǐn)慎的工作,大致的打包和上傳蒲公英流程如下:
選擇scheme -> 選擇項(xiàng)目 -> Archive -> 選擇打包方式 -> 選擇手動(dòng)管理證書 -> 選擇配置文件 -> 導(dǎo)出IPA包 -> 登錄蒲公英 -> 選擇項(xiàng)目 -> 上傳新版本 -> 選擇IPA包 -> 填寫說明 -> 發(fā)布
完成一個(gè)打包至少需要這13步,不能出現(xiàn)錯(cuò)誤,所有的操作必須按部就班,一步步執(zhí)行,而且如果出現(xiàn)bug需要重新打包,需要重新執(zhí)行以上步驟,十分繁瑣。
作為一名程序員,這不是我們想要的?。?!
我們要以最簡潔的方式,完成最復(fù)雜的工作,那么,fastlane就是最好的選擇??
三、如何使用fastlane
1.安裝fastlane
終端執(zhí)行sodu gem install fastlane -NV -n/usr/local/bin安裝fastlane工具
2.初始化fastlane
終端進(jìn)入項(xiàng)目所在目錄,并輸入fastlane init
會出現(xiàn)需要選擇的初始化方式:
- ?? Automate screenshots (自動(dòng)截圖)
- ????? Automate beta distribution to TestFlight (自動(dòng)testfilght型配置)
- ?? Automate App Store distribution (自動(dòng)發(fā)布型配置)
- ?? Manual setup - manually setup your project to automate your (需要手動(dòng)配置內(nèi)容)
選擇2和3會要求填寫Apple ID和密碼,輸入正確即可,后期還可以修改
3.安裝蒲公英插件
終端執(zhí)行fastlane add_plugin pgyer,提示成功后即可
注意:
fastlane初始化成功后會生成:fastlane文件夾(包含Appfile、Fastfile兩個(gè)文件)和Gemfile、Gemfile.lock兩個(gè)文件,其中
1.Appfile可配置打包需要的Apple id和team id
2.Fastfile為我們工作的主要文件,用于命令行調(diào)用和處理具體事務(wù)流程
四、項(xiàng)目配置
gym初始化和配置
a. 終端執(zhí)行fastlane gym init,成功后生產(chǎn)Gymfile文件
b. Gymfile文件中寫入IPA包出包路徑:output_directory(“./IPA”)配置Apple ID和Team ID
Appfile中添加Apple ID和Team ID格式如下:
apple_id “xxx@degnity.com”
team_id “W6******3C”
- 配置Fastfile -- 重要(打包代碼都在這里執(zhí)行)
- 自動(dòng)添加設(shè)備到Apple Developer
- 創(chuàng)建一個(gè)由制表符tab分割的文件device.txt,將此文件放在項(xiàng)目目錄下
文件格式如下:
Device ID Device Name
135***********************5be Name
8si***********************8as Name
固定格式不得改變,每行包含一個(gè)設(shè)備號和一個(gè)用戶名,最好將這個(gè)
文本復(fù)制下來或者在官網(wǎng)下載示例文件將里邊的文本復(fù)制下來,再添加到txt文件中,然后修改設(shè)備號和名稱即可
- 增加方法add_devices
lane :add_device do
register_devices(
devices_file: "./devices.txt"
)
#重新下載provisioning profile
get_provisioning_profile
end
- 版本號、構(gòu)建號獲取和自增操作
#獲取構(gòu)建版本號
get_build_number()
#獲取版本號
get_version_number()
#構(gòu)建版本號自增
increment_build_number()
#版本號自增
increment_version_number()
可自定義版本號或構(gòu)建號:
#number為自定義內(nèi)容
increment_build_number(build_number: “#{number}")
- build_app打包配置
#構(gòu)建版本配置
build_app(
#項(xiàng)目路徑 -- 本項(xiàng)目目錄下初始化fastlane時(shí)不需要
project: project_path,
#出包方式:"app-store", "ad-hoc", "package", "enterprise", “development"
export_method: "ad-hoc",
#打包環(huán)境 -- "Release"、"Debug"、自定義等
configuration: "Release",
#需要打包的scheme
scheme: "xxx_Dev",
export_options: {
#配置文件 -- 通過bundle id獲取對應(yīng)的配置文件
provisioningProfiles: {
"com.xxx.xxxtest" => "xxxtest_adHoc",
"com.xxx.xxx" => "xxx_adHoc",
}
}
)
- gym配置
gym(
#打包前clean
clean: "true",
#出包方法 app-store, ad-hoc, package, enterprise, development
export_method: "ad-hoc",
#指定打的哪個(gè)scheme
scheme: “xxxProject_Debug”,
#指定project (未使用cocopods)
project: “xxxx.xcodeproj”,
#指定workspace (使用cocopods)
workspace: “xxxx.xcworkspace”,
#指定構(gòu)建App的配置 Release、Debug、自定義
configuration: “Debug",
#輸出目錄
output_directory: “./IPA",
#輸出名稱
output_name: "測試包"
# include_symbols: "",#是否包含調(diào)試符號
# include_bitcode: ""#是否開啟bitcode
)
- 上傳至蒲公英
pgyer(api_key:"******", user_key:"******",update_description:"更新說明xxxxx")
至此所有打包文件都已配置完成,將這些代碼按需求進(jìn)行組合使用即可
五、學(xué)以致用
目前已完成的功能:
1、找到為止大眾版Dev環(huán)境自動(dòng)打包并上傳至蒲公英
2、找到為止大眾版Release環(huán)境自動(dòng)打包并上傳至蒲公英
3、找到為止簽約版Dev環(huán)境自動(dòng)打包并上傳至蒲公英
4、找到為止簽約版Release環(huán)境自動(dòng)打包并上傳至蒲公英
5、新項(xiàng)目只需添加bundle id和對應(yīng)的配置文件即可使用自動(dòng)打包和上傳功能
將學(xué)習(xí)的fastlane使用到實(shí)際應(yīng)用中,下面是根據(jù)需求完成的一個(gè)完整的打包流程(主要是Fastfile文件的代碼部分):
platform :ios do
lane :update do
puts "\033[35m請輸入更新說明:\033[0m"
pgyer_description = STDIN.gets.chomp()
#構(gòu)建號自增
increment_build_number()
build_app(
#出包方法:app-store, ad-hoc, package, enterprise, development
export_method: "ad-hoc",
#環(huán)境配置
configuration: "FastlaneTest_Debug",
#打包scheme
scheme: "FastlaneTest",
export_options: {
#配置文件 -- 通過bundleid來選擇配置文件
provisioningProfiles: ({
"com.xxxxxxxx.xxxtest" => "xxxxtest_adHoc"
})
}
)
pgyer(api_key:"********", user_key:"********",update_description:pgyer_description)
end
六、寫在最后的話
1、fastlane簡化了項(xiàng)目發(fā)布和測試打包的步驟,對提高工作效率有較大的幫助,而且實(shí)現(xiàn)方法都被開發(fā)者封裝好成了一個(gè)個(gè)實(shí)用的方法,使用者只需要將這些方法進(jìn)行組合和配置即可,簡單方便。
2、學(xué)習(xí)過程中,查看了很多其他開發(fā)者編寫的使用說明,但因?yàn)榕c別人遇到的問題不同或因?yàn)闀r(shí)間太久以前的方法都已失效,導(dǎo)致學(xué)習(xí)中走了一些彎路,最后都是從官方文檔中得到了正確的解決方法,所以學(xué)習(xí)還是需要從官方文檔著手。