不少項目在開發時都會常常在開發環境和生產環境之間切換,切換隨之伴來的還有好比更換 App 名稱、Bundle identitier、服務端接口地址等等相關參數和屬性,這個時候咱們就能夠利用 Xcode 提供的 Configuration 來配置不一樣的環境,從而進行快速切換、編譯等等一系列操做。xcode
注: Xcode 中 Build Settings 的全部項均可以針對不一樣的 Configuration 設置不一樣的值ide
定義好不一樣的環境後,你就能夠分別設置 run
、test
、Archive
... 這些操做分別使用哪個 Build Configuration 進行編譯,從而能夠很輕鬆得分離開各個配置環境的設置。好比分離不一樣的服務端開發和正式環境,就能夠利用宏定義進行參數區分(參見後文)輕鬆實現,而後開發的時候須要切換環境測試之類的就能夠直接在 Edit Scheme 裏修改對應的 Configuration,不用再修改代碼。測試
在 Targets -> Build Settings -> Packaging -> Product Bundle Identifier 中設置不一樣的值便可。ui
若是須要實現根據 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
定義好本身的 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
項目名
toPods/Target Support Files/Pods-項目名/Pods-項目名.release.xcconfig
or include thePods/Target Support Files/Pods-項目名/Pods-項目名.release.xcconfig
in your build configuration.