1. 程式人生 > >iOS自動化打包釋出(fastlane)

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一鍵上傳。