- 有時候打AppStore的ipa,發(fā)現(xiàn)之前上傳的ipa有問題之后又要重新打包,就需要修改build號,否則替換Itunes Connet上的包就報錯;手動修改難免會忘記
- 使用腳本去修改Info.plist的build號,來避免遺忘修改
設(shè)計思路
- Jenkins打包目錄下,記錄上次打包的build信息(包括版本號、build號)
- 打包前讀取上次打包配置,同項目的Info.plist比較,版本號一致的情況:就將上次打包的build號+1,版本不一致的情況:取Info.plist的build號+1
- 將Info.plist中的build號修改,并將本次修改的配置寫入本地的打包配置中
-
由于之前設(shè)計的是用一個build.json來存放打包的信息,打包之后將新的build號和version信息寫回去,后來發(fā)現(xiàn)當(dāng)多個版本交叉打包的時候,出現(xiàn)build修改異常的問題
- 解決這個問題就是將每個版本的build號都記錄下來,或者build號一直累加;這里選擇前者,如何存儲每個版本的build號,可以一個文件按照版本號為key將信息存起來或者一個版本一個文件存信息,我選擇了后者,主要是一個json文件存多個版本信息,取得時候還好說,寫的時候要修改某個版本的值,還不會~
- 實現(xiàn)思路就是:創(chuàng)建一個文件夾用來存放版本信息文件,打包前先讀文件中有沒有版本號對應(yīng)的json文件,有的話,取出buildNumber+1,沒有的話就用plist中的配置加1,最后將打包的配置寫到對應(yīng)版本號的json中
腳本
modify_build_number.sh
#!/bin/bash -il
export LC_ALL=en_US.UTF-8
source ~/.bashrc
# 存儲所有版本號的打包版本信息文件夾【一個版本對應(yīng)一個json避免一個json導(dǎo)致打了不同的版本的包覆蓋的情況】,這個文件夾由外部傳入,一般放到Jenkins的主目錄
BuildNumberPath=$1
if [[ ! -d $BuildNumberPath ]]; then
mkdir $BuildNumberPath
chmod 777 $BuildNumberPath
echo ${BuildNumberPath}
else
echo ${BuildNumberPath}
fi
# 版本號自增
PlistDir="YourProjectInfoPlistPath"
BuildVersion=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PlistDir}")
BuildJsonPath=${BuildNumberPath}/${BuildVersion}.json
echo ${BuildJsonPath}
if [[ -f $BuildJsonPath ]]; then
# 讀取Json中上次打包的build信息
echo "讀取Json中上次打包的build信息"
PreBuildVersion=`cat ${BuildJsonPath} | jq -r ".BuildVersion"`
PreBuildNumber=`cat ${BuildJsonPath} | jq -r ".BuildNumber"`
echo "PreBuildVersion:${PreBuildVersion}"
echo "PreBuildNumber:${PreBuildNumber}"
echo "Plist中BuildVersion:${BuildVersion}"
else
# 使用項目Info.plist的信息
echo "使用項目Info.plist的信息"
BuildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${PlistDir}")
echo "Plist中BuildNumber:${BuildNumber}"
fi
if [ "${PreBuildVersion}" == "${BuildVersion}" ]; then
echo "版本號未改變"
BuildNumber=`expr ${PreBuildNumber} + 1`
else
echo "版本號改變"
BuildNumber=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${PlistDir}")
echo "BuildNumber:${BuildNumber}"
BuildNumber=`expr ${BuildNumber} + 1`
fi
echo "自增之后BuildNumber:${BuildNumber}"
if [[ "${BuildNumber}" != "" ]]; then
# 修改Info.plist的build號
echo "修改Info.plist的build號"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BuildNumber}" "${PlistDir}"
# 寫本次打包信息到build.json
echo "{\"BuildNumber\":\"${BuildNumber}\", \"BuildVersion\":\"${BuildVersion}\"}" > ${BuildJsonPath}
fi
PlistDir是項目的Info.plist的路徑,這里需要修改為你的項目中的路徑
BuildJsonPath是本地用于存儲打包的版本和build號信息的文件路徑 eg:xx/xx/build.json
執(zhí)行腳本
cd ./shellDir && ./modify_build_number.sh 'BuildJsonPath'
shellDir表示腳本的路徑
BuildJsonPath表示上次打包配置的本地緩存文件,一般存放到Jenkins的打包主目錄就好
最后編輯于 :
?著作權(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ù)。