目前在了解自動打包這塊,不管是 fastlane
、 xctool
還是啥潘鲫,基本原理都是調(diào)用 xcodebuild
方法去實現(xiàn)萍启,所以這一篇先入門 xcodebuild
总珠。
關(guān)于 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>
···
這里就不做一一介紹局服,但是有幾個項目級別的參數(shù)要注意:
-
workspace
是一個項目的總文件,里面可以包含一個或者幾個project
, 一般大家會把項目依賴的project
驳遵,放在一個workspace
中淫奔,比如 Cocoapods 這個工具就把依賴放在了一個單獨的叫Pods
的project
,讓后通過workspace
把項目組織在一起堤结。 -
project
一個組織項目里代碼和資源的文件搏讶。project
是必不可少,workspace
是可選的霍殴。如果你只有一個project
媒惕,并且不依賴其他project
則是不需要workspace
的。 -
target
定義編譯時需要哪些文件和資源来庭,對環(huán)境有哪些要求妒蔚,編譯中要不要加入什么自定義的步驟。一個 project 可以有多個文件target
, 比如在iOS和 macOS 共用代碼的項目里,可以分別有 iOS 和 macOS 兩個不同的target
每個 target 包含整個項目里自己需要的文件和設(shè)置肴盏。 -
scheme
定義了你怎樣使用target
的方式科盛,相當(dāng)于在target
外觀有包了一層,屬于定義target
的外部環(huán)境菜皂。在什么環(huán)境下使用 target贞绵,是 Build,run恍飘,Test榨崩,Profile 等等。build 這個 target 要不要 Debug 的符號信息章母,跑起來編譯好的二進制文件時母蛛,要不要帶參數(shù),帶什么參數(shù)乳怎,二進制文件跑起來后應(yīng)該生活在什么樣的環(huán)境彩郊?系統(tǒng)語言是什么,Metal 要不要開啟蚪缀?二進制跑起來后要不要對程序的內(nèi)存進行監(jiān)控秫逝,比如Zombie Objects
等等。因為scheme
是為target
服務(wù)的询枚,所以 Xcode 是創(chuàng)建target
是默認(rèn)創(chuàng)建對應(yīng)的scheme
筷登。
一般情況我們明確指定,workspace
哩盲、 scheme
這兩個基本參數(shù)就可以前方,沒有 workspace
的則指定projec
。來源
對于xcodebuild的介紹先到這里廉油,想看更仔細的惠险,請移步官網(wǎng) 或者在終端執(zhí)行 man xcodebuild
或者 xcodebuild -help
。
下面抒线,我們?nèi)ビH自實操一個打包項目班巩。
新建一個工程XcodeBuildDemo
。
然后在創(chuàng)建一個腳本文件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
#導(dǎo)出.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包已導(dǎo)出'
open $exportIpaPath
else
echo 'ipa包導(dǎo)出失敗 '
fi
echo '打包ipa完成 '
將shell腳本和寫好的版本配置文件放在 XcodeBuildDemo.xcodeproj
同一個目錄文件下
在終端cd到當(dāng)前目錄嘶炭,執(zhí)行 xd.sh
腳本抱慌。可以得到最后的結(jié)果
至此眨猎,關(guān)于xcodebuild自動打包入門就到這里抑进。
Demo