iOS自動打包腳本相關(guān)命令
xcodebuild
終端執(zhí)行man xcodebuild或xcodebuild -h查看具體使用方法态兴。
Plist 文件操作
終端執(zhí)行 /usr/libexec/PlistBuddy -h 查看使用方法凫海。
一、批量出包所需的物料
從事游戲行業(yè)的開發(fā)者一定深知行業(yè)內(nèi)馬甲包的亂相,吃這一碗飯侧戴,在此不做評判。下面簡單整理一下整個出包過程。
1.一個完整xcode工程
2.相關(guān)參數(shù)霸饲,存在在info.plist中的系統(tǒng)參數(shù)或自定義參數(shù)
3.p12證書與distribution描述文件
4.需要替換的資源文件,icon等
二臂拓、獲取信息
用一個xcode工程出包厚脉,圖形化界面的Xcode只需要點一下archive,選擇導(dǎo)出類型胶惰,證書傻工,然后export即可。同理孵滞,命令行出包的步驟也是如此中捆。相關(guān)命令如下:
a.導(dǎo)入p12證書到keychain
security import p12證書路徑 -k ~/Library/Keychains/login.keychain-db -P p12證書密碼 -T /usr/bin/codesign
//1 identity imported.
b.獲取friendlyName eg:iPhone Distribution:Zeng Yang (49P4585YSG)
openssl pkcs12 -nodes -in p12證書路徑 -info -nokeys -passin 'pass:bingniao' 2>/dev/null | grep 'friendlyName'
//friendlyName: iPhone Distribution: Zeng Yang (49P4585YSG)
c.輸出mobileprovision相關(guān)信息
openssl smime -in .mobileprovision的描述文件 -inform der -verify
寫入信息到臨時plist文件,方便后續(xù)讀取
openssl smime -in .mobileprovision的描述文件 -inform der -verify >~/tmp_provisionProfile.plist
d.讀取相關(guān)信息 UUID坊饶、mobileProvision泄伪、team id等
//獲取UUID eg:acc104c7-ccf6-402e-92cd-4db3eb7c5c78
/usr/libexec/PlistBuddy -c 'print UUID' ~/tmp_provisionProfile.plist
//獲取mobileProvision文件名 eg:Distribution_dblfk
/usr/libexec/PlistBuddy -c 'print Name' ~/tmp_provisionProfile.plist
//獲取team id eg:49P4585YSG
/usr/libexec/PlistBuddy -c 'print TeamIdentifier:0' ~/tmp_provisionProfile.plist
e.獲取xcode版本
獲取xcode 版本
xcodebuild -version | head -n 1 | awk '{print $2}'
三、開始出包
a.修改info.plist文件
通過PlistBuddy進(jìn)行操作info.plist文件
b.替換icon等資源文件
使用相關(guān)shell腳本命令進(jìn)行強制替換即可幼东。
c.出包
相關(guān)參數(shù)與資源處理完成之后即可進(jìn)行出包操作臂容。
出包流程:
1.clean操作科雳,清理工程;
2.archive操作脓杉,導(dǎo)出 .xcarchive 文件糟秘;
3.export操作,導(dǎo)出IPA包球散;
執(zhí)行命令前尿赚,請先cd到工程根目錄。
clean
xcodebuild clean -configuration Release -alltargets
archive
xcodebuild archive -scheme <scheme名> -configuration Release -archivePath <~/tmp_app.xcarchive> PROVISIONING_PROFILE="<mobileProvision文件名>" CODE_SIGN_IDENTITY="<friendlyName>" PROVISIONING_PROFILE_SPECIFIER="<UUID>" PRODUCT_BUNDLE_IDENTIFIER="<bundle id>" DEVELOPMENT_TEAM="<team id>"
export
exportOptionsPlist.plist可采用模板寫文件
因為 Xcode 9 默認(rèn)不允許訪問鑰匙串的內(nèi)容蕉堰,必須要設(shè)置 allowProvisioningUpdates 才會允許凌净。所有在這里導(dǎo)出做一下版本判斷
version < 9.0
xcodebuild -exportArchive -archivePath <導(dǎo)出的.xcarchive文件路徑> -exportPath <~/exportPath> -exportOptionsPlist <~/tmp_exportOptions.plist路徑> -configuration Release
version >= 9.0
xcodebuild -exportArchive -archivePath <導(dǎo)出的.xcarchive文件路徑> -exportPath <~/exportPath> -exportOptionsPlist <~/tmp_exportOptions.plist路徑> -allowProvisioningUpdates
exportOptionsPlist.plist
$method 選擇: app-store、development屋讶、ad-hoc
<?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>teamID</key>
<string>{teamId}</string>
<key>method</key>
<string>{$method}</string>
<key>provisioningProfiles</key>
<dict>
<key>{bundleId}</key>
<string>{uuid}</string>
</dict>
<key>compileBitcode</key>
<false/>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<false/>
</dict>
</plist>