iOS自動化打包發布(fastlane)

一、FastLane介紹

1.1 FastLane是什么?

FastLane是一種配置iOS和Android自動化Beta部署和發布的最簡單的方法之一。它可以簡化一些乏味、單調、重復的工作,像截圖、代碼簽名以及發布App。

1.2FastLane使用概覽?

你可以從項目工程中創建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: ""

}

)

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

轉載來自:http://blog.csdn.net/cdut100/article/details/76381605

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容