iOS Xcode部署配置幾乎所有移動(dòng)應(yīng)用,包括我正在編寫的一款iOS應(yīng)用
Emmerge 都 需要與服務(wù)器交互。從第一次向團(tuán)隊(duì)成員演示應(yīng)用開始,我們就開始找一種更快構(gòu)建不同環(huán)境產(chǎn)品的方法。一開始我們只需要修改不同環(huán)境下的服務(wù)器地址,但在 經(jīng)過幾天來回的在配置文件中切換本地和遠(yuǎn)程服務(wù)器地址后,我對(duì)這種重復(fù)工作煩透了,于是到Google查找解決方法。在搜索一段時(shí)間后,我卻沒用找到如何 在Xcode中為每一種構(gòu)建環(huán)境分別設(shè)置配置的方法,于是在經(jīng)過大量搜索stack overflow和博客后,我總結(jié)了一種相當(dāng)簡潔有效的方法,在這里分享給需要的人。
我們何時(shí)需要考慮不同的部署環(huán)境任 何需要與后端服務(wù)器通信的APP(最簡單的APP除外)至少需要一個(gè)可配置的服務(wù)器URL。又或者你的應(yīng)用使用了第三方平臺(tái)登錄,如Facbook、 Google或者類似的系統(tǒng),并且在每種構(gòu)建環(huán)境下又需要不同的第三方平臺(tái),那么就需要為不同構(gòu)建環(huán)境設(shè)置不同的平臺(tái)App IDs。又或者你的應(yīng)用需要收集分析數(shù)據(jù),那么你可能就需要配置不同的
mixpanel ID。
具體設(shè)置方法下面簡單的例子中,我們需要?jiǎng)?chuàng)建Development和Release兩種環(huán)境,最終我們要為每種環(huán)境創(chuàng)建自己的配置文件(Setting.plist),并且在應(yīng)用運(yùn)行時(shí)只加載相應(yīng)環(huán)境的配置文件。
你可以下載
Demo程序 跟著步驟操作一遍。
1.創(chuàng)建Development和Release構(gòu)建環(huán)境在Project Navigator下,選擇項(xiàng)目名,然后在下拉菜單中選擇Project(注意不是Target),然后選中Info標(biāo)簽欄。
在"Configurations"下點(diǎn)擊 "+" ,然后選擇 "Duplicate 'Release' Configuration",然后重命名為"Production"。
然后重復(fù)上面操作,復(fù)制"Debug"配置,重命名為"Development"。
接著,刪除默認(rèn)的Debug和Release配置。
(注意:如果你使用了CocoaPods,請(qǐng)看下面CocoaPods注意項(xiàng)。)
2.為兩種構(gòu)建環(huán)境分別創(chuàng)建配置文件"Settings-Development.plist" 和 "Settings-Production.plist"。3.現(xiàn)在你可以向配置文件中添加任意的配置項(xiàng),但要確保兩個(gè)配置文件中的配置項(xiàng)的key相同。4.打開Project Navigator,選中項(xiàng)目名,然后在下拉菜單中選中Target(注意不是Project)。在Build Phases區(qū)域,在Copy Bundle Resources區(qū)域中移除Target對(duì)兩個(gè)配置文件的引用。
5.添加一個(gè)Run Script Build Phase,選擇Editor -> Add Build Phase -> Add Run Script Build Phase。6.拷貝下面腳本到新創(chuàng)建的Run Script1
2
3
4
5
6 6
7
8 | if [ “${CONFIGURATION}” == “Development” ]; then
cp -r “${PROJECT_DIR}/Settings-Development.plist” “${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Settings.plist”
elif [ “${CONFIGURATION}” == “Production” ]; then
cp -r “${PROJECT_DIR}/Settings-Production.plist” “${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Settings.plist”
fi |
7.下面我們就可以在程序運(yùn)行時(shí)讀取配置文件中的內(nèi)容:1
2
3
4
5
6
7
8
9
10
11
12 | var serverUrl: String = ""
if let filePath = NSBundle.mainBundle().pathForResource("Settings", ofType: "plist") {
let contentsOfFile = NSDictionary(contentsOfFile: filePath)
serverUrl = contentsOfFile?.objectForKey("ServerUrl") as! String
} else {
// no settings!
} |
8.接下來設(shè)置應(yīng)用構(gòu)建時(shí)的配置環(huán)境,點(diǎn)擊菜單欄中的Product -> Scheme -> Edit Scheme,選中左側(cè)Action列表欄中的"Run",然后在右側(cè)選擇Development或Production配置9.同樣,你需要為其他的Action,如Test,Profile,Analyze和Archive選擇構(gòu)建配置。比如,你對(duì)Production進(jìn)行運(yùn)行/測(cè)試時(shí),請(qǐng)確保在將其打包上傳至TestFlight前,把"Archive"Action的構(gòu)建配置設(shè)為"Production"!
CocoaPods注意事項(xiàng):如果在添加新的Devlopment和Production配置之前,你已經(jīng)在項(xiàng)目中使用了CocoaPods,那么就可能會(huì)遇到錯(cuò)誤,比如,“[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target … in your build configuration”,或者與pods相關(guān)的鏈接器錯(cuò)誤。
要解決這些問 題,你需要到Project setting區(qū)域的info欄(和步驟1相同位置),將所有新增配置的"Based on Configuration File" 設(shè)置為 "None",然后運(yùn)行"pod install",強(qiáng)制pod工具為新創(chuàng)建的配置重新生成配置文件。同樣如果后面你又添加了新的配置,你需要重復(fù)上面操作。
接下來 通過這個(gè)框架,你可以在項(xiàng)目配置文件中添加任何配置項(xiàng),并在程序運(yùn)行時(shí)讀取它們。當(dāng)然,如果你的應(yīng)用需要多種演示測(cè)試環(huán)境,你可以根據(jù)需要?jiǎng)?chuàng)建更多構(gòu)建環(huán)境。同樣你也可以在一個(gè)構(gòu)建環(huán)境中添加多個(gè)項(xiàng)目配置文件,但要記住要為每種構(gòu)建環(huán)境創(chuàng)建單獨(dú)的配置文件,另外你需要在Build Phases腳本中將這些配置文件在構(gòu)建時(shí)拷貝到程序包中(參考步驟6)。
本文版權(quán)歸黑馬程序員IOS培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!作者:黑馬程序員IOS培訓(xùn)學(xué)院首發(fā):http://ko1818.cn/news/ios.html