iOS- 一鍵自動打包發布到Fir和AppStore

特別說明:如果項目沒有采用Cocoapods管理,沒有.xcworkspace,只有xcodeproj;只需要將腳本中這句

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

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

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

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

  • 提交測試版本ipa給測試人員
    配置好測試描述文件,然后Product -> Archive編譯打包,選擇Organizer,導出ad hoc 的 ipa 包。再上傳到Fir等第三方平臺上,然后通知測試同事進行測試。整個流程下來需要人工監守操作比較耗費時間。
  • 提交ipa包到App Store已供審核
    配置好正式的描述文件,然后同樣的方式打包導出app store 的 ipa 包。通過Application Loader 等方式提交到App store等待蘋果處理二進制包,處理完后選擇構建版本,最后提交等待蘋果審核。

無論打測試包提供測試人員測試還是打正式包上傳到App strore,整個過程都是重復耗費人工的操作,需要人工等待,然后各種點擊選擇...我們可以通過編寫腳本語言來實現整個過程。

配置自動打包發布的流程

通過下面幾步的設置好之后,以后再進行打包發布到第三方平臺或者App Store 只需要一步就能搞定了(一個回車搞定)

筆者通過shell腳本實現從archive->生成ipa->上傳到第三方平臺(Fir.im 、蒲公英)或 App store。通過下面幾步即可實現自動打包上傳功能。

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

下面通過實例詳細演示整個過程

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

將通過這幾步來講解整個過程

  • 準備工作
  • 準備工作做完后,正式開啟自動化之路
  • 自動化腳本執行過程中可能遇到的錯誤

準備工作

  • 因為要上傳到Fir平臺,需要先安裝fir-cli


    安裝fir-cli
  • 如果沒有安裝過rvm,需要安裝rvm,在終端輸入rvm -v命令查看,如果打印出rvm:command not found說明沒有安裝過rvm,如果能打印出rvm版本等信息說明安裝過。如果沒有安裝過rvm可以通過下面的命安裝,如果已經安裝過可以忽略。

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

準備工作做完后,正式開啟自動化之路

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

Snip20170922_61.png

二、根據自己需求選擇好描述文件

Snip20170922_53.png

三、修改一下shell.sh 文件

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

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

scheme_name

獲取Fir平臺的token


Snip20170922_50.png

三、 cd到工程根目錄,./shell.sh 回車就會執行腳本

執行腳本

四、 根據自己的需求選擇即可

Snip20170922_63.png

如果開始選擇的1:app-store 會發布到app store

發布app store 成功

如果開始選擇的2:ad-hoc 發布到fir平臺

Snip20170922_65.png

如果遇到下面的錯誤

Snip20170922_56.png

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

Snip20170922_57.png

如果前面已經安裝過fir-cli,但是在腳本執行過程中任然報fir:command not found的錯誤
解決辦法: 在終端輸入rvm get head

Snip20170922_66.png

執行完畢后再次執行腳本就ok了
到這里就已經實現了通過腳本打包并發布到第三方平臺Fir 和 Appstore的整個流程。接下來對shell中的腳本和一些自動化原理進行簡單說明

shell中的腳本和一些自動化原理

正常情況下手動在Xcode中執行Product -> Archive , 在Xcode底層是通過xcodebuild相關的命令編譯、打包生成ipa包的.(xcodebuild主要是用來編譯,打包成Archive和導出ipa包)

進入終端可以通過下面的命令查看一下xcodebuild的version


Snip20170925_1.png

接下來,看一下Shell腳本

設置變量
選擇輸入

上面內容注釋大家一看應該就明白

clean并archive
導出ipa

清理構建目錄

xcodebuild \
clean -configuration ${development_mode}

編譯之前先clean下,就如同在Xcode進行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進行Product -> Archive這一步最為耗時.

將Archive導出ipa

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

將生成的.xcarchive文件導出.ipa包到指定的exportIpaPath路徑下。

說明
用\來進行換行分隔,一條shell命令過長時可以進行分割顯示.
$變量名是引用變量,拿來使用
|| exit 指明如果這一條命令執行失敗,則退出當前shell.

Snip20170925_10.png

通過Fir-cli命令上傳到Fir平臺

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

通過altool工具提交ipa包到app store
這個工具實際上是Application Loader,打開Xcode-左上角Xcode-Open Developer Tool-Application Loader 可看到
altool的路徑是:

/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Support/altool
#驗證并上傳到App Store
# 將-u 后面的XXX替換成自己的AppleID的賬號,-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

整個過程和原理還算比較簡單,shell腳本還是滿有意思的,作為蘋果開發人員,有必要學習一下,本人也剛學習shell 不久,歡迎大家交流。

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

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

推薦閱讀更多精彩內容