iOS自動化打包釋出(fastlane)
一、FastLane介紹
1.1 FastLane是什麼?
FastLane是一種配置iOS和Android自動化Beta部署和釋出的最簡單的方法之一。它可以簡化一些乏味、單調、重複的工作,像截圖、程式碼簽名以及釋出App。
1.2 FastLane使用概覽
你可以從專案工程中建立FastLane檔案開始,在FastLane檔案裡定義了Beta部署或App Store釋出過程,如下:
1.3 FastLane使用優勢
省時:每次將新版本推送到商店或Beta測試服務時,都可節省時間。 |
整合:整合當前開發環境中所有存在的工具和服務。 |
開源:100%基於MIT許可開源。 |
簡單:簡單的設定助手,幾分鐘配置即可使用。
|
執行:基於你的app和資料,執行在本地機器上。 |
CI:整合幾乎所有CI系統。 |
支援:支援iOS、Mac以及Android 應用。 |
自定義:根據自身需要擴充套件和定製fastlane,不依賴任何人。 |
命令列:不需要記住除fastlane以外的任何命令。 |
配置:可以在任何電腦上配置,包括CI伺服器。 |
1.4 FastLane基礎元件
實際上fastlane是一套工具集,包含如下工具:
1) 測試工具
scan:自動執行測試工具,可以生成漂亮的HTML報告
2) 生成證書、配置檔案工具
cert:自動建立iOS程式碼簽名證書(.cert檔案)
sigh:自動建立、更新、下載、修復Provisioning Profile
pem:自動生成、更新推送配置檔案
3) 截圖、描裝置邊框
deliver:上傳截圖、元資料、App到iTunesConnect
snapshot:使用UI test功能實現自動截圖
frameit:在截圖的圖片外層套上物理裝置邊框
4) 自動化編譯工具
gym:自動化編譯工具
5) App公測工具
pilot:管理TestFlight測試使用者,上傳二進位制檔案
firim:管理firim
1.5 FastLane基礎環境
1) Fastlane其實是一個Ruby指令碼的集合,首先檢視是否安裝Ruby
ruby -v
2) 檢測:確保已安裝最新Xcode命令列工具
xcode-select --install
3) 安裝:安裝fastlane命令列
brew cask install fastlane
4) 初始化:進入工程目錄,初始化fastlane
fastlane init
在此過程中,fastlane將會自動檢查你的工程專案,然後提示輸入為輸入資訊及驗證已輸入資訊是否正確。
1.6 FastLane目錄樹
├── Appfile
├── Deliverfile
├── Fastfile
├── Pluginfile
├── README.md
├── Snapfile
├── SnapshotHelper.swift
├── metadata
│ ├── copyright.txt
│ ├── itunes_rating_config.json
│ ├── primary_category.txt
│ ├── primary_first_sub_category.txt
│ ├── primary_second_sub_category.txt
│ ├── review_information
│ ├── secondary_category.txt
│ ├── secondary_first_sub_category.txt
│ ├── secondary_second_sub_category.txt
├── report.xml
├── screenshots
└──README.txt
1.7 FastLane主要檔案說明
1) Fastfile:自動化執行配置檔案
2) Appfile:儲存App公共資訊
3) Deliverfile:儲存App釋出資訊
1.8 FastLane外掛安裝
1) 檢視支援的所有外掛:fastlane search_plugins
2) 安裝外掛:fastlane add_plugin [name]
3) 常用外掛安裝:
fastlane add_plugin versioning(設定App外掛號車間)
fastlane add_plugin firim(設定測試版釋出平臺firim)
二、FastLane抓圖
2.1 FastLane自動抓圖
1) 、App Store螢幕截圖可能是說服潛在使用者下載或購買應用的最重要事情之一。然而,許多app的螢幕截圖做得並不好,因為準備圖片和展示圖片會花費很多時間 。我們主要會基於以下考慮:
App Store展示的截圖是否和最新的app設計一致?
App截圖的本地化語言顯示是否一致?
App截圖不完整是否導致圖片顯示的差異?
螢幕截圖在各種裝置上顯示內容是否存在差異?
對於這些問題,fastlane都可以進行快速的自動化處理,併產生我們所期望的結果。而手動截圖最大的缺點是我們需要在每次釋出app之前不斷的重複相同的流程,或許因為一個拼寫錯誤、一個本地語言的增加或刪除、一個頁面更新等,我們都得從頭再來,真是太可怕了。
2) 、Fastlane在snapshot自動抓取app截圖的過程中,我們可以:
抓取不同裝置、不同語言的截圖。
在抓取截圖的過程中,我們可以省下很多時間做其他事情。
一次完整的配置,可以和其他協同開發成員共享。
生成的所有截圖可以通過網頁展示出來。
3) 、抓取截圖完成後,漂亮的HTML頁面顯示如下所示:
2.2使用UI Tests設定截圖內容
snapshot使用UI Tests功能來抓取App上的圖片。在開始使用UITests時,可以使用UI Test錄製,只需按下Xcode底部的紅色按鈕。這是,xcode將會記錄下你的操作程式碼。實際操作步驟如下:
1) 在xcode工程中建立一個新的UI測試目標。
2) 在工程目錄下執行:fastlane snapshot init。
3) 將生成的./SnapshotHelper.swift檔案新增到UI測試檔案目錄下。
4) 新增橋接標頭檔案到我們的測試類中(只適用於OC程式碼)。
5) 在UI測試類中,按下錄製按鈕開始錄製我們的互動操作。
6) 在UI測試類需要截圖的地方新增程式碼:
Swift:snapshot(“01LoginScreen”);
OC:[Snapshotsnapshot:@”01LoginScreen” waitForLoadingIndicatore:YES];
7) 在setup()函式中新增如下程式碼:
swift:letapp = XCUIApplication()
setupSnapshot(app)
app.lanuch()
oc:XCUIAppication*app = [[XCUIApplication alloc] init];
[Snapshot setupSnapshot:app];
[app launch];
8) 在執行setup()函式過程中,將生成一個名為Snapfile的檔案,這個檔案在執行fastlane snapshot命令的時候將會被載入,內容如下所示:
# A list of devices you want totake the screenshots from
# devices([
# "iPhone 6",
# "iPhone 6 Plus",
# "iPhone 5",
# "iPhone 4s",
# "iPad Retina",
# "iPad Pro"
# ])
languages([
"en-US",
"de-DE"
])
… …
注:如果沒有生成Snapfile檔案,使用命令列$ fastlane snapshot init
生成。
9)
如果已經安裝fastlane,我們可以很容易的通過snapshot截圖。
fastlane snapshot
2.3上傳截圖到App Store
使用fastlanesnapshot生成截圖後,我們就開始上傳圖片到iTunes Connect。安裝fastlane並且在工程根目錄下執行snapshot init命令,我們會在工程根目錄下看到fastlane/screenshots和fastlane/metadata目錄。我們擷取的圖片就儲存在fastlane/screenshots中。
上傳截圖很簡單,只需要執行:
fastlane deliver
2.4使用Fastfile檔案實現自動化
如果我們將上面的分步操作組合在一起執行,那麼在開發團隊中的任何人都可以上傳新的截圖,而通過對Fastfile檔案的配置幫助我們實現了這一點,配置如下:
lane :screenshots do
snapshot
deliver
end
2.5為我們的截圖加上物理裝置邊框
frameit將幫助我們為App截圖構建漂亮的裝置邊框,只需要執行命令:
fastlane frameit
在此不在詳述具體過程,效果如下(相當漂亮):
三、Adhoc打包及公測部署
3.1構建App
fastlane通過gym來構建app,需要在fastfile中新增:
lane :beta do
gym(scheme: “MyApp”)
end
然後執行:fastlanebeta,我們在當前目錄下將會看到[ProductName].ipa檔案。
3.2上傳app到TestFlight
在編譯打包完成後,我們就可以上傳測試版本到測試伺服器上了,這時修改3.1中的配置為:
lane :beta do
match(type: “appstore”)
gym(scheme:”MyApp”)
testflight
slack(message: “成功上傳測試版到testflight”)
end
3.3上傳app到firim
開啟Fastfile檔案,新增如下內容:
lane :upload_firim do
sigh(adhoc: true)#
申請
adhoc證書
increment_build_number_in_plist(target: [target_name])
increment_version_number_in_plist(
target: [target_name],
version_number: '7.1.3'
)
gym(
#gym用於編譯ipa
output_directory: './firim',
export_options: {
method: "ad-hoc", #
預設
,
可以不指定
thinning: "<none>"
}
)
firim(firim_api_token: [firim_api_token])
#上傳ipa到fir.im伺服器
end
輸入命令:fastlaneupload_firim一鍵上傳。
四、AppStore打包及公測部署
4.1構建App
fastlane通過gym來構建app,需要在fastfile中新增:
lane :appstore do
gym(scheme: “MyApp”)
end
然後執行:fastlaneappstore,我們在當前目錄下將會看到[ProductName].ipa檔案。
4.2上傳app到iTunes Connect
在編譯打包完成後,我們就可以上傳測試版本到測試伺服器上了,這時修改4.1中的配置為:
lane :appstore do
sigh
increment_build_number_in_plist(target: [target_name])
increment_version_number_in_plist(
target: [target_name],
version_number: '7.1.3'
)
gym(# 指定輸出目錄
output_directory: './build',
)
deliver(force: true) # 上傳所有資訊到App Store
end
輸入命令:fastlaneappstore一鍵上傳。