你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> 【譯】iOS Xcode部署配置

【譯】iOS Xcode部署配置

編輯:IOS開發基礎

Learning-how-to-learn.jpg

本文由CocoaChina譯者 @張小剛喲 翻譯,作者:Nicholas Solter
原文:Xcode Deployment Configurations for iOS


幾乎所有移動應用,包括我正在編寫的一款iOS應用 Emmerge 都需要與服務器交互。從第一次向團隊成員演示應用開始,我們就開始找一種更快構建不同環境產品的方法。一開始我們只需要修改不同環境下的服務器地址,但在經過幾天來回的在配置文件中切換本地和遠程服務器地址後,我對這種重復工作煩透了,於是到Google查找解決方法。在搜索一段時間後,我卻沒用找到如何在Xcode中為每一種構建環境分別設置配置的方法,於是在經過大量搜索stack overflow和博客後,我總結了一種相當簡潔有效的方法,在這裡分享給需要的人。

我們何時需要考慮不同的部署環境

任何需要與後端服務器通信的APP(最簡單的APP除外)至少需要一個可配置的服務器URL。又或者你的應用使用了第三方平台登錄,如Facbook、Google或者類似的系統,並且在每種構建環境下又需要不同的第三方平台,那麼就需要為不同構建環境設置不同的平台App IDs。又或者你的應用需要收集分析數據,那麼你可能就需要配置不同的 mixpanel ID。

具體設置方法

下面簡單的例子中,我們需要創建Development和Release兩種環境,最終我們要為每種環境創建自己的配置文件(Setting.plist),並且在應用運行時只加載相應環境的配置文件。

你可以下載 Demo程序 跟著步驟操作一遍。

1.創建Development和Release構建環境

在Project Navigator下,選擇項目名,然後在下拉菜單中選擇Project(注意不是Target),然後選中Info標簽欄。

1-bq8nwaYr_VHSUpg6IFw_zw.png

在"Configurations"下點擊 "+" ,然後選擇 "Duplicate 'Release' Configuration",然後重命名為"Production"。

02.png

然後重復上面操作,復制"Debug"配置,重命名為"Development"。

接著,刪除默認的Debug和Release配置。

033.png

(注意:如果你使用了CocoaPods,請看下面CocoaPods注意項。)

2.為兩種構建環境分別創建配置文件"Settings-Development.plist" 和 "Settings-Production.plist"。

04.png

05.png

3.現在你可以向配置文件中添加任意的配置項,但要確保兩個配置文件中的配置項的key相同。

005.png

4.打開Project Navigator,選中項目名,然後在下拉菜單中選中Target(注意不是Project)。

044.png

在Build Phases區域,在Copy Bundle Resources區域中移除Target對兩個配置文件的引用。

045.png

046.png

5.添加一個Run Script Build Phase,選擇Editor -> Add Build Phase -> Add Run Script Build Phase。

050.png

6.拷貝下面腳本到新創建的Run Script

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.下面我們就可以在程序運行時讀取配置文件中的內容:

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.接下來設置應用構建時的配置環境,點擊菜單欄中的Product -> Scheme -> Edit Scheme,選中左側Action列表欄中的"Run",然後在右側選擇Development或Production配置

08.png

081.png

9.同樣,你需要為其他的Action,如Test,Profile,Analyze和Archive選擇構建配置。比如,你對Production進行運行/測試時,請確保在將其打包上傳至TestFlight前,把"Archive"Action的構建配置設為"Production"!

CocoaPods注意事項:

如果在添加新的Devlopment和Production配置之前,你已經在項目中使用了CocoaPods,那麼就可能會遇到錯誤,比如,“[!] 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相關的鏈接器錯誤。

要解決這些問題,你需要到Project setting區域的info欄(和步驟1相同位置),將所有新增配置的"Based on Configuration File" 設置為 "None",然後運行"pod install",強制pod工具為新創建的配置重新生成配置文件。同樣如果後面你又添加了新的配置,你需要重復上面操作。

15.png

接下來

通過這個框架,你可以在項目配置文件中添加任何配置項,並在程序運行時讀取它們。當然,如果你的應用需要多種演示測試環境,你可以根據需要創建更多構建環境。同樣你也可以在一個構建環境中添加多個項目配置文件,但要記住要為每種構建環境創建單獨的配置文件,另外你需要在Build Phases腳本中將這些配置文件在構建時拷貝到程序包中(參考步驟6)。

反饋

我非常樂意收到相關的任何建議,尤其是可以簡化這個過程或者有其他思路的建議。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved