本著務(wù)實(shí)求真诡曙、增加技能點(diǎn)的前提下(~想偷懶)场躯,學(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)建的對象有:(默認(rèn)情況下會運(yùn)行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.sh和ExportOptions.plist
build.sh
#!bin/sh
echo "開始工程清理"
# ${workspace} 工程中,.xcworkspace的文件名字
# ${scheme} 當(dāng)前要編譯運(yùn)行的scheme
# configuration ${Debug或者Release} 當(dāng)前是要以Debug運(yùn)行還是以Release運(yùn)行
# -quiet 忽略警告提示打印
# -UseNewBuildSystem=NO 是否使用新的build系統(tǒng)
xcodebuild clean -workspace "YourProjectWorkspace.xcworkspace" -scheme "Yourscheme" -configuration Release -UseNewBuildSystem=NO
echo "工程清理完成"
echo "開始工程打包"
#${workspace} 工程中,.xcworkspace的文件名字
#${scheme} 當(dāng)前要編譯運(yùn)行的scheme
#configuration ${Debug或者Release} 當(dāng)前是要以Debug運(yùn)行還是以Release運(yùn)行
#-archive_path 導(dǎo)出.xcarchive文件的存放路徑
#CODE_SIGN_IDENTITY 證書文件名
#PROVISIONING_PROFILE 運(yùn)行文件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(前面路徑會自動補(bǔ)全)
# 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_IDENTITY和PROVISIONING_PROFILE 如果不需要指定可以不用寫质蕉,它會根據(jù)你xcode中的配置去自動匹配
ExportOptions.plist
這個在使用xcode打包后會生成势篡,建議使用xcodebuild自動打包前先使用xcode打一個包,保證項(xiàng)目代碼和各項(xiàng)配置沒有問題模暗。
執(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)這個問題是因?yàn)?strong>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)