XCode9制作一鍵打包腳本

做iOS開(kāi)發(fā)時(shí)間久了,打包APP一定是比較頻繁的事情,每次都需要各種點(diǎn)點(diǎn)點(diǎn)。。。要是能簡(jiǎn)單執(zhí)行一個(gè)腳本就生成ipa,那就輕松了!
于是開(kāi)始在谷歌學(xué)習(xí)如何制作自動(dòng)化打包腳本,但是好多都是老版本。所以我打算參考別人的教程,再自己研究研究,最后把研究成果進(jìn)行一個(gè)總結(jié),方便日后查閱。
參考文章:
http://www.lxweimin.com/p/97c97c2ec1ca
http://www.lxweimin.com/p/3f43370437d2
http://blog.csdn.net/potato512/article/details/52172107
http://blog.csdn.net/itiapp_home/article/details/70241011


Begin to do

小牛試刀

其實(shí)當(dāng)Xcode點(diǎn)擊build或者運(yùn)行comand+R之后,Xcode執(zhí)行的命令是xcodebuild這條命令。
打開(kāi)終端,cd到你的工程位置,然后試一下xcodebuild、xcrun命令,看看自己電腦是否安裝了xcodebuild及xcrun。

# xcodebuild
kuangzihandeMacBook-Pro:YuanKezi kuangzihan$ xcodebuild -version  
Xcode 9.1
Build version 9B55

# xcrun
kuangzihandeMacBook-Pro:YuanKezi kuangzihan$ xcrun --version
xcrun version 35.

xcodebuild命令是蘋(píng)果官方推出的打包命令,可以在終端輸入xcodebuild -help查看,也可以看官方文檔

背景知識(shí)

在8.3之前推薦使用xcodebuild + xcrunPackageApplication的方式打包,筆者在學(xué)習(xí)過(guò)程中也使用過(guò),但是執(zhí)行命令行時(shí)報(bào)錯(cuò)xcrun: error: unable to find utility "PackageApplication", not a developer tool or in PATH,提示很明顯在路徑中找不到PackageApplication文件,雖然網(wǎng)上也有提供下載PackageApplication方式的解決方法,但筆者在Xocde9下嘗試無(wú)效。
于是筆者使用了官方推薦的arhive+exportArchive的方式來(lái)打包。本文也主要講解如何通過(guò)arhive+exportArchive方式打包。

命令行

生成Archive包

首先需要在xcode項(xiàng)目配置好證書(shū)及描述文件,然后打開(kāi)終端cd到項(xiàng)目目錄,執(zhí)行編輯并清理命令。

xcodebuild archive 
           -workspace 項(xiàng)目名稱(chēng).xcworkspace (非cocoapods項(xiàng)目使用 -project 項(xiàng)目名稱(chēng).xcodeproj)
           -scheme 項(xiàng)目名稱(chēng) 
           -configuration 構(gòu)建版本(Debug or Release) 
           -archivePath archive包存儲(chǔ)路徑  
           clean archive  清理
  • -workspace or -project
    此處有區(qū)別,如果非cocoapods項(xiàng)目使用-project 項(xiàng)目名稱(chēng).xcodeproj,cocoapods項(xiàng)目使用-workspace 項(xiàng)目名稱(chēng).xcworkspace
  • -scheme 可以通過(guò)xcodebuild -list獲取;
  • -configuration 一些參數(shù),也可以通過(guò)xcodebuild -list獲取,一般使用DebugorRelease
  • -archivePath 生成archivePath的路徑,一般放項(xiàng)目目錄下并且自定義一個(gè)文件夾名稱(chēng),例如archive/test.xcarchive
  • clean archive 編譯之前清理;
生成ipa文件

上文已經(jīng)提到PackageApplication已經(jīng)不推薦,本文通過(guò)arhive+exportArchive來(lái)實(shí)現(xiàn)打包。

xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive
                          -exportPath 導(dǎo)出ipa文件路徑 
                          -exportOptionsPlist exportOptionsPlist文件路徑  
                          -allowProvisioningUpdates 允許配置更新
  • -archivePath 此路徑為生成Archive包步驟中生成的archive路徑;
  • -exportPath 設(shè)置導(dǎo)出ipa文件路徑;
  • -exportOptionsPlist
    此處需要詳細(xì)說(shuō)明下,筆者在調(diào)研過(guò)程中也卡在此處,此plist并非項(xiàng)目中info.plist文件路徑,是需要新建一個(gè)plist文件,格式是如下:
ExportOptions.png
** ExportOptions.plist文件參數(shù)說(shuō)明 ** 
compileBitcode:不上架App Store,Xcode是否啟用Bitcode重新編譯,默認(rèn)為YES。 
method:歸檔類(lèi)型,包括app-store、ad-hoc、package、enterprise、development以及developer-id。 
uploadBitcode:上線App Store是否開(kāi)啟Bitcode,默認(rèn)為YES。 
uploadSymbols:上線App Store,是否開(kāi)啟符號(hào)序列化,這是與查crash相關(guān)的,默認(rèn)為YES。

特別說(shuō)明下,在Xcode9之前是不需要ExportOptions.plist ,在Xcode9之后必須加入 ExportOptions.plist
最后此處指向創(chuàng)建plist文件的路徑即可;

  • allowProvisioningUpdates 允許配置更新;

生成Shell腳本介紹

上面所述均是通過(guò)命令行的方式實(shí)現(xiàn)打包,但執(zhí)行起來(lái)還需要輸入命令行,還是不太方便,下面介紹通過(guò)生成一個(gè)Shell腳本來(lái)來(lái)實(shí)現(xiàn)一鍵打包。(詳細(xì)的Sell命令,有興趣的同學(xué)可以在Shell教程中詳細(xì)學(xué)習(xí))
首先打開(kāi)終端輸入如下命令:

touch test
在user目錄可看到生成的test文本文件

打開(kāi)文件,輸入如下:

#!/bin/sh  
echo "Hello Shell"

然后執(zhí)行:

chmod +x test

執(zhí)行成功后查看之前test文本文件,變成了Unix可執(zhí)行文件(即生成了一個(gè)簡(jiǎn)單腳本),雙擊腳本即可查看打印的Hello Shell,如下:

kuangzihandeMacBook-Pro:~ kuangzihan$ /Users/kuangzihan/test ; exit;
Hello Shell
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[進(jìn)程已完成]

一鍵打包Shell腳本

以下是我自動(dòng)打包的主要代碼:

#! /bin/bash
# created by Ficow Shen

#工程絕對(duì)路徑
project_path=$(pwd)/TestProjects

#工程名稱(chēng)
project_name=TestProjects

#打包模式 Debug/Release
development_mode=Debug

#scheme名
scheme_name=TestProjects

#archive文件夾名稱(chēng)
archive_path=archive

#plist文件所在路徑
exportOptionsPlistPath=$(pwd)/iOS/IPA.plist

#導(dǎo)出.ipa文件所在路徑
exportFilePath=$(pwd)/Desktop/${scheme_name}_IPA



echo '*** 正在 編譯工程 For '${development_mode}
xcodebuild \
archive \
-workspace ${project_path}/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${project_path}/${archive_path}/${project_name}.xcarchive \
clean archive \
-quiet || exit
echo '*** 編譯完成 ***'

echo '*** 正在 打包 ***'
xcodebuild \
-exportArchive \
-archivePath ${project_path}/${archive_path}/${project_name}.xcarchive \
-exportPath ${exportFilePath} \
-exportOptionsPlist ${exportOptionsPlistPath} \
-allowProvisioningUpdates \
-quiet || exit

if [ -e $exportFilePath/$scheme_name.ipa ]; then
    echo "*** .ipa文件已導(dǎo)出 ***"
    open $exportFilePath
else
    echo "*** 創(chuàng)建.ipa文件失敗 ***"
fi
echo '*** 打包完成 ***'

修改如下幾點(diǎn)即可使用此腳本實(shí)現(xiàn)一鍵打包:

  1. project_path $(pwd)為電腦的用戶(hù)目錄,此處填寫(xiě)項(xiàng)目根目錄即可;
  2. project_name 此處修改為項(xiàng)目名稱(chēng);
  3. scheme_name 此處同樣可以修改為項(xiàng)目名稱(chēng);
  4. exportOptionsPlist 此處需要填寫(xiě)上文提到的exportOptionsPlist.plist文件所在目錄;
  5. exportFilePath 導(dǎo)出ipa文件路徑,默認(rèn)設(shè)置桌面;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評(píng)論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,740評(píng)論 3 420
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,856評(píng)論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,175評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,931評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,321評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,533評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,082評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,891評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,067評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,319評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,732評(píng)論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,987評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,794評(píng)論 3 394
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,076評(píng)論 2 375

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

  • 本文始發(fā)于我的博文詳解Shell腳本實(shí)現(xiàn)iOS自動(dòng)化編譯打包提交,現(xiàn)轉(zhuǎn)發(fā)至此。 目錄 前言 Shell腳本涉及的工...
    zackzheng閱讀 44,533評(píng)論 95 173
  • 本文轉(zhuǎn)自CaryaLiu's Blog。 本文最終實(shí)現(xiàn)的是使用腳本打 Ad-hoc 包,并發(fā)布測(cè)試,當(dāng)然稍微修改一...
    M_Baron閱讀 1,017評(píng)論 1 0
  • 前言 眾所周知,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶(hù)體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶(hù)們都是很挑剔的。如果一個(gè)公司的推廣...
    閑云清煙閱讀 2,527評(píng)論 1 4
  • 前言 眾所周知,現(xiàn)在App的競(jìng)爭(zhēng)已經(jīng)到了用戶(hù)體驗(yàn)為王,質(zhì)量為上的白熱化階段。用戶(hù)們都是很挑剔的。如果一個(gè)公司的推廣...
    偏偏就是禰閱讀 9,022評(píng)論 34 59
  • 大學(xué)生活已經(jīng)過(guò)去一個(gè)月了,可是現(xiàn)在我感到從未有過(guò)的迷茫。"理想很豐滿(mǎn),現(xiàn)實(shí)很骨感 。"大概就是說(shuō)著我現(xiàn)在的...
    非兒_dd75閱讀 563評(píng)論 1 2