前言:一直有聽過腳本一鍵打包審核门怪,但是自己一直沒在意骡澈。在微信公眾號看到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)常會遇到如下問題
團隊成員一不小心Revoke了證書導致所有的開發(fā)小伙伴需要重新下載證書
每次提交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的目錄結(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包已經(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
這四個選項的意思是
自動截屏赦拘。這個功能能幫我們自動截取APP中的截圖慌随,并添加手機邊框(如果需要的話),我們這里不選擇這個選項躺同,因為我們的項目已經(jīng)有圖片了阁猜,不需要這里截屏。
自動發(fā)布beta版本用于TestFlight蹋艺,如果大家有對TestFlight不了解的剃袍,可以參考王巍寫的這篇文章
自動的App Store發(fā)布包。我們的目標是要提交審核到APP Store捎谨,按道理應該選這個民效,但這里我們先不選,因為選擇了以后會需要輸入用戶名密碼侍芝,以及下載meta信息研铆,需要花費一定時間埋同,這些數(shù)據(jù)我們可以后期進行配置州叠。
手動設置。
選擇第四個后一路回車即可凶赁,我們會看到生成了我們熟悉的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
后看看會不會有問題。
然后執(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_directory
、archive_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
我們按照提示生成development
和App Store
證書蛤肌,然后會在Xcode中發(fā)現(xiàn)生成的證書以及Provision Profile
文件。我們在Xcode中設置好即可批狱。
接下來裸准,我們將match添加到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ā)生了變化:
接著凿跳,我們修改一下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中做相應處理:
最后在命令行中輸入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
檬输。