標籤:
FIR.im 一直在盡量相容不同使用習慣的版本號碼形式, 但是在使用中我們發現好多開發人員對怎麼更好的用版本號碼來標示應用很陌生. 這是篇基礎文章, 簡單介紹 iOS 的版本號碼.
名詞解釋
Version, 通常說的版本號碼, 是應用向使用者宣傳說明時候用到的標識. 一般有2段或者3段式, 如:2.1,8.1.2
Version 一般由產品部門確定, 完全迥異的更新需要改變主要版本號, 比如 QQ 4.0 的變化非常大, 主要版本的變化會更加吸引使用者的眼球,所以有的應用會頻繁的更新主要版本號, 比如 FireFox 20.0 . 兩段式的副版本號碼既包含小功能更新也會包含 bug 修複等,三段式副版本基本都是新功能添加和大問題修複,第三段則表示穩定版本基本都是修複 bug
Build 都是給內部使用, 用來確定一個唯一版本. 與前面提到的 Version 不會有太大聯絡.
iOS 開發中,這個2個號碼都可以任一字元串或數字.
我們目前遇到的情況有:
擷取方法也很簡單:
NSDictionary *info= [[NSBundle mainBundle] infoDictionary];info[@"CFBundleShortVersionString"]; //Versioninfo[@"CFBundleVersion"]; // Build
為什麼使用版本號碼 1. 方便標示和溝通
前面提到 版本號碼更新會給推廣產生一定的積極作用. 所以版本號碼不要太長, 如果像這樣 "我們隆重推出了 某某某 1.7.14.19257 !", 這個會讓使用者感覺很乏味很像電視購物,而且也不利於傳播. 如果是 "某某 3.0, 大有不同 !"可能就會產生更好的溝通效果.
2. 方便追蹤 Bug
一個應用有 Bug 是肯定的, 但是很快的定位解決問題卻體現出團隊和程式員的能力. 我們經常遇到有開發人員說我提交一個版本, 但是下載下來有還是舊的. 我們幫他解決問題的時候,他自己都搞不清哪個是哪個了, 如果能在"關於"之類的地方顯示當前的版本, 就會容易找到問題.
或者是測試團隊的同事, 可能手裡同時有幾個不同分支的版本在測試, 他們需要精確的描述一個測試版本.
自動改變 Build 號
前面提到, Version 是不需要自動變化的, 根據產品或者市場部門的需求,適時的手動改一下就好.
1. agvtool (Apple-generic versioning tool)
agvtool, 是蘋果的命令列工具, 也是整合在 Xcode 中最方便的工具. 我們在自動編譯 SDK 的指令碼中用的就是這個方法. 其實就用了一行(其他的進階用法可以參考前面的連結):
agvtool next-version
使用前需要在 Xcode 裡簡單配置一下, :
2. 基於SCM的版本控制號
SCM 現在常用的有 Git 和 SVN, 還有一些相對小眾的比如 hg 這裡就不多做介紹了.
如果用 Git/SVN 來管理代碼(相信已經沒有人不用了) 我們可以用代碼的提交次數來代替Build號.
REV=`git rev-list HEAD | wc -l | awk ‘{print $1}‘`
其中 HEAD是分支名, 代表當前分支, 可以直接替換成其他分支名, 比如master,dev.
這個指令碼放到
REV=`svnversion -nc | sed -e ‘s/^[^:]*://;s/[A-Za-z]//‘`
後面都是一樣的:
PlistBuddy -c "Set :CFBundleVersion ${REV}" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
這樣每次編譯app的時候就自動把版本號碼加到Info.plist的CFBundleVersion索引值下
把上面2行代碼 加到 "Build Phase > Run Script"就可以了:
3. 基於日期時間
用發布日期作為版本好也是許多應用常用的方式, 因為好記好理解. 這裡直接附上代碼:
REV=`date +%y%m%d` #輸出格式141120的六位日期格式,可以根據自己喜歡改變格式
後面都是一樣的:
PlistBuddy -c "Set :CFBundleVersion ${REV}" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}
使用方法同上.
怎麼使用
只要配置好了版本號碼, 其他的事情就不需要人工幹預了, 這裡介紹2種使用情境.
1. Crash 收集
收集 Crash 是應用開發必要的環節, 通過分析和修複 Crash 資訊可以大大提高應用的穩定性而不會讓更多的使用者失望甚至刪除應用.
目前有很多收集工具, 比如 FIR.im 旗下的BugHD, Crashlytics等.
2. 使用者反饋
能主動反饋問題的使用者都是極品使用者, 不管要求是不是合理我們都要認真對待.
不管是用各種 SDK 還是用 Email 都要盡量的帶上版本號碼, 系統資訊, 方便確認使用者需求.最不濟也要在"關於"裡面能讓使用者找到相關的版本資訊以便描述問題.
淺談 iOS 版本號碼