Jenkins打包iOS自動修改build號

  • 有時候打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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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