iOS- 一鍵自動(dòng)打包發(fā)布到Fir和AppStore

特別說(shuō)明:如果項(xiàng)目沒(méi)有采用Cocoapods管理,沒(méi)有.xcworkspace,只有xcodeproj;只需要將腳本中這句

xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \ 

這句替換成下面這樣就ok了

xcodebuild \
archive -project ${project_path}/${project_name}.xcodeproj \

日常編譯打包工作主要是以下兩個(gè)目的:

  • 提交測(cè)試版本ipa給測(cè)試人員
    配置好測(cè)試描述文件先较,然后Product -> Archive編譯打包,選擇Organizer,導(dǎo)出ad hoc 的 ipa 包陈辱。再上傳到Fir等第三方平臺(tái)上,然后通知測(cè)試同事進(jìn)行測(cè)試顾犹。整個(gè)流程下來(lái)需要人工監(jiān)守操作比較耗費(fèi)時(shí)間。
  • 提交ipa包到App Store已供審核
    配置好正式的描述文件褒墨,然后同樣的方式打包導(dǎo)出app store 的 ipa 包炫刷。通過(guò)Application Loader 等方式提交到App store等待蘋果處理二進(jìn)制包,處理完后選擇構(gòu)建版本郁妈,最后提交等待蘋果審核柬唯。

無(wú)論打測(cè)試包提供測(cè)試人員測(cè)試還是打正式包上傳到App strore,整個(gè)過(guò)程都是重復(fù)耗費(fèi)人工的操作圃庭,需要人工等待锄奢,然后各種點(diǎn)擊選擇...我們可以通過(guò)編寫腳本語(yǔ)言來(lái)實(shí)現(xiàn)整個(gè)過(guò)程。

配置自動(dòng)打包發(fā)布的流程

通過(guò)下面幾步的設(shè)置好之后剧腻,以后再進(jìn)行打包發(fā)布到第三方平臺(tái)或者App Store 只需要一步就能搞定了(一個(gè)回車搞定)

筆者通過(guò)shell腳本實(shí)現(xiàn)從archive->生成ipa->上傳到第三方平臺(tái)(Fir.im 拘央、蒲公英)或 App store。通過(guò)下面幾步即可實(shí)現(xiàn)自動(dòng)打包上傳功能书在。

  • 下載Shell腳本
  • 將archiveScript中的幾文件拖入工程的根目錄
  • 根據(jù)自己需求選擇好描述文件
  • 根據(jù)自己的項(xiàng)目修改一下shell.sh (修改哪里下面會(huì)指出)
  • cd到工程根目錄灰伟,通過(guò)./shell.sh 執(zhí)行腳本即可

下面通過(guò)實(shí)例詳細(xì)演示整個(gè)過(guò)程

第一種:打包上傳到第三方平臺(tái)Fir (上傳蒲公英原理一樣)
第二種:打包上傳到App store

將通過(guò)這幾步來(lái)講解整個(gè)過(guò)程

  • 準(zhǔn)備工作
  • 準(zhǔn)備工作做完后,正式開(kāi)啟自動(dòng)化之路
  • 自動(dòng)化腳本執(zhí)行過(guò)程中可能遇到的錯(cuò)誤

準(zhǔn)備工作

  • 因?yàn)橐蟼鞯紽ir平臺(tái)儒旬,需要先安裝fir-cli


    安裝fir-cli
  • 如果沒(méi)有安裝過(guò)rvm栏账,需要安裝rvm,在終端輸入rvm -v命令查看,如果打印出rvm:command not found說(shuō)明沒(méi)有安裝過(guò)rvm栈源,如果能打印出rvm版本等信息說(shuō)明安裝過(guò)挡爵。如果沒(méi)有安裝過(guò)rvm可以通過(guò)下面的命安裝,如果已經(jīng)安裝過(guò)可以忽略甚垦。

    • 在終端輸入 curl -L get.rvm.io | bash -s stable ,然后稍等一會(huì)rvm就安裝好了
    • 在終端輸入 source ~/.bashrc
    • 在終端輸入 source ~/.bash_profile
    • 再輸入rvm -v查看安裝成功

準(zhǔn)備工作做完后茶鹃,正式開(kāi)啟自動(dòng)化之路

一、將archiveScript中的3個(gè)文件拖入工程的根目錄

Snip20170922_61.png

二艰亮、根據(jù)自己需求選擇好描述文件

Snip20170922_53.png

三闭翩、修改一下shell.sh 文件

修改1
修改2
自己工程的project_name名字

Product ->Scheme -> Edit Scheme 查看自己的scheme_name

scheme_name

獲取Fir平臺(tái)的token


Snip20170922_50.png

三、 cd到工程根目錄迄埃,./shell.sh 回車就會(huì)執(zhí)行腳本

執(zhí)行腳本

四疗韵、 根據(jù)自己的需求選擇即可

Snip20170922_63.png

如果開(kāi)始選擇的1:app-store 會(huì)發(fā)布到app store

發(fā)布app store 成功

如果開(kāi)始選擇的2:ad-hoc 發(fā)布到fir平臺(tái)

Snip20170922_65.png

如果遇到下面的錯(cuò)誤

Snip20170922_56.png

解決方法:在終端 輸入rvm system后重新執(zhí)行sehll腳本就可以了

Snip20170922_57.png

如果前面已經(jīng)安裝過(guò)fir-cli,但是在腳本執(zhí)行過(guò)程中任然報(bào)fir:command not found的錯(cuò)誤
解決辦法: 在終端輸入rvm get head

Snip20170922_66.png

執(zhí)行完畢后再次執(zhí)行腳本就ok了
到這里就已經(jīng)實(shí)現(xiàn)了通過(guò)腳本打包并發(fā)布到第三方平臺(tái)Fir 和 Appstore的整個(gè)流程侄非。接下來(lái)對(duì)shell中的腳本和一些自動(dòng)化原理進(jìn)行簡(jiǎn)單說(shuō)明

shell中的腳本和一些自動(dòng)化原理

正常情況下手動(dòng)在Xcode中執(zhí)行Product -> Archive , 在Xcode底層是通過(guò)xcodebuild相關(guān)的命令編譯蕉汪、打包生成ipa包的.(xcodebuild主要是用來(lái)編譯流译,打包成Archive和導(dǎo)出ipa包)

進(jìn)入終端可以通過(guò)下面的命令查看一下xcodebuild的version


Snip20170925_1.png

接下來(lái),看一下Shell腳本

設(shè)置變量
選擇輸入

上面內(nèi)容注釋大家一看應(yīng)該就明白

clean并archive
導(dǎo)出ipa

清理構(gòu)建目錄

xcodebuild \
clean -configuration ${development_mode}

編譯之前先clean下肤无,就如同在Xcode進(jìn)行Product -> Clean先蒋。

編譯打包成Archive

xcodebuild \
archive -workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive

編譯工程骇钦,編譯并生成.xcarchive文件宛渐,放在build_path下,名字是project_name.xcarchive眯搭,就如在Xcode進(jìn)行Product -> Archive這一步最為耗時(shí).

將Archive導(dǎo)出ipa

xcodebuild -exportArchive -archivePath ${build_path}/${project_name}.xcarchive \
-configuration ${development_mode} \
-exportPath ${exportIpaPath} \
-exportOptionsPlist ${exportOptionsPlistPath}

將生成的.xcarchive文件導(dǎo)出.ipa包到指定的exportIpaPath路徑下窥翩。

說(shuō)明
用\來(lái)進(jìn)行換行分隔,一條shell命令過(guò)長(zhǎng)時(shí)可以進(jìn)行分割顯示.
$變量名是引用變量鳞仙,拿來(lái)使用
|| exit 指明如果這一條命令執(zhí)行失敗寇蚊,則退出當(dāng)前shell.

Snip20170925_10.png

通過(guò)Fir-cli命令上傳到Fir平臺(tái)

# 將XXX替換成自己的Fir平臺(tái)的token
fir login -T XXX
fir publish $exportIpaPath/$scheme_name.ipa

通過(guò)altool工具提交ipa包到app store
這個(gè)工具實(shí)際上是Application Loader,打開(kāi)Xcode-左上角Xcode-Open Developer Tool-Application Loader 可看到
altool的路徑是:

/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool
#驗(yàn)證并上傳到App Store
# 將-u 后面的XXX替換成自己的AppleID的賬號(hào)棍好,-p后面的XXX替換成自己的密碼
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${exportIpaPath}/${scheme_name}.ipa -u XXX -p XXX -t ios --output-format xml
"$altoolPath" --upload-app -f ${exportIpaPath}/${scheme_name}.ipa -u  XXX -p XXX -t ios --output-format xml
Snip20170923_69.png
Snip20170923_70.png

整個(gè)過(guò)程和原理還算比較簡(jiǎn)單仗岸,shell腳本還是滿有意思的,作為蘋果開(kāi)發(fā)人員借笙,有必要學(xué)習(xí)一下扒怖,本人也剛學(xué)習(xí)shell 不久,歡迎大家交流业稼。

參考文檔:
http://www.reibang.com/p/bd4c22952e01
https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盗痒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子低散,更是在濱河造成了極大的恐慌俯邓,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熔号,死亡現(xiàn)場(chǎng)離奇詭異稽鞭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)引镊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門川慌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人祠乃,你說(shuō)我怎么就攤上這事梦重。” “怎么了亮瓷?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵克伊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我吟吝,道長(zhǎng),這世上最難降的妖魔是什么挣饥? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮沛膳,結(jié)果婚禮上扔枫,老公的妹妹穿的比我還像新娘。我一直安慰自己锹安,他們只是感情好短荐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著叹哭,像睡著了一般忍宋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上风罩,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天糠排,我揣著相機(jī)與錄音,去河邊找鬼超升。 笑死入宦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的室琢。 我是一名探鬼主播乾闰,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼研乒!你這毒婦竟也來(lái)了汹忠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雹熬,失蹤者是張志新(化名)和其女友劉穎宽菜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體竿报,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铅乡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烈菌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阵幸。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖芽世,靈堂內(nèi)的尸體忽然破棺而出挚赊,到底是詐尸還是另有隱情,我是刑警寧澤济瓢,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布荠割,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蔑鹦。R本人自食惡果不足惜夺克,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嚎朽。 院中可真熱鬧铺纽,春花似錦、人聲如沸哟忍。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)魁索。三九已至融撞,卻和暖如春盼铁,著一層夾襖步出監(jiān)牢的瞬間粗蔚,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工饶火, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鹏控,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓肤寝,卻偏偏與公主長(zhǎng)得像当辐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲤看,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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