iOS使用fastlane一鍵打包審核

前言:一直有聽過腳本一鍵打包審核门怪,但是自己一直沒在意骡澈。在微信公眾號看到ios一鍵打包的文章锅纺,突然想想自己每次從打包到提交審核(大約都是30分鐘)。自己浪費了多少時間袄吲埂囤锉!

腳本打包方式有很多,我看中了fastlane(ios护锤,Android都支持)官地,github地址:
https://github.com/fastlane/fastlane 文檔地址:https://docs.fastlane.tools/
原因是看了星星:21201多星星。3247個fork烙懦,所以大量的開發(fā)者信任并一起維護他驱入。

搬運:http://www.code4app.com/home.php?mod=space&uid=363485&do=blog&quickforward=1&id=1856
并自己添加遇到的問題,并解決氯析。(原文章作者用了3天的時間搞清楚亏较,我用了1天理解了作者的做法,作者的教程有挺多問題 沒有指出說明掩缓,所以我還浪費了1天去解決所謂不清楚的問題)雪情。

相信您能通過此篇快速一鍵打包審核。

搬運你辣,完善巡通,整理。

安裝:

Installing fastlane

Make sure you have the latest version of the Xcode command line tools installed:

xcode-select --install

Install fastlane using

sudo gem install -n /usr/local/bin fastlane 

or alternatively using brew cask install fastlane

Navigate to your project directory and run

fastlane init

end

安裝后具體使用:
我們在日常開發(fā)中經(jīng)常會遇到如下問題

  1. 團隊成員一不小心Revoke了證書導致所有的開發(fā)小伙伴需要重新下載證書

  2. 每次提交App Store審核需要重復【修改證書】- 【打包】-【iTunes Connect】- 【發(fā)布】等一系列動作

真的是不厭其煩舍哄,讓人抓狂宴凉。這個時候,幸好Fastlane來了表悬,看他怎么來拯救我們吧跪解。在開始我們的教程之前,筆者先做個澄清,fastlane不是什么:

  • fastlane 不是一個工具叉讥,而是一系列工具的集合窘行。比如match工具能管理證書,deliver能提交APPStore審核图仓。所以我們在使用fastlane的時候更多的是和它的工具集打交道罐盔。

  • fastlane內(nèi)部的工具不是新寫的,而是調(diào)用mac本身的命令救崔,只不過是實現(xiàn)了自動化而已惶看。比如gym工具只是xcodebuild工具的一個封裝,如果你會xcodebuild六孵,那gym對你來說小菜一碟纬黎。

  • fastlane本身沒有一套特殊語法,使用的Ruby語言劫窒,相信使用過cocoapods的同學應該很容易上手本今。

安裝完fastlane并調(diào)用fastlane init后,目錄結(jié)構大概如下所示:

fastlane初始化

具體的安裝和初始化主巍,本文稍后會詳細講述冠息,先帶大家分析一下安裝后的fastlane的目錄結(jié)構。紅色區(qū)域就是多出來的文件孕索。本項目是筆者的一個APP Store上線項目逛艰,大家可以點擊這里獲取。

  • Gemfile 告訴我們fastlane 依賴的gem以及版本等其他信息搞旭。這個跟本文主題不大散怖,筆者就不詳細描述了

  • fastlane文件夾里的Appfile看文件也知道,里面是關于本App的信息的肄渗;Fastfile則是fastlane的最主要的文件镇眷,在這個文件中可以編寫我們需要使用的各個工具的順序、方式等恳啥。

這里我們先看一個已經(jīng)寫好的fastlane的內(nèi)容:

default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  lane :custom_lane do
    # add actions here: https://docs.fastlane.tools/actions
    match(
        git_url: "https://github.com/zjh171/fastlaneProvingProfile",
        type: "appstore" ,
        readonly: true
        )
    gym(
        scheme:"Wallpaper",
        export_method:"app-store",
        output_directory:"./build",
        archive_path:"./Archive"
        )
  end
end

這里我們只需要關注 match 和gym這兩個工具以及括號后的內(nèi)容偏灿。match工具是我們本文開頭描述的用于同步開發(fā)小伙伴證書的工具,而gym則是xcodebuild工具的封裝钝的,它指定了打包的目錄以及打包的類型翁垂。保存該文件并執(zhí)行fastlane custom_lane后我們可看到

生成App Store包

這就表明我們打的App Store包已經(jīng)生成了。目錄就是我們指定的output_directory對應的目錄硝桩。當然大家也不難猜想到沿猜,如果要讓fastlane實現(xiàn)自動提交到App Store審核,還需要在gym后面加上我們需要的工具碗脊。這里先賣個關子啼肩,稍后告訴大家。下面筆者就詳細的介紹一下fastlane的使用。

安裝

執(zhí)行命令sudo gem install fastlane --verbose即可祈坠,安裝完成后檢查一下是否安裝成功輸入fastlane --version看是否有版本號顯示害碾。

fix:出現(xiàn)錯誤
ERROR:  While executing gem ... (Errno::EPERM)
    Operation not permitted - /usr/bin/commander

OS 10后沒權限,so改執(zhí)行

sudo gem install -n /usr/local/bin fastlane

初始化

輸入命令fastlane init會看到如下選項

What would you like to use fastlane for?
1\. Automate screenshots
2\. Automate beta distribution to TestFlight
3\. Automate App Store distribution
4\. Manual setup - manually setup your project to automate your tasks

這四個選項的意思是

  1. 自動截屏赦拘。這個功能能幫我們自動截取APP中的截圖慌随,并添加手機邊框(如果需要的話),我們這里不選擇這個選項躺同,因為我們的項目已經(jīng)有圖片了阁猜,不需要這里截屏。

  2. 自動發(fā)布beta版本用于TestFlight蹋艺,如果大家有對TestFlight不了解的剃袍,可以參考王巍寫的這篇文章

  3. 自動的App Store發(fā)布包。我們的目標是要提交審核到APP Store捎谨,按道理應該選這個民效,但這里我們先不選,因為選擇了以后會需要輸入用戶名密碼侍芝,以及下載meta信息研铆,需要花費一定時間埋同,這些數(shù)據(jù)我們可以后期進行配置州叠。

  4. 手動設置。

選擇第四個后一路回車即可凶赁,我們會看到生成了我們熟悉的fastlane目錄咧栗,該目錄下包含了Appfile和Fastfile。我們打開這兩個文件虱肄。
Appfile

# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app
# apple_id("[[APPLE_ID]]") # Your Apple email address

# For more information about the Appfile, see:
#     https://docs.fastlane.tools/advanced/#appfile

發(fā)現(xiàn)里面沒有任何信息(“#”在ruby里是注釋致板,所以里面沒有任何信息)注釋的部分中,app_identifier用于指定APP的bundle id咏窿,apple_id指的是你的AppleID斟或。

Fastfile

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
default_platform(:ios)
platform :ios do
  desc "Description of what the lane does"
  lane :custom_lane do
    # add actions here: https://docs.fastlane.tools/actions
  end
end

這個文件的信息稍微多一點,而且我們也更熟悉了集嵌,語法跟cocoapods很像萝挤,而且我們在文章開頭已經(jīng)稍微做了一些介紹,發(fā)現(xiàn)在lane :custom_lane do后面是空的根欧。其實意思也就是說怜珍,這里任何操作都沒有執(zhí)行。

fix:出現(xiàn)錯誤 在如下卡住
[14:50:58]: $ bundle update

RubyGems 一直以來在國內(nèi)都非常難訪問到凤粗,在本地你或許可以翻墻酥泛,當你要發(fā)布上線的時候,你就很難搞了!
這是一個完整 RubyGems 鏡像柔袁,你可以用此代替官方版本呆躲,我們是完全基于 CDN 技術來實現(xiàn),能確保幾乎無延遲的同步捶索。
前往: https://gems.ruby-china.com 更換源

$ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
$ gem sources -l
https://gems.ruby-china.com
# 確保只有 gems.ruby-china.com

運行

雖然這是個什么都沒有做的fastlane項目歼秽,但其實我們可以運行了,執(zhí)行
fastlane custom_lane命令情组,我們可以看到如下輸出

fastlane detected a Gemfile in the current directory however it seems like you don't use `bundle exec` to launch fastlane faster, please use
 $ bundle exec fastlane custom_lane
//此處省略多行
fastlane.tools finished successfully

大致意思就是燥筷,我們可以使用命令bundle exec fastlane custom_lane代替fastlane custom_lane,這樣會執(zhí)行的更快院崇。最后的fastlane.tools finished successfully表示執(zhí)行成功了肆氓。

打包

提交審核的前一步是打包,也是最主要的一步fastlane中有專門用于編譯底瓣、打包的命令gym谢揪,我們加到lane :custom_lane do后看看會不會有問題。

添加gym工具

然后執(zhí)行fastlane custom_lane我們會收到如下提示

Select Scheme:
1\. Wallpaper
2\. AFNetworking
3\. Mangogo
4\. Masonry
5\. MJRefresh
6\. Pods-Wallpaper
?

毫無疑問我們選擇1捐凭,其他的都是我們調(diào)用的三方庫拨扶。但聰明的讀者肯定在想,這個Scheme是否能在fastlane文件中就設置好茁肠,省的這里在自己選擇患民。是的,這就是文章開頭提到的

gym(
    scheme:"Wallpaper",
    export_method:"app-store",
    output_directory:"./build",
    archive_path:"./Archive"
    )

scheme:"Wallpaper",的含義垦梆。其他的參數(shù)也就不一一贅述了匹颤。讀到這里,相信大部分讀者已經(jīng)對fastlane的原理一清二楚了托猩。其實所謂的會用fastlane也就是會用里面的各種工具而已印蓖。我相信大家選完Scheme后還沒到打包這一步,應該已經(jīng)出現(xiàn)了錯誤提示京腥,錯誤應該就是大家都非常熟悉的證書問題赦肃;當然,如果讀者夠僥幸公浪,證書已經(jīng)設置好了他宛,并將output_directoryarchive_path設置好了因悲,那就能生成對應的對應的IPA包堕汞。但相信成功的讀者應該寥寥無幾,這個時候就要使出我們的大殺器match

fix:出現(xiàn)錯誤

fastlane gym produces error: method `to_plist' not defined in Array #11503

可以參考:
https://github.com/fastlane/fastlane/issues/11503

方法終端命令:

1晃琳、rvm @global do uninstall fastlane
2讯检、`gem install fastlane`

我測試過第二步執(zhí)行完就可以了.
3琐鲁、`rvm @global do gem install fastlane`
4、rvm @global do fastlane action gym
5人灼、`rvm @global do gem uninstall fastlane `
`rvm all do gem uninstall fastlane`
**`gem uninstall fastlane`**
6围段、*`gem install fastlane`*

證書管理

match:詳情教程:https://docs.microsoft.com/zh-cn/xamarin/ios/deploy-test/provisioning/fastlane/match#using

fastlane中能管理證書和簽名的工具其實還有sigh以及cer,那為何筆者要給大家推薦match呢投放,原因已經(jīng)在文章開頭指出了奈泪,對于多人開發(fā)時出現(xiàn)的證書錯亂問題match可以很好的處理。它將開發(fā)人員的證書提交到一個git倉庫進行集中處理灸芳,在有新的成員加入開發(fā)時候涝桅,只需要運行一兩條命令。下面我就詳細講一下其實現(xiàn)過程吧:

1.創(chuàng)建一個倉庫(空倉庫或者現(xiàn)有倉庫都可以烙样,但建議大家使用一個空倉庫專門處理證書)冯遂,這里筆者的倉庫地址是:https://github.com/zjh171/fastlaneProvingProfile
2.在終端運行fastlane match init可以看到需要我們輸入giturl地址,我們將地址拷進來即可谒获。

添加

輸入地址后我們會看到如下提示

You can now run `fastlane match development`, `fastlane match adhoc`, `fastlane match enterprise` and `fastlane match appstore

我們按照提示生成developmentApp Store證書蛤肌,然后會在Xcode中發(fā)現(xiàn)生成的證書以及Provision Profile文件。我們在Xcode中設置好即可批狱。

設置證書

接下來裸准,我們將match添加到fastlane文件中,如下

fastlane文件

當然赔硫,這個文件我們已經(jīng)在文章開頭看過了炒俱,是不是再次感覺豁然開朗∝酝#回到命令行向胡,我們再次執(zhí)行fastlane custom_lane發(fā)現(xiàn)我們可愛的IPA包已經(jīng)打包完畢恼蓬。

fix:出現(xiàn)錯誤

[!] No matching provisioning profiles found and can not create a new one because you enabled readonly. Check the output above for more information.
解決:
選擇工程里面的PROJECT------->build Settings --------->搜索bundleID惊完,然后修改Product Bundle Identifier 的值為你工程的bundleID即可!

提交App Store審核

終于到了最令人激動的提交App Store時刻了处硬。我們要使用的工具是deliver小槐。聰明的你應該已經(jīng)知道,第一步肯定是要調(diào)用fastlane deliver init荷辕,這里會讓我們輸入APPle ID,輸入以后就看到我們的項目文件夾發(fā)生了變化:

fastlane deliver init

接著凿跳,我們修改一下fastfile文件,添加deliver疮方,因此我們最終版的fastlane文件是這樣的:

lane :release do
        # 增加build版本號
      increment_build_number
      match(
        git_url: "https://github.com/zjh171/fastlaneProvingProfile",
        type: "appstore" ,#can be appstore,adhoc, development,enterprise
        app_identifier:"cn.kyson.wallpaper",
        username:"zjh171@qq.com",
        readonly: true
        )
      # 編譯代碼
    gym(
        scheme:"Wallpaper",
        export_method:"app-store",
        )
    # 發(fā)布到Apple Store
    deliver
  end

可以看到控嗜,大部分配置跟以前一樣,只做了lane名的改變骡显,還有添加了increment_build_number這一行疆栏。increment_build_number的作用是防止本地版本的build號比App Store(或上次)低而做的自動增長版本號的處理曾掂。當然加了這幾句還需要在Xcode中做相應處理:

image

最后在命令行中輸入fastlane release,等待大概十幾分鐘就可以看到成功的提示了壁顶。然后我們進入iTunes Connect珠洗,確認一下:

待審核樣式

確實是已經(jīng)在審核狀態(tài)。如果大家想實現(xiàn)“一鍵審核”可以給deliver帶上參數(shù)submit_for_review若专。這樣就真正實現(xiàn)了一鍵提交App Store審核许蓖。至此,我們的一鍵打包審核流程完美收工调衰。

注意點

筆者從開始研究fastlane到完全跑出來大概花了三天時間膊爪,期間遇到了很多問題,走了很多彎路嚎莉,總結(jié)一下蚁飒,希望對讀者有一定幫助

  • fastlane的初始化命令是fastlane init,不需要加root權限萝喘,也就是sudo fastlane init是不需要的淮逻,如果使用了sudo會對后面的各個操作造成很大影響,比如項目文件(workspace后project文件)會鎖定不能操作阁簸,還會引起打包失敗

  • 很多剛接觸fastlane的同學會一不注意就被fastlane上的各種命令整的暈頭轉(zhuǎn)向爬早,例如sync_code_signing命令,其實是match命令的另外一種寫法启妹;build_app命令其實是gym的別名筛严。因此大家在學習fastlane的時候只需要學習本文介紹的命令,大部分情況下已經(jīng)夠用饶米。如果對一個命令的用法不熟悉桨啃,可以通過fastlane action查找,例如fastlane action match檬输。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末照瘾,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丧慈,更是在濱河造成了極大的恐慌析命,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逃默,死亡現(xiàn)場離奇詭異鹃愤,居然都是意外死亡,警方通過查閱死者的電腦和手機完域,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門软吐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吟税,你說我怎么就攤上這事凹耙∧裥罚” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵使兔,是天一觀的道長建钥。 經(jīng)常有香客問我,道長虐沥,這世上最難降的妖魔是什么熊经? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮欲险,結(jié)果婚禮上镐依,老公的妹妹穿的比我還像新娘。我一直安慰自己天试,他們只是感情好槐壳,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著喜每,像睡著了一般务唐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上带兜,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天枫笛,我揣著相機與錄音,去河邊找鬼刚照。 笑死刑巧,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的无畔。 我是一名探鬼主播啊楚,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浑彰!你這毒婦竟也來了恭理?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤闸昨,失蹤者是張志新(化名)和其女友劉穎蚯斯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饵较,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年遭赂,在試婚紗的時候發(fā)現(xiàn)自己被綠了循诉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡撇他,死狀恐怖茄猫,靈堂內(nèi)的尸體忽然破棺而出狈蚤,到底是詐尸還是另有隱情,我是刑警寧澤划纽,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布脆侮,位于F島的核電站,受9級特大地震影響勇劣,放射性物質(zhì)發(fā)生泄漏靖避。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一比默、第九天 我趴在偏房一處隱蔽的房頂上張望幻捏。 院中可真熱鬧,春花似錦命咐、人聲如沸篡九。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榛臼。三九已至,卻和暖如春窜司,著一層夾襖步出監(jiān)牢的瞬間讽坏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工例证, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留路呜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓织咧,卻偏偏與公主長得像胀葱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笙蒙,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

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