在VSTS上面,可以建置Xamarin並將App發佈到HockeyApp上面進行,就可以讓用戶透過HockeyApp下載App,且HockeyApp本身可以讓APP有更新上架後,讓用戶開啟App之後,自動跳出更新App的訊息,這樣好處就可以減少開發人員再去做版本更新的通知功能。HockeyApp其背後的通知更新的機制在於Build
版號要更新,才會通知有下載用戶說有新版本上架,換句話說如果只是單純上架新版的ipa
是沒有用的
要做到版本更新,手動方式就是在Hockapp
介面去調整build number
,不過,這樣似乎有一點麻煩,期望可以這部分自動化,讓ipa
檔上傳後就自動更新版號。因此,必須在VSTS做一些設定即可
自動更新版號
要做到自動更新版號,主要需了解HockeyApp版號的控制,由下圖可以知道,版號的取得是來自於plist
檔案中的CFBundleVersion
數值
只要知道它取得資訊地方,基本上在VSTS內要做到修改版號這件事情就簡單多。只要我們在Build
的時候,去修改CFBundleVersion
數值,不就可以了嗎?基於此想法,所以,後續動作就是修改plist
檔案。
預設在VSTS裡面並沒有像MAC有方便更新plist
的工具,所以,需安裝一個套件來幫我們簡化這個步驟,套件名稱為Colin's ALM Corner Build & Release Tools
這工具可以修改東西有這些:
- Version Assemblies
- Replace Tokens
- DacPac Change Report Task
- Tokenizer
- Coverage Gate
主要是透過Version Assemblies
方式去修改plist
檔案,原本Build Xamarin流程
我們加上一個Version Assemblies
Task,輔助我們修改plist
檔案
在這Task幾個項目要設定
- Source Path : 要取得
plist
檔案目錄 - File Pattern : 這邊當然是指定plist檔案囉,
/Info.plist
- Version Source : 設定版本號的來源,可以使用Build Number或自訂變數,如果你要有自己的版本號設定,就選用自訂變數,不過,這邊的自訂變數,必須切記要符合Apple版本的編碼格式:
1.0.0
- Variable to use : 要使用的自訂變數,這邊一般可以使用
Build.BuildNumber
,原本因該是$Build.BuildNumber
,但是這邊不可以加上$
- Version Extract Pattern : 原本版本的型態格式,這邊使用
Custom Regex
,由我們來定義,符合plist
內的CFBundleVersion格式 - Custom Regex Find Pattern : Regex的表達式:
(?:\d+\.\d+\.)(\d+)
,就直接抄這個,不需要變更
這運作機制,其實就是幫忙找到plist
檔案,有設定CFBundleVersion
版本的地方,用$Build.BuildNumber
去Replace原本設定值,另外,在Advanced的Replace Pattern
設定為1.0.0
,且一個重點就是Build Regex Group Index
必須視為0
因此,當每次build完後,就可以增量增加版號,這時候再把build好的ipa檔,傳到HockeyApp就可以
切換bundle identifier
我們都知道在iOS中BundleIdentifier名稱是唯一的,且每個名稱都會帶入一個憑證。一般我們在開發階段可以使用apple develop
的憑證,做開發與發佈。不過,如果要正式發布給用戶安裝,就不能使用開發的憑證,必須到正式發布的憑證,憑證的改變還算簡單,這要在Build Xamarin.iOS
的Task中,去更換P12 Certificate File
,P12 Password
& Provisioning Profile File
對應的資訊就可以
但是,困難的是修改bundle identifier,畢竟在開發階段是不會設定bundle identifier為正式發布的名稱,而是當我們要Release時候,才會進行變更。要做這方面原本以為很困難,不過,發現這資訊也是被綁在plist
檔案內,這時候發現一道曙光。就是如上面更新版號一樣作法去修改plist
檔案
不過,這邊操作起來就簡單許多,因為我們只要Replace開發用的BundleIdentifier
名稱,換成正式發布的名稱就可以,這樣上面會動到的地方有:
- Variable to use : 用變數指定正式發布名稱
- Version Extract Pattern : 一樣用Custom Regex
- Custom Regex Find Pattern : 設定測試的
BundleIdentifier
的名字,後面可以直接Replace這個名字
另外,在Advanced設定 - Custom Regex Replace Pattern : 設定測試的
BundleIdentifier
的名字 - Replace Pattern : 設定Custom Regex
- Build Regex Group Index : 設定為0
這樣就可以變更名稱了,以上這些步驟都要在build之前,這樣才會把資訊跟ipa檔一起打包
所以,後續只要透過Branch去拆分開發與正式版本就可以,也就可以達到自動化佈署與切換的功能