在 bloglovin ,我們使用自動生成版本號來設定xcode,使當前的版本號為在git活躍的分支上
的提交數。它一直正常工作著,但我們的技術也不是一帆風順的。
糟糕的老方法
我們使用的技術是來自乙個叫 「cocoa is my girlfriend」1
的網友發表的一篇文章,真是個不可
原諒的名字。它工作原理如下:
1. 執行乙個指令碼拿到git提交數並把它輸出到乙個 「infoplistwhatever.h」 檔案中.這個檔名稱
是什麼並不重要。
2. 在xcode中選擇 target 中的 build setting,在packaging 設定支援 「preprocess info.plist
file」 ,並設定 「info.plist preprocessor prefix file」 的值為step1:中的檔名。
3. 在setp1中的 "infoplistwhatever.h「 檔案得到的git提交數的值或者能達到這效果的其他值,
讓它作為預處理變數 custom_build_number 的值。
4. 在xcode 的 info.plist 中使用 custom_build_number 替換現在的版本號。
雖然這種技術可以正常工作,但它有幾個非常令人討厭的缺點:
1. 每次提交改變量目後的生成都會弄髒git。
2. 如果你不想弄髒git,你必須忽略 「preprocess info.plist file」 。
3. 如果你忽略了預處理器的plist檔案,你必須手動建立的乙個初始化檔案,否則在
xcode上第一次生成將會失敗(除非你不把你的 」.gitignore「 檔案提交到git 倉庫上,
讓原始值繼續跟蹤檔案現在的狀態)。
4. 版本號將不會更新,除非您手動清理和重建。這是因為在xcode 用一種不可能被其
它機制清理的方式快取了 info.plist 。在這周圍我也嘗試了很多:生成預動作方案,
其他的執行指令碼等。也沒有想到其它的方式,只有手動清理和重新生成,同時也失去了
自動設定的目的。
最可行的方法
避免了我們之前的技術所有的缺陷,而且更容易設定。你需要做的就是支援該技術,在
」build phase「 的 「copy bundle resources」 後面添乙個 "run script" 指令碼。
指令碼**:
這個指令碼使用 plistbuddy 命令列工具來編輯 /foo/deriveddata/bar(也是target的生成目錄)
目錄下的 info.plist 的版本號。這就是為什麼版本號變化時git不會被弄髒。每次生成它都會更
新了版本號,不只是乙個總的清理後的第一次生成,而且和你是否在 info.plist 頁面也沒有關係。
到我們在xcode使用除錯生成配置,它會在版本號後加上當前分支的名字字尾。這避免了在並行
開發中不同分支版本號潛在的衝突2。
2023年9月14日-更新johan庫爾,可以說是在網際網路上最酷的名字,他糾正了我的新執行指令碼
的一些潛在的問題。上面的指令碼也已經更新。
嚴格來說,在2014就改名字了.
在bloglovin,我們會在固定的時間解決六個不同分支問題。版本號衝突每天都會發生
。雖然不是乙個大的問題,我不喜歡這個特定的生成,這將會導致難以識別的崩潰日誌。
這種在版本號後面加字尾的方法應該可以解決這個問題。
python 自動生成版本號
本文適用於使用subversion版本控制的讀者.前一段時間研究了一下tortoisesvn的源 發現它使用 nant subwcrev.exe 來自動生成版本號的.subwcrev.exe 是tortoisesvn下的乙個命令列工具,安裝了tortoisesvn 就找到它.這裡補充一下tortoi...
MDK自動生成版本號
mdk編譯工程時自動生成乙個檔案版本號,格式為 v x.x.x build 2021 01 13 11 08 41 by 計算機名 我的操作希望對讀到的小夥伴有幫助!檔案結構是這樣的 test svn mdk proj test.uvprojx getversionnumber svnreion.b...
Vsiual Studio自動生成版本號的一種方法
1 安裝nuget包msbuildtasks 2 編輯專案的csproj檔案,找到被注釋掉的target的beforebuild,去掉注釋,新增如下 如下。3 編譯專案一次就會在專案資料夾下生成 propertiesversion.txt 4 在assemblyinfo.cs檔案中包含了assemb...