你的偉大APP的第一個版本V1已經在App Stroe上架了,同時你的設備上也安裝了這個版本。現在你開始開發V1.1版本。如果你只是改變了版本號碼而保持以前的編譯設置,那么當你在你的設備上安裝的時候,問題就出現了:它覆蓋了以前的老版本V1.
在這篇文章中,我將講解怎樣輕松的讓你的同一個應用的2個版本共存于同一個設備,同時我也會講解如何用2個不同的icons來區分他們。
創建2個不同的App ID
更新:如果你需要用到push Notification和icloud,你需要2個不同的App ID.否則你可以用帶兩個不同bundle ID的通配符工程。感謝@alloy同學的這個小竅門。
當你安裝了一個App,為了確定你是要安裝一個新App還是更新一個已經安裝的App,設備會比較他們的App ID.
所以第一件要做的事情就是去provisioning center 給你應用的開發版本創建另外一個App ID,這樣設備就能夠讓你的應用的2個版本共存了。
如果你在App Store已經上架的應用用的是這個App ID:com.mycompany.myapp,那么我建議你把新創建的ID命名為:com.mycompany.myapp-beta 或者com.mycompany.myapp-dev
同時你要在那里為新的App ID創建一個provisioning profile.
為開發版本創建一個不同的icon
為了在我的設備上區分2個不同的版本,我用了2個不同的icon,beta版本(新版本)在左上角使用了一個黑黃相間的進度條。
如何在你的設備上讓同一個App的兩個版本共存?
把你的圖標命名為:Icon.png, Icon@2x.png, Icon-beta.png, Icon-beta@2x.png
使用不同的構建配置信息
Xcode默認會為你創建2個不同的構建配置:debug和release,我喜歡增加第三個:Appstore.
我是這樣使用他們的:
Debug:當我直接用Xcode在我的設備上創建應用
Release:當我把App打包成了一個ipa文件放到我們的空中分發系統(類似testflight但是更簡單易用)
Appstore:當我創建提交到AppStore的版本時使用這個配置。
將他們聯系起來
用戶指定構建設置
現在我們需要設置工程來讓它對不同的構件配置使用正確的AppID和icon。
進入工程的Build Settings選項并且滾到最下面,增加一個叫做BUNDLE_IDENTIFIE的用戶指定設置(user-defined setting),再增加另外一個命名為APP_ICON_NAME的用戶指定設置,參照下面的截圖設置每個構建配置:如何在你的設備上讓同一個App的兩個版本共存?
現在我們需要告訴Xcode在構建應用的時候使用這些設置
info.plist
打開你的工程的info.plist(在Supporting files文件夾下的叫做MyApp-Info.plist)的文件。
在bundle identifier中用${BUNDLE_IDENTIFIER}來替換你當前的bundle identifier。
同樣的在iconfiles下面將2個選項替換成${APP_ICON_NAME}@2x.png 和${APP_ICON_NAME}.png
${...}語法是于處理器語法:構件開始的第一個階段預處理器就會遍歷所有的文件并且用設置的值來替換${...}
結論:
這樣你就擁有了一個工程會自動在構建測試版本的時候使用測試AppID和icon,在構建AppStore版本的時候使用平常的AppID和icon。
使用預處理器宏你能夠在你的代碼里使用這些設置項來給不同的配置社會資不同的參數。
你可以更進一步創建更多的構建設置。假設你的App有一個API希望在某些版本下指向生產服務器,在某些版本下又指向開發服務器,你可以使用這個方法來讓他們自動指向正確的URL并且給每個版本一個不同的icon!