使用shell指令碼自動修改Xcode工程編譯版本號

搶手的哥發表於2018-01-02

背景

公司的專案開發中,肯定是需要打包的,目前已經建立起了一套gitlab+fastlane的持續整合方案。但是在專案開發週期的測試階段以及上線之前,專案打包的頻次會升高不少。所以在一個團隊開發中,尤其是測試人員如何區分哪次的打包,是一個很常見的問題。

要區分不同的包也很簡單,通過build號來區分。Xcode工程的build號可以隨便填的,但是如果每次打包都要手動填寫肯定也是一個麻煩的事情,所以我們的解決思路肯定是讓工程自動變更build號

解決方案

·方法1 讓fastlane每次打包前,把build號處理。具體詳情請戳本人之前的一篇文章 Fastlane自動打包工具build號自增處理配置方法

·方法2 通過給Xcode新增shell指令碼實現build號處理,具體方法如下: 1.在工程target中,選擇Build Phases點選左上角加號,新建script指令碼

image.png
2.在程式碼區加入以下指令碼,讓build號為編譯的時間。

# Update build number with buldTime
buildNumber=$(date +%Y%m%d%H%M%S)
echo "Updating build number to $buildNumber"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}.dSYM/Contents/Info.plist"

複製程式碼

3.把Run script only when installing勾選上,不然debug會報錯。

image.png

加入這段指令碼之後,就可以實現build號自動處理,是不是So Easy?

方法對比

兩種方法都能實現對工程build號的修改,究其本質是修改了專案的info.plist。不同之處在於方法1是用fastlane打包工具中的increment_build_number方法來修改,而方法2是直接在Xcode工程裡面加入了一段shell指令碼,所以不需要藉助任何工具,很簡單快捷。

個人推薦方法2來實現build自動處理,因為不需要第三方的依賴。文中如有不足之處還望批評指正~

相關文章