Xcode配置檔案xcconfig

啊豪發表於2019-03-02

前言

在開發過程中,肯定會遇到開發環境和正式環境的配置,就比如說:伺服器地址、一些加密的key等等,都會區分測試環境和正式環境;

搭建測試、正式環境,也許有一些公司運維組比較優秀,搭建了測試環境的DNS(或者測試環境的wifi),使用者通過手動切換DNS地址(或切換wifi),來訪問測試環境,這樣是最好的,但並不是所有公司都這麼“好”,很多還是要開發自己實現;

做法1(low)

有一做法(不推薦)是在程式碼整兩個巨集定義,如下:

Xcode配置檔案xcconfig

通過註釋程式碼來切換環境,這樣也能達到目的,手動切換的方式實在容易犯錯,不推薦;

做法2(good)

為了解決手動修改的問題,通過Debug模式判斷來定義,這樣就用修改程式碼了;

Xcode配置檔案xcconfig

通常,這種方式的結果就是你的.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實在各自模式下獨立的;

Xcode配置檔案xcconfig

2、建立好檔案之後,切換到PROJECT—->info—>Configurations下,對應的target下,分別配置Debug和Release模式下對應的.xcconfig配置檔案,直接選擇.xcconfig對應的檔名字即可

Xcode配置檔案xcconfig

3、分別在Debug.xcconfig、Release.xcconfig中定義鍵值對,在Common.xcconfig中暴露鍵,這樣就能直接呼叫;
ps:在每個模式下,key的命名要一致;

Xcode配置檔案xcconfig
Xcode配置檔案xcconfig
Xcode配置檔案xcconfig
值得注意的是:
在Common中,定義鍵值對前面,要加上:GCC_PREPROCESSOR_DEFINITIONS = $(inherited) ,
表示要加入預處理,即加上這句,程式碼中才可以調到;
複製程式碼
Xcode配置檔案xcconfig

配置好之後,會發現Preprocessor Macros 會出現你剛剛配置的鍵值對,這就是GCC_PREPROCESSOR_DEFINITIONS = $(inherited)這句的效果,此時程式碼中才能訪問自定義的鍵;

程式碼呼叫

Xcode配置檔案xcconfig

執行結果:

Debug模式下:

Xcode配置檔案xcconfig

Release模式下:

Xcode配置檔案xcconfig

完成!!!

附上配置xcconfig的demo:XcodeConfigDemo

額外:

還可以配置其他資訊,其實xcconfig用來儲存build setting 鍵值對的純文字檔案,這裡配置的鍵值對會覆蓋 build setting 中的值,
如下:

ENABLE_BITCODE = NO
MACH_O_TYPE = staticlib
VALID_ARCHS = arm64 armv7
IPHONEOS_DEPLOYMENT_TARGET = 7.0
複製程式碼

根據自己專案所需來玩!


實踐是檢驗真理的唯一標準(用程式碼說話)…

相關文章