在開發過程當中,確定會遇到開發環境和正式環境的配置,就好比說:服務器地址、一些加密的key等等,都會區分測試環境和正式環境;git
搭建測試、正式環境,也許有一些公司運維組比較優秀,搭建了測試環境的DNS(或者測試環境的wifi),用戶經過手動切換DNS地址(或切換wifi),來訪問測試環境,這樣是最好的,但並非全部公司都這麼「好」,不少仍是要開發本身實現;github
有一作法(不推薦)是在代碼整兩個宏定義,以下: 服務器
經過註釋代碼來切換環境,這樣也能達到目的,手動切換的方式實在容易犯錯,不推薦;運維
爲了解決手動修改的問題,經過Debug模式判斷來定義,這樣就用修改代碼了;測試
一般,這種方式的結果就是你的.h文件,看上去感受很雜亂,不雅觀,尚未達到徹底解偶;ui
最近開發過程當中發現一種可解耦工程的設置方法:Configuration Settings File(.xcconfig)加密
Xcode中能夠建立自定義.xcconfig配置文件,而後在工程的Debug模式、Release模式選擇對應的.xcconfig配置文件,這樣就能達到Dubug的代碼和Release的代碼區分開來維護,perfect!spa
一、新建.xcconfig配置文件:3d
通常會新建三個:Common.xcconfig, Debug.xcconfig, Release.xcconfig,由命名就能清晰知道Common是公用的,Debug和Release實在各自模式下獨立的;code
二、建立好文件以後,切換到PROJECT—->info—>Configurations下,對應的target下,分別配置Debug和Release模式下對應的.xcconfig配置文件,直接選擇.xcconfig對應的文件名字便可
三、分別在Debug.xcconfig、Release.xcconfig中定義鍵值對,在Common.xcconfig中暴露鍵,這樣就能直接調用; ps:在每一個模式下,key的命名要一致;
值得注意的是:
在Common中,定義鍵值對前面,要加上:GCC_PREPROCESSOR_DEFINITIONS = $(inherited) ,
表示要加入預處理,即加上這句,代碼中才能夠調到;
複製代碼
配置好以後,會發現Preprocessor Macros 會出現你剛剛配置的鍵值對,這就是GCC_PREPROCESSOR_DEFINITIONS = $(inherited)這句的效果,此時代碼中才能訪問自定義的鍵;
Debug模式下:
Release模式下:
完成!!!
附上配置xcconfig的demo:XcodeConfigDemo
還能夠配置其餘信息,其實xcconfig用來保存build setting 鍵值對的純文本文件,這裏配置的鍵值對會覆蓋 build setting 中的值, 以下:
ENABLE_BITCODE = NO
MACH_O_TYPE = staticlib
VALID_ARCHS = arm64 armv7
IPHONEOS_DEPLOYMENT_TARGET = 7.0
複製代碼
根據本身項目所需來玩!
實踐是檢驗真理的惟一標準(用代碼說話)...