你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 最好的 Xcode 自動生成版本號技術

最好的 Xcode 自動生成版本號技術

編輯:IOS技巧綜合
[摘要]本文是對最好的 Xcode 自動生成版本號技術的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。

在 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" 腳本。

腳本代碼:

#
# Set the build number to the current git commit count.
# If we're using the Dev scheme, then we'll suffix the build
# number with the current branch name, to make collisions
# far less likely across feature branches.
# Based on: http://w3facility.info/question/how-do-i-force-xcode-to-rebuild-the-info-plist-file-in-my-project-every-time-i-build-the-project/
#
git=`sh /etc/profile; which git`
appBuild=`"$git" rev-list --all |wc -l`
if [ $CONFIGURATION = "Debug" ]; then
branchName=`"$git" rev-parse --abbrev-ref HEAD`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $appBuild-$branchName" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
else
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $appBuild" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
fi
echo "Updated ${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"

這個腳本使用 PlistBuddy 命令行工具來編輯 /foo/DerivedData/bar(也是Target的生成目錄)

目錄下的 Info.plist 的版本號。這就是為什麼版本號變化時Git不會被弄髒。每次生成它都會更

新了版本號,不只是一個總的清理後的第一次生成,而且和你是否在 Info.plist 頁面也沒有關系。

上面的代碼是在匿名評論者代碼上做了一些修改。它使用Git提交計數的版本號,但是如果它檢測

到我們在Xcode使用調試生成配置,它會在版本號後加上當前分支的名字後綴。這避免了在並行

開發中不同分支版本號潛在的沖突2

2014年9月14日-更新Johan庫爾,可以說是在互聯網上最酷的名字,他糾正了我的新運行腳本

的一些潛在的問題。上面的腳本也已經更新。


  1. 嚴格來說,在2014就改名字了.

  2. 在Bloglovin,我們會在固定的時間解決六個不同分支問題。版本號沖突每天都會發生。

雖然不是一個大的問題,我不喜歡這個特定的生成,這將會導致難以識別的崩潰日志。

這種在版本號後面加後綴的方法應該可以解決這個問題。

SimpleCode:https://github.com/skyming/BuildVsersion
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved