前言
在開發過程中,肯定會遇到開發環境和正式環境的配置,就比如說:伺服器地址、一些加密的key等等,都會區分測試環境和正式環境;
搭建測試、正式環境,也許有一些公司運維組比較優秀,搭建了測試環境的DNS(或者測試環境的wifi),使用者通過手動切換DNS地址(或切換wifi),來訪問測試環境,這樣是最好的,但並不是所有公司都這麼“好”,很多還是要開發自己實現;
做法1(low)
有一做法(不推薦)是在程式碼整兩個巨集定義,如下:
通過註釋程式碼來切換環境,這樣也能達到目的,手動切換的方式實在容易犯錯,不推薦;
做法2(good)
為了解決手動修改的問題,通過Debug模式判斷來定義,這樣就用修改程式碼了;
通常,這種方式的結果就是你的.h檔案,看上去感覺很雜亂,不雅觀,還沒有達到完全解偶;
做法3(better)
最近開發過程中發現一種可解耦工程的設定方法:Configuration Settings File(.xcconfig)
Xcode中可以建立自定義.xcconfig配置檔案,然後在工程的Debug模式、Release模式選擇對應的.xcconfig配置檔案,這樣就能達到Dubug的程式碼和Release的程式碼區分開來維護,perfect!
具體操作
1、新建.xcconfig配置檔案:
一般會新建三個:Common.xcconfig, Debug.xcconfig, Release.xcconfig,由命名就能清晰知道Common是公用的,Debug和Release實在各自模式下獨立的;
2、建立好檔案之後,切換到PROJECT—->info—>Configurations下,對應的target下,分別配置Debug和Release模式下對應的.xcconfig配置檔案,直接選擇.xcconfig對應的檔名字即可
3、分別在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
複製程式碼
根據自己專案所需來玩!
實踐是檢驗真理的唯一標準(用程式碼說話)...