小白學(xué)習(xí)xcodebuild自動(dòng)化打包

隨著App產(chǎn)品上線運(yùn)行后的運(yùn)營(yíng),會(huì)出現(xiàn)這樣的需求:對(duì)同一個(gè)App,編譯出不同ipa包,供不同渠道使用,也即是我們常常說的馬甲包。這種需求在Android中出現(xiàn)較多,不同的apk對(duì)應(yīng)不同的渠道。Android中可以通過ADB命令行一次性配置好所有渠道標(biāo)志,很輕易的完成馬甲包的需求。iOS端也有同樣的利器——xcodebuild。下面逐步介紹其實(shí)現(xiàn)方式。

打開Mac命令行,輸入

xcodebuild -version

我們就能看到我們本機(jī)安裝Xcode的版本信息,「9.2」代表大版本,「9C40b」代表9.2下的小版本。一般安裝Xcode的同時(shí)會(huì)自動(dòng)帶有xcodebuild命令,如果找不到命令,則需要下載xcodebuild重新安裝,請(qǐng)自行搜索。

Xcode 9.2
Build version 9C40b

輸入命令

xcodebuild -help

能看到xcodebuild命令詳情。其中命令參數(shù)的解釋可以對(duì)照官方文檔理解。

下面只介紹和打包有關(guān)的命令。

Xcode中新建Single View App,或者命令行cd進(jìn)入自己工程的根目錄(即帶有xxx.xcodeproj的目錄),輸入命令

xcodebuild  -configuration Debug

就能產(chǎn)生Xcode中 command+r 一樣的效果。如果出現(xiàn)如下錯(cuò)誤:

Check dependencies
Code Signing Error: Signing for "ipaAuto" requires a development team. Select a development team in the project editor.
Code Signing Error: Code signing is required for product type 'Application' in SDK 'iOS 11.2'

** BUILD FAILED **


The following build commands failed:
    Check dependencies

說明我們?cè)诠こ讨袥]有配置好 BundleIdentifier 和
Provisioning Profile。因?yàn)閤codebuild命令如果沒有指定具體參數(shù),就會(huì)采用項(xiàng)目中的默認(rèn)配置。配置好項(xiàng)目中的
BundleIdentifier 和 Provisioning Profile 文件,保證項(xiàng)目正常運(yùn)行后,再次使用命令,就能得到正確的提示。

** BUILD SUCCEEDED **

如果我們使用的是Xcode8.0或者以下版本,打包使用的命令為:

//“xxx/xxx.app" 代表Product文件的存放路徑;
//“xxx.ipa“代表編譯成功的ipa路徑;
xcrun -sdk iphoneos PackageApplication -v “xxx/xxx.app" -o “xxx.ipa“

Product文件路徑的尋找方式如下圖,右鍵Show in Finder后,按住app文件拖拽到Mac命令行,就能獲取Product的路徑。ipa路徑可以自定義。


Product文件路徑.png

在Xcode9.0中,蘋果爸爸對(duì)打包命令進(jìn)行了修改,舍棄了PackageApplication(當(dāng)然也可以重新安裝PackageApplication),使用「xcodebuild -exportArchive」命令,具體參數(shù)如下:

//xxx.xcarchive代表xcarchive文件;
//xxx.plist代表指定的exportOptionsPlist文件;
xcodebuild -exportArchive -archivePath xxx.xcarchive -exportOptionsPlist xxx.plist -exportPath ./Product

xcarchive和exportOptionsPlist都是在對(duì)工程進(jìn)行Archive時(shí)自動(dòng)生成的文件。

打包

打包工程,選擇和Provisioning Profile對(duì)應(yīng)的distribution:
image.png

注:此處去掉勾選,否者命令行打包會(huì)報(bào)錯(cuò)
image.png

image.png

如果正常導(dǎo)出導(dǎo)出,最后能看到如下4個(gè)文件:
image.png

其中ExportOptions.plist就是打包需要的plist文件,可以看到它包含8個(gè)內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>compileBitcode</key>
    <false/>
    <key>method</key>
    <string>ad-hoc</string>
    <key>signingStyle</key>
    <string>automatic</string>
    <key>stripSwiftSymbols</key>
    <true/>
    <key>teamID</key>
    <string>Z5QA9CANKM</string>
    <key>thinning</key>
    <string>&lt;none&gt;</string>
</dict>
</plist>

以上8個(gè)內(nèi)容不可減少,可以根據(jù)打包要求繼續(xù)增加。

xcarchive文件也是在手動(dòng)打包后Xcode生成的文件,可以在Xcode偏好設(shè)置中找到存放位置,將文件拷貝到工程根目錄。


xcarchive.png

cd到項(xiàng)目根目錄,再次調(diào)用以上打包命令,就能在工程根目錄的Product文件夾下看到打包成功后的文件。

Tips:
出現(xiàn)錯(cuò)誤:

error: exportArchive: The data couldn’t be read because it isn’t in the correct format.

Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value., NSFilePath=/var/folders/q_/d_cyw7jd7q70lpcp28m9mqx80000gn/T/ipatool-json-filepath-ZD7JAl}

** EXPORT FAILED **

前面勾選處需要去掉。

參考:
1 Xcode9 xcodebuild export plist 配置
2 打包ipa時(shí)遇到錯(cuò)誤

關(guān)注和喜歡都是對(duì)我的鼓勵(lì)和支持~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容