iOS自動(dòng)化打包發(fā)布(fastlane)

一、FastLane介紹

1.1 FastLane是什么蒂秘?

FastLane是一種配置iOS和Android自動(dòng)化Beta部署和發(fā)布的最簡(jiǎn)單的方法之一。它可以簡(jiǎn)化一些乏味、單調(diào)阻问、重復(fù)的工作,像截圖沦疾、代碼簽名以及發(fā)布App称近。

1.2FastLane使用概覽?

你可以從項(xiàng)目工程中創(chuàng)建FastLane文件開始哮塞,在FastLane文件里定義了Beta部署或App Store發(fā)布過(guò)程刨秆,如下:

1.3?FastLane使用優(yōu)勢(shì)

省時(shí):每次將新版本推送到商店或Beta測(cè)試服務(wù)時(shí),都可節(jié)省時(shí)間忆畅。

集成:集成當(dāng)前開發(fā)環(huán)境中所有存在的工具和服務(wù)衡未。

開源:100%基于MIT許可開源。

簡(jiǎn)單:簡(jiǎn)單的設(shè)置助手,幾分鐘配置即可使用缓醋。

運(yùn)行:基于你的app和數(shù)據(jù)如失,運(yùn)行在本地機(jī)器上。

CI:集成幾乎所有CI系統(tǒng)送粱。

支持:支持iOS褪贵、Mac以及Android 應(yīng)用。

自定義:根據(jù)自身需要擴(kuò)展和定制fastlane葫督,不依賴任何人竭鞍。

命令行:不需要記住除fastlane以外的任何命令。

配置:可以在任何電腦上配置橄镜,包括CI服務(wù)器偎快。

1.4 FastLane基礎(chǔ)組件

實(shí)際上fastlane是一套工具集,包含如下工具:

1)?測(cè)試工具

scan:自動(dòng)運(yùn)行測(cè)試工具洽胶,可以生成漂亮的HTML報(bào)告

2)?生成證書晒夹、配置文件工具

cert:自動(dòng)創(chuàng)建iOS代碼簽名證書(.cert文件)

sigh:自動(dòng)創(chuàng)建、更新姊氓、下載丐怯、修復(fù)Provisioning Profile

pem:自動(dòng)生成、更新推送配置文件

3)?截圖翔横、描設(shè)備邊框

deliver:上傳截圖读跷、元數(shù)據(jù)、App到iTunesConnect

snapshot:使用UI test功能實(shí)現(xiàn)自動(dòng)截圖

frameit:在截圖的圖片外層套上物理設(shè)備邊框

4)?自動(dòng)化編譯工具

gym:自動(dòng)化編譯工具

5)?App公測(cè)工具

pilot:管理TestFlight測(cè)試用戶禾唁,上傳二進(jìn)制文件

firim:管理firim

1.5 FastLane基礎(chǔ)環(huán)境

1)?Fastlane其實(shí)是一個(gè)Ruby腳本的集合效览,首先查看是否安裝Ruby

ruby -v

2)?檢測(cè):確保已安裝最新Xcode命令行工具

xcode-select? --install

3)?安裝:安裝fastlane命令行

brew cask install fastlane

4)?初始化:進(jìn)入工程目錄,初始化fastlane

fastlane init

在此過(guò)程中荡短,fastlane將會(huì)自動(dòng)檢查你的工程項(xiàng)目丐枉,然后提示輸入為輸入信息及驗(yàn)證已輸入信息是否正確。

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主要文件說(shuō)明

1)?Fastfile:自動(dòng)化執(zhí)行配置文件

2)?Appfile:存儲(chǔ)App公共信息

3)?Deliverfile:存儲(chǔ)App發(fā)布信息

1.8 FastLane插件安裝

1)?查看支持的所有插件:fastlane search_plugins

2)?安裝插件:fastlane add_plugin [name]

3)?常用插件安裝:

fastlane add_plugin versioning(設(shè)置App插件號(hào)車間)

fastlane add_plugin firim(設(shè)置測(cè)試版發(fā)布平臺(tái)firim)

二掘托、FastLane抓圖

2.1 FastLane自動(dòng)抓圖

1)?瘦锹、App Store屏幕截圖可能是說(shuō)服潛在用戶下載或購(gòu)買應(yīng)用的最重要事情之一。然而闪盔,許多app的屏幕截圖做得并不好弯院,因?yàn)闇?zhǔn)備圖片和展示圖片會(huì)花費(fèi)很多時(shí)間 。我們主要會(huì)基于以下考慮:

App Store展示的截圖是否和最新的app設(shè)計(jì)一致泪掀?

App截圖的本地化語(yǔ)言顯示是否一致听绳?

App截圖不完整是否導(dǎo)致圖片顯示的差異?

屏幕截圖在各種設(shè)備上顯示內(nèi)容是否存在差異族淮?

對(duì)于這些問(wèn)題,fastlane都可以進(jìn)行快速的自動(dòng)化處理,并產(chǎn)生我們所期望的結(jié)果祝辣。而手動(dòng)截圖最大的缺點(diǎn)是我們需要在每次發(fā)布app之前不斷的重復(fù)相同的流程贴妻,或許因?yàn)橐粋€(gè)拼寫錯(cuò)誤、一個(gè)本地語(yǔ)言的增加或刪除蝙斜、一個(gè)頁(yè)面更新等名惩,我們都得從頭再來(lái),真是太可怕了孕荠。

2)?娩鹉、Fastlane在snapshot自動(dòng)抓取app截圖的過(guò)程中,我們可以:

抓取不同設(shè)備稚伍、不同語(yǔ)言的截圖弯予。

在抓取截圖的過(guò)程中,我們可以省下很多時(shí)間做其他事情个曙。

一次完整的配置锈嫩,可以和其他協(xié)同開發(fā)成員共享。

生成的所有截圖可以通過(guò)網(wǎng)頁(yè)展示出來(lái)垦搬。

3)?呼寸、抓取截圖完成后,漂亮的HTML頁(yè)面顯示如下所示:

2.2使用UI Tests設(shè)置截圖內(nèi)容

snapshot使用UI Tests功能來(lái)抓取App上的圖片猴贰。在開始使用UITests時(shí)对雪,可以使用UI Test錄制,只需按下Xcode底部的紅色按鈕米绕。這是瑟捣,xcode將會(huì)記錄下你的操作代碼。實(shí)際操作步驟如下:

1)?在xcode工程中創(chuàng)建一個(gè)新的UI測(cè)試目標(biāo)义郑。

2)?在工程目錄下運(yùn)行:fastlane snapshot init蝶柿。

3)?將生成的./SnapshotHelper.swift文件添加到UI測(cè)試文件目錄下。

4)?添加橋接頭文件到我們的測(cè)試類中(只適用于OC代碼)非驮。

5)?在UI測(cè)試類中交汤,按下錄制按鈕開始錄制我們的交互操作。

6)?在UI測(cè)試類需要截圖的地方添加代碼:

Swift:snapshot(“01LoginScreen”);

OC:[Snapshotsnapshot:@”01LoginScreen” waitForLoadingIndicatore:YES];

7)?在setup()函數(shù)中添加如下代碼:

swift:letapp = XCUIApplication()

setupSnapshot(app)

app.lanuch()

oc:XCUIAppication*app = [[XCUIApplication alloc] init];

[Snapshot setupSnapshot:app];

[app launch];

8)?在運(yùn)行setup()函數(shù)過(guò)程中劫笙,將生成一個(gè)名為Snapfile的文件芙扎,這個(gè)文件在運(yùn)行fastlane snapshot命令的時(shí)候?qū)?huì)被加載,內(nèi)容如下所示:

# 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"

])

… …

注:如果沒(méi)有生成Snapfile文件填大,使用命令行$ fastlane snapshot init生成戒洼。

9)如果已經(jīng)安裝fastlane,我們可以很容易的通過(guò)snapshot截圖允华。

fastlane snapshot

2.3上傳截圖到App Store

使用fastlanesnapshot生成截圖后圈浇,我們就開始上傳圖片到iTunes Connect寥掐。安裝fastlane并且在工程根目錄下運(yùn)行snapshot init命令,我們會(huì)在工程根目錄下看到fastlane/screenshots和fastlane/metadata目錄磷蜀。我們截取的圖片就保存在fastlane/screenshots中召耘。

上傳截圖很簡(jiǎn)單,只需要運(yùn)行:

fastlane deliver

2.4使用Fastfile文件實(shí)現(xiàn)自動(dòng)化

如果我們將上面的分步操作組合在一起執(zhí)行褐隆,那么在開發(fā)團(tuán)隊(duì)中的任何人都可以上傳新的截圖污它,而通過(guò)對(duì)Fastfile文件的配置幫助我們實(shí)現(xiàn)了這一點(diǎn),配置如下:

lane :screenshots do

snapshot

deliver

end

2.5為我們的截圖加上物理設(shè)備邊框

frameit將幫助我們?yōu)锳pp截圖構(gòu)建漂亮的設(shè)備邊框庶弃,只需要運(yùn)行命令:

fastlane frameit

在此不在詳述具體過(guò)程衫贬,效果如下(相當(dāng)漂亮):

三、Adhoc打包及公測(cè)部署

3.1構(gòu)建App

fastlane通過(guò)gym來(lái)構(gòu)建app歇攻,需要在fastfile中添加:

lane :beta do

gym(scheme: “MyApp”)

end

然后運(yùn)行:fastlanebeta固惯,我們?cè)诋?dāng)前目錄下將會(huì)看到[ProductName].ipa文件。

3.2上傳app到TestFlight

在編譯打包完成后掉伏,我們就可以上傳測(cè)試版本到測(cè)試服務(wù)器上了缝呕,這時(shí)修改3.1中的配置為:

lane :beta do

match(type: “appstore”)

gym(scheme:”MyApp”)

testflight

slack(message: “成功上傳測(cè)試版到testflight”)

end

3.3上傳app到firim

打開Fastfile文件,添加如下內(nèi)容:

lane :upload_firim do

sigh(adhoc: true)#申請(qǐng)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", #默認(rèn),可以不指定

thinning: ""

}

)

firim(firim_api_token: [firim_api_token])#上傳ipa到fir.im服務(wù)器

end

輸入命令:fastlaneupload_firim一鍵上傳斧散。

四供常、AppStore打包及公測(cè)部署

4.1構(gòu)建App

fastlane通過(guò)gym來(lái)構(gòu)建app,需要在fastfile中添加:

lane :appstore do

gym(scheme: “MyApp”)

end

然后運(yùn)行:fastlaneappstore鸡捐,我們?cè)诋?dāng)前目錄下將會(huì)看到[ProductName].ipa文件栈暇。

4.2上傳app到iTunes Connect

在編譯打包完成后,我們就可以上傳測(cè)試版本到測(cè)試服務(wù)器上了箍镜,這時(shí)修改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一鍵上傳源祈。

轉(zhuǎn)載來(lái)自:http://blog.csdn.net/cdut100/article/details/76381605

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市色迂,隨后出現(xiàn)的幾起案子香缺,更是在濱河造成了極大的恐慌,老刑警劉巖歇僧,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图张,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诈悍,警方通過(guò)查閱死者的電腦和手機(jī)祸轮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)侥钳,“玉大人适袜,你說(shuō)我怎么就攤上這事∠隙幔” “怎么了苦酱?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵售貌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疫萤,道長(zhǎng)趁矾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任给僵,我火速辦了婚禮,結(jié)果婚禮上详拙,老公的妹妹穿的比我還像新娘蹲诀。我一直安慰自己脯爪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著塔次,像睡著了一般。 火紅的嫁衣襯著肌膚如雪继榆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天羔砾,我揣著相機(jī)與錄音,去河邊找鬼趾访。 笑死愤诱,一個(gè)胖子當(dāng)著我的面吹牛溃槐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鲜棠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吵护!你這毒婦竟也來(lái)了祥诽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤阔挠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哼审,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年芹枷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了喧伞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潘鲫。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡挪圾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哲思,到底是詐尸還是另有隱情洼畅,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布棚赔,位于F島的核電站帝簇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏靠益。R本人自食惡果不足惜丧肴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胧后。 院中可真熱鬧芋浮,春花似錦、人聲如沸壳快。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)眶痰。三九已至瘤旨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竖伯,已是汗流浹背存哲。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留七婴,地道東北人祟偷。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像打厘,于是被迫代替她去往敵國(guó)和親肩袍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容