BloggerAds

2015年5月12日 星期二

[筆記] 自動遞增 iOS App 版本號碼

圖檔來源:TechOrange
由於公司 iOS 程式已經開發進入尾聲,所以需要開始定義版本號碼的演進,上網看了一下大家對於 iOS 的版本號討論和 Apple 的文件,目前 iOS App 關於版號有兩個欄位可以更改:
1. CFBundleShortVersionString:
此版號預設為 1.0,依據 Apple 文件,可以分成三個欄位,Major version、reversion 和 maintenance release。
依據這個規則,在下面的 script 中,它用來協助我更新 maintenance release,每次 build 都會自動加一。如果有其它需求的話,因為我已經把三個欄位分開了,相信應該不難再修改成其它需求才是!

2. CFBundleVersion:
依據 Apple 文件,此欄位應該只允許數字和小數點組成的字串,第一位數字必須大於 0,如果以 0 作為開頭的話,該 0 會被系統忽略!
但是實務上我發現其實限制好像沒那麼嚴苛,所以我目前先用 Build 的日期時間當做它的值,並且把它以 16 進位儲存。

網路上也看到文章說 CFBundleShortVersionString 主要是給使用者看的,所以我覺得這只要讓使用者知道有在改進就好了,而 CFBundleVersion 比較傾向於給內部使用,讓 QA 和 RD 主要用它來溝通,而不依據 CFBundleShortVersionString 來聯繫,我覺得也還不錯!

所以下面就是我目前最後用的 script,也分享給大家囉!

#!/bin/bash

bundleShortVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $INFOPLIST_FILE)
bundleVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" $INFOPLIST_FILE)
major_id=$(echo $bundleShortVersion | grep -o '^[0-9]')
revision_id=$(echo $bundleShortVersion | grep -o '[0-9]\+.[0-9]' | grep -o '[0-9]\+$')
maintenance_id=$(echo $bundleShortVersion | grep -o '[0-9]\+$')
maintenance_id=`expr $maintenance_id + 1`
bundleShortVersion=$major_id"."$revision_id"."$maintenance_id
bundleVersion=$(date +"%y%m%d%H%M")
bundleVersion=$(printf "%X" $bundleVersion)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $bundleVersion" "$INFOPLIST_FILE"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $bundleShortVersion" "$INFOPLIST_FILE"

Reference:
Information Property List Key Reference