教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

IOS培訓(xùn)實(shí)戰(zhàn)教程之iOS Xcode部署配置

更新時(shí)間:2015年12月28日18時(shí)08分 來源:傳智播客IOS培訓(xùn)學(xué)院 瀏覽次數(shù):

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)簡(jiǎn)潔有效的方法,在這里分享給需要的人。
我們何時(shí)需要考慮不同的部署環(huán)境
任 何需要與后端服務(wù)器通信的APP(最簡(jiǎn)單的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ǎn)單的例子中,我們需要?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)建DevelopmentRelease構(gòu)建環(huán)境
在Project Navigator下,選擇項(xiàng)目名,然后在下拉菜單中選擇Project(注意不是Target),然后選中Info標(biāo)簽欄。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:1ED3B0AB-BBEA-4D0C-831D-5C44650A62A4.png
在"Configurations"下點(diǎn)擊 "+" ,然后選擇 "Duplicate 'Release' Configuration",然后重命名為"Production"。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:5132669B-2C82-4C42-8940-DB79BEC012B2.png
然后重復(fù)上面操作,復(fù)制"Debug"配置,重命名為"Development"。
接著,刪除默認(rèn)的Debug和Release配置。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:42965A68-5F96-4253-BF3C-BC2EAA9E561B.png
(注意:如果你使用了CocoaPods,請(qǐng)看下面CocoaPods注意項(xiàng)。)
2.為兩種構(gòu)建環(huán)境分別創(chuàng)建配置文件"Settings-Development.plist" "Settings-Production.plist"。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:5E5F6318-9485-4431-B4E8-903E3D6A23B8.png
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:F2CE04B0-AD00-4802-A179-BACE27785A83.png
3.現(xiàn)在你可以向配置文件中添加任意的配置項(xiàng),但要確保兩個(gè)配置文件中的配置項(xiàng)的key相同。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:836D04AC-7368-44BD-BA60-C44F15FD43FE.png
4.打開Project Navigator,選中項(xiàng)目名,然后在下拉菜單中選中Target(注意不是Project)。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:8DD05A41-3A34-469F-96F1-EDE4EDAB1C63.png
在Build Phases區(qū)域,在Copy Bundle Resources區(qū)域中移除Target對(duì)兩個(gè)配置文件的引用。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:E9FDDCF3-F83C-4D84-A3EB-0B920A7F4C85.png
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:969C5C57-CC7C-4D5A-9F51-8D77CD5559A1.png
5.添加一個(gè)Run Script Build Phase,選擇Editor -> Add Build Phase -> Add Run Script Build Phase。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:1F42DAE1-8E43-4551-830F-5A306F26DF5D.png
6.拷貝下面腳本到新創(chuàng)建的Run Script
1
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è)選擇DevelopmentProduction配置
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:D3ADD202-A52F-4FFD-BBF6-1C6376E4A65D.png
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:076DE8B7-1E69-498C-9EC9-A6ADB0B30458.png
9.同樣,你需要為其他的Action,如Test,ProfileAnalyzeArchive選擇構(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ù)上面操作。
Macintosh HD:Users:chaizhen:Desktop:文章:iOS Xcode部署配置:iOS Xcode部署配置.resources:E1D3D4C2-4B86-4640-954A-843D9A4E3FC3.png
接下來
 
通過這個(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://m.fskzgqt.cn/ios/
0 分享到:
和我們?cè)诰€交談!