Xcode 使用 Configuration 來配置不一樣的項目環境

不少項目在開發時都會常常在開發環境和生產環境之間切換,切換隨之伴來的還有好比更換 App 名稱、Bundle identitier、服務端接口地址等等相關參數和屬性,這個時候咱們就能夠利用 Xcode 提供的 Configuration 來配置不一樣的環境,從而進行快速切換、編譯等等一系列操做。xcode

xcode_ configuration_list

注: Xcode 中 Build Settings 的全部項均可以針對不一樣的 Configuration 設置不一樣的值ide

使用不一樣的環境配置進行調試

定義好不一樣的環境後,你就能夠分別設置 runtestArchive... 這些操做分別使用哪個 Build Configuration 進行編譯,從而能夠很輕鬆得分離開各個配置環境的設置。好比分離不一樣的服務端開發和正式環境,就能夠利用宏定義進行參數區分(參見後文)輕鬆實現,而後開發的時候須要切換環境測試之類的就能夠直接在 Edit Scheme 裏修改對應的 Configuration,不用再修改代碼。測試

edit_scheme

切換不一樣的 Bundle identifier

在 Targets -> Build Settings -> Packaging -> Product Bundle Identifier 中設置不一樣的值便可。ui

切換不一樣的 App Name

若是須要實現根據 Configuration 設定不一樣的應用顯示名稱,能夠經過增長 User-Define 屬性實現,甚至能夠直接使用 Product Name,這裏說一下前者的設置方法。spa

在 Targets -> Build Settings 頂部 "+" 按鈕彈出菜單中選擇 "Add User-Defined Setting" 來增長一項 User-Defined 屬性,值能夠本身隨意設定,名稱能夠叫 "BUNDLEDISPLAY_NAME",而後在 "xxx-Info.plist" 中的 Bundle display name 項中設置值爲 ${BUNDLE_DISPLAY_NAMEAA},搞定!調試

利用宏定義進行參數區分

若是想在代碼中對不一樣環境進行各自的參數加載或者操做處理,咱們能夠經過預處理宏來判斷,經過給 Configuration 增長宏定義和 #ifdef 預處理命令就能夠實現。code

好比咱們要給一個名爲 DebugBeta 的 Configuration 設定加載非正式環境的服務端接口地址,在 Targets -> Build Settings -> Preprocessor Macros 中給 DebugBeta 設定一個特殊標識就好了,好比 "BETASERVERURL=1"。server

而後經過預處理代碼進行判斷就能夠實現加載不一樣的參數項,好比還能夠設定一些 SDK 區分正式/開發環境的 Key,作一些很是靈活的操做。blog

NSString *serverURL;
#ifdef BETASERVERURL
    serverURL = @"http://xxx";
#else
    serverURL = @"http://yyy";
#endif

Cocoapods 可能會遇到的問題

定義好本身的 Configuration 後,再執行 pod install 可能會遇到相似下面的警告信息,這個時候只須要在 Project -> Info -> Configurations 中自定義的配置 'Based on Configuration File' 設爲 None 就能夠了。接口

[!] 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 項目名 to Pods/Target Support Files/Pods-項目名/Pods-項目名.release.xcconfig or include the Pods/Target Support Files/Pods-項目名/Pods-項目名.release.xcconfig in your build configuration.

相關文章
相關標籤/搜索