Write In Frist:在這嚴肅??的提出一個問題轩娶,希望有幸被大湃榧ィ看到解釋指導。
Q:在使用腳本更新build號后昭殉,在info里已經觀察到修改到最新時間棵癣,但代碼讀取的仍是上次配置辕翰。十分不解!!!!!!即編譯更新了的build號在下次運行中才會讀取到。
A:我空出來狈谊,有解答了填補
Xcode
本文參考鏈接:
iOS版本號詳解
名詞解釋
- Version:通常所說的版本號喜命。一般由產品部門確定。一般有兩段式(1.3)河劝、三段式(3.1.23)壁榕。
- Build:編譯號指一次唯一編譯標識, 通常是一個遞增整數。用來內部使用赎瞎,區(qū)分一次內部版本牌里。
iOS 開發(fā)中,這個2個號碼都可以任意字符串或數字.
我們目前遇到的情況有: - 忽略了 Version 或 Build. 這兩個號中的一個常年的不會發(fā)生變化.
- 顛倒了 Version 和 Build.
獲取方法
NSString *version = [[NSBundle mainBundle].infoDictionary
valueForKey:@"CFBundleShortVersionString"];
NSString *build = [[NSBundle mainBundle].infoDictionary
valueForKey:@"CFBundleVersion"];```
###自動修改Build號
#####方法一:agvtool (Apple-generic versioning tool for Xcode projects)
[agvtool](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man8/agvtool.8.html), 是蘋果的命令行工具, 集成在Xcode中. (關于versioning的更多描述和agvtool的用法可以參考官方鏈接,描述的很詳細)务甥。
此處我們講常用的:[更多語法官方描述](https://developer.apple.com/library/content/qa/qa1827/_index.html)
`修改Version為2.0`
`xcrun agvtool new-marketing-version 2.0`
`Build 遞增`
`xcrun agvtool next-version -all`
`顯示當前Version`
`agvtool what-marketing-version`
**具體方法**
1. Targets -- BuildSetting -- 搜索Versioning
修改Versioning System 牡辽。 Current Version 可以自行設定但必須設定。
![](//upload-images.jianshu.io/upload_images/1661816-b8f5905316ae9ec3.png)
2. 添加腳本 `$xcrun agvtool next-version -all` 這代碼修改build號遞增
![](//upload-images.jianshu.io/upload_images/1661816-b3e5e22b82ca9f8c.png)
3. Run你的App敞临。就會發(fā)現build號自動修改了态辛。
![](//upload-images.jianshu.io/upload_images/1661816-0001856ae98fdf6b.png)
**Note:**遞增方式為整型,也就是說 1 -->2 挺尿、 1.1 -->2
` 使用agvtool亦有局限性奏黑,相比之下更推薦使用PlistBuddy炊邦,完成由腳本控制`
#####方法二:PlistBuddy
>PlistBuddy是一個Mac里的命令行下讀寫plist文件的工具。
位于/usr/libexec/下熟史,由于這個路徑不在默認的PATH里馁害,需要通過絕對路徑/usr/libexec/PlistBuddy引用。
######列出幾個可能會遇見的語句
1. 添加: ```plistbuddy -c 'Add :Software:Gallery:Version string "1.0"' ~/Desktop/com.sample.plist```
2. 輸出: ```plistbuddy -c "Print" ~/Desktop/com.sample.plist```
3. 修改: ```plistbuddy -c 'Set :Software:Gallery:Version "1.1"' ~/Desktop/com.sample.plist```
4. 刪除: ```plistbuddy -c 'Delete :Software:Gallery:Version' ~/Desktop/com.sample.plist```
5. 合并: ```plistbuddy -c "Merge ~/Desktop/Global.plist :Software:Gallery" ~/Desktop/com.sample.plist```
如果你想知道更多關于PlistBuddy蹂匹,可以點擊[PlistBuddy](http://blog.csdn.net/a351945755/article/details/46561249)碘菜。也可Google。
**使用方法也很簡單怒详,直接在targets -- buildPhase --添加新的腳本**
![執(zhí)行過程](http://upload-images.jianshu.io/upload_images/1661816-6009ce7904290550.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
######接下來我列出幾個常用的腳本炉媒,復制粘貼替換即可。
***Note放前面昆烁,由于Xcode的特殊性吊骤,在每段代碼后面記得加一個Tab。不然會編譯失斁材帷0追邸!鼠渺!***
1. 區(qū)分Release和Debug
if [ "${CONFIGURATION}" = "Release" ]; then
Release加入你要執(zhí)行的腳本
else
Debug下要執(zhí)行的腳本
fi```
- 以時間為Build號
buildNumber=`date +"%m-%d-%H:%M"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"```
`會顯示當前時間如:03-28-22:28`
`date +"%m-%d-%y" == 03-28-17 月-日-年格式
date +"%m-%d-%Y" == 03-23-2017 月-日-年格式
date +"%T" == 22:46:04 顯示當前時間
date +"%r" == 10:46:04 PM 12小時制
date +"%H-%M" == 22-46 顯示HH-MM格式`
3. 基于Version來構建Build號
shortVersion=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PROJECT_DIR}/${INFOPLIST_FILE}")
buildNumber=date +"%m%d"
buildNumber="$shortVersion.$buildNumber"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}" ```
第一句為讀取當前的Version
- 遞增鸭巴,類似使用agvtool,少了配置拦盹,只需要運行腳本
buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")
buildnum=$((buildnum + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH"```
5. 以Git提交記錄來作為Build
buildNumber=$(git rev-list HEAD | wc -l | tr -d ' ')
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"```
- 以SVN提交記錄來作為Build
buildNumber=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"```
___
**Write In Last:后續(xù)也會持續(xù)更新腳本鹃祖,如果你有更好的,歡迎留言補充普舆。**
___
#####補充1 :Run script only when installing
字面解釋恬口,運行腳本只在安裝時
>With Run script only when installing checked, the script only runs when do Product Archive.
勾選此項,只在打包生效沼侣。