xcodebuild自動打包學(xué)習(xí)日記

本著務(wù)實求真、增加技能點的前提下(~想偷懶),學(xué)習(xí)了了下xcodebuild自動打包方面。在這個做個小總結(jié),方便自己及你我他。

工具介紹

xcodebuild builds one or more targets contained in an Xcode project, or builds a scheme contained in an Xcode workspace
xcodebuild就是用來構(gòu)建產(chǎn)品的命令行工具,其用法可以歸結(jié)為3個部分:

  • 可構(gòu)建的對象
  • 構(gòu)建行為
  • 一些其他輔助命令

可以構(gòu)建的對象有:(默認情況下會運行project下的第一個targect)

  • workspace:必須和“-scheme”一起使用,構(gòu)建該workspace下的一個scheme。
  • project:當(dāng)根目錄下有多個Project的時候,必須使用“-project”指定project
  • target:構(gòu)建某個Target
  • scheme:和“-workspace”一起使用,指定構(gòu)建的scheme。

構(gòu)建行為有:

  • xcodebuild clean:清除build目錄下的
  • xcodebuild build: 構(gòu)建
  • xcodebuild test: 測試某個scheme,必須和"-scheme"一起使用
  • xcodebuild archive:打包,必須和“-scheme”一起使用
  • xcodebuild -exportArchive:包導(dǎo)出

輔助命令有:

  • man xcodebuild:查看手冊
  • xcodebuild -version:查看版本號
  • xcodebuild -help:查看幫助
  • xcodebuild -showsdks:查看已安裝SDK列表
  • ...

打包測試

打包過程中主要使用了一下三個命令:

xcodebuild clean 清理工程
xcodebuild archive 編譯打包文件
xcodebuild -exportArchive 導(dǎo)出IPA包

需要兩個文件build.shExportOptions.plist

截屏2020-07-08 下午3.40.21.png

build.sh
#!bin/sh

echo "開始工程清理"
# ${workspace} 工程中,.xcworkspace的文件名字
# ${scheme} 當(dāng)前要編譯運行的scheme
# configuration ${Debug或者Release} 當(dāng)前是要以Debug運行還是以Release運行
# -quiet 忽略警告提示打印
# -UseNewBuildSystem=NO 是否使用新的build系統(tǒng)
xcodebuild clean -workspace "YourProjectWorkspace.xcworkspace" -scheme "Yourscheme" -configuration Release -UseNewBuildSystem=NO
echo "工程清理完成"

echo "開始工程打包"
#${workspace} 工程中,.xcworkspace的文件名字
#${scheme} 當(dāng)前要編譯運行的scheme
#configuration ${Debug或者Release} 當(dāng)前是要以Debug運行還是以Release運行
#-archive_path 導(dǎo)出.xcarchive文件的存放路徑
#CODE_SIGN_IDENTITY 證書文件名
#PROVISIONING_PROFILE 運行文件UUID
xcodebuild archive -workspace "YourProjectWorkspace.xcworkspace" -scheme "Yourscheme" -configuration Release -archivePath "~/Desktop/autoPack/SetUpConfig"
echo "工程打包完成"

echo "開始導(dǎo)出IPA包"
#xcodebuild -exportArchive -archivePath archive文件的地址.xcarchive
#                          -exportPath 導(dǎo)出的ipa文件夾地址
#                          -exportOptionsPlist exprotOptionsPlist.plist(前面路徑會自動補全)
#                          CODE_SIGN_IDENTITY=證書
#                          PROVISIONING_PROFILE=描述文件UUID
xcodebuild -exportArchive -archivePath "~/Desktop/autoPack/SetUpConfig.xcarchive" -exportPath "~/Desktop/autoPack/SetUpConfig.ipa" -exportOptionsPlist "ExportOptions.plist"

scheme可以使用xcodebuild -list命令查看
CODE_SIGN_IDENTITYPROVISIONING_PROFILE 如果不需要指定可以不用寫,它會根據(jù)你xcode中的配置去自動匹配

ExportOptions.plist

這個在使用xcode打包后會生成,建議使用xcodebuild自動打包前先使用xcode打一個包,保證項目代碼和各項配置沒有問題。


截屏2020-07-08 下午3.57.09.png

執(zhí)行命令

打開終端,cd到工程目錄,輸入 sh ./build.sh

遇到的問題

** ARCHIVE SUCCEEDED **

工程打包完成
開始導(dǎo)出IPA包
2020-05-09 11:33:57.289 xcodebuild[20203:817143] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/_6/t0xhscld37g6mb17jt4cv2sw0000gn/T/SetUpConfiguartion_2020-05-09_11-33-57.287.xcdistributionlogs'.
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/_6/t0xhscld37g6mb17jt4cv2sw0000gn/T/ipatool-json-filepath-~~~EygMH8}

** EXPORT FAILED **

按照提示,前往錯誤日志文件地址,找到錯誤日志文件

/var/folders/_6/t0xhscld37g6mb17jt4cv2sw0000gn/T/SetUpConfiguartion_2020-05-09_11-33-57.287.xcdistributionlogs

在錯誤日志中看到

/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- sqlite3 (LoadError)

終端執(zhí)行 gem list | grep sqlite3 如果沒有輸出信息說明少了sqlite3 這個文件。
執(zhí)行 gem install sqlite3 --platform=ruby 安裝,如果是已安裝 則繼續(xù)執(zhí)行 rvm use system --default

我看網(wǎng)上很多文章都說如果出現(xiàn)這個問題是因為xcode上的Enable BitCode問題,設(shè)置為No即可。這時可以使用xcode打包并導(dǎo)出測試一下,如果xcode打包并導(dǎo)出都沒有問題,則不是Enable BitCode問題
關(guān)于Enable BitCode,可以看看這位大神的文章:關(guān)于bitcode, 知道這些就夠了

參考
# iOS系統(tǒng)提供開發(fā)環(huán)境下命令行編譯工具:xcodebuild

iOS 自動化打包(xcodebuild)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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