iOS xcodebuild 自動打包入門

目前在了解自動打包這塊,不管是 fastlanexctool 還是啥,基本原理都是調用 xcodebuild 方法去實現,所以這一篇先入門 xcodebuild

關于 xcodebuild ,先了解幾個命令:

  • 查看手冊: man xcodebuild
  • 查看版本號: xcodebuild -version
  • 查看幫助: xcodebuild -help
  • 查看已安裝SDK列表: xcodebuild -showsdks
  • 查看xcodebuild目錄: xcode-select -print-path
  • 查看項目配置: xcodebuild -showBuildSettings
  • 編譯項目: xcodebuild

在終端輸入xcodebuild -help 可以查看一些常用方法。

xcodebuild [-project <projectname>] [[-target <targetname>]...|-alltargets] [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings [-json]] [<buildsetting>=<value>]... [<buildaction>]...
xcodebuild [-project <projectname>] -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings [-json]] [-showdestinations] [<buildsetting>=<value>]... [<buildaction>]...
xcodebuild -workspace <workspacename> -scheme <schemeName> [-destination <destinationspecifier>]... [-configuration <configurationname>] [-arch <architecture>]... [-sdk [<sdkname>|<sdkpath>]] [-showBuildSettings] [-showdestinations] [<buildsetting>=<value>]... [<buildaction>]...
xcodebuild -version [-sdk [<sdkfullpath>|<sdkname>] [-json] [<infoitem>] ]
xcodebuild -list [[-project <projectname>]|[-workspace <workspacename>]] [-json]
xcodebuild -showsdks [-json]
xcodebuild -exportArchive -archivePath <xcarchivepath> [-exportPath <destinationpath>] -exportOptionsPlist <plistpath>
xcodebuild -exportNotarizedApp -archivePath <xcarchivepath> -exportPath <destinationpath>
xcodebuild -exportLocalizations -localizationPath <path> -project <projectname> [-exportLanguage <targetlanguage>...]
xcodebuild -importLocalizations -localizationPath <path> -project <projectname>
xcodebuild -resolvePackageDependencies [-project <projectname>|-workspace <workspacename>] -clonedSourcePackagesDirPath <path>
       ···

這里就不做一一介紹,但是有幾個項目級別的參數要注意:

  • workspace 是一個項目的總文件,里面可以包含一個或者幾個project, 一般大家會把項目依賴的 project,放在一個 workspace中,比如 Cocoapods 這個工具就把依賴放在了一個單獨的叫Podsproject,讓后通過 workspace 把項目組織在一起。
  • project 一個組織項目里代碼和資源的文件。project 是必不可少,workspace是可選的。如果你只有一個project,并且不依賴其他project則是不需要workspace的。
  • target 定義編譯時需要哪些文件和資源,對環境有哪些要求,編譯中要不要加入什么自定義的步驟。一個 project 可以有多個文件target, 比如在iOS和 macOS 共用代碼的項目里,可以分別有 iOS 和 macOS 兩個不同的target 每個 target 包含整個項目里自己需要的文件和設置。
  • scheme 定義了你怎樣使用 target 的方式,相當于在 target 外觀有包了一層,屬于定義 target 的外部環境。在什么環境下使用 target,是 Build,run,Test,Profile 等等。build 這個 target 要不要 Debug 的符號信息,跑起來編譯好的二進制文件時,要不要帶參數,帶什么參數,二進制文件跑起來后應該生活在什么樣的環境?系統語言是什么,Metal 要不要開啟?二進制跑起來后要不要對程序的內存進行監控,比如Zombie Objects等等。因為scheme 是為target服務的,所以 Xcode 是創建target 是默認創建對應的scheme

一般情況我們明確指定,workspacescheme這兩個基本參數就可以,沒有 workspace 的則指定projec來源

對于xcodebuild的介紹先到這里,想看更仔細的,請移步官網 或者在終端執行 man xcodebuild 或者 xcodebuild -help

下面,我們去親自實操一個打包項目。

新建一個工程XcodeBuildDemo

image

然后在創建一個腳本文件xd.sh


#使用方法
if [ ! -d ./IPADir ];
then
mkdir -p IPADir;
fi

#工程絕對路徑
project_path=$(cd `dirname $0`; pwd)

#工程名
project_name="XcodeBuildDemo"

#scheme名
scheme_name="XcodeBuildDemo"

#打包模式 Debug/Release
development_mode=Debug

#build文件夾路徑
build_path=${project_path}/build

#plist文件所在路徑
exportOptionsPlistPath=${project_path}/exportTest.plist

#導出.ipa文件所在路徑
exportIpaPath=${project_path}/IPADir/${development_mode}


echo '正在清理工程'

xcodebuild \
clean -configuration ${development_mode} -quiet  || exit

echo '清理完成'

echo '正在編譯工程:'${development_mode}

xcodebuild \
archive -project ${project_path}/${project_name}.xcodeproj \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-archivePath ${build_path}/${project_name}.xcarchive  -quiet  || exit

echo '編譯完成'

echo '開始ipa打包'

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

if [ -e $exportIpaPath/$scheme_name.ipa ]; then
echo 'ipa包已導出'
open $exportIpaPath
else
echo 'ipa包導出失敗 '
fi
echo '打包ipa完成  '

將shell腳本和寫好的版本配置文件放在 XcodeBuildDemo.xcodeproj 同一個目錄文件下

image

在終端cd到當前目錄,執行 xd.sh 腳本。可以得到最后的結果

image

至此,關于xcodebuild自動打包入門就到這里。
Demo

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

推薦閱讀更多精彩內容