Debug宏應(yīng)該在哪里定義?
iOS系統(tǒng)本身就區(qū)分了Configurations選項讓開發(fā)者去修改對應(yīng)的開發(fā)環(huán)境配置, 但是因為很多開發(fā)者卻又在同一個Configuration環(huán)境中自定義了開發(fā)環(huán)境配置的開發(fā), 使得iOS系統(tǒng)本身的配置成為了擺設(shè), 僅僅用于區(qū)分打包方式選項和證書配置。
網(wǎng)絡(luò)環(huán)境切換是每一個互聯(lián)網(wǎng)App開發(fā)者都會頻繁用到的功能, 那么大家都是用什么樣的方式在切換環(huán)境的呢?我本人接觸的項目中最多的就是在預編譯頭文件里面寫一行宏定義, 然后根據(jù)宏定義去判斷當前的環(huán)境。
最典型的例子是在預編譯頭pch文件中添加一行代碼#define DEBUG 1。然后通過這個DEBUG參數(shù)去判斷當前環(huán)境是否處于開發(fā)網(wǎng)絡(luò)或者生產(chǎn)網(wǎng)絡(luò)環(huán)境。
使用DEBUG宏去判斷判斷開發(fā)環(huán)境還是生產(chǎn)環(huán)境沒有任何問題, 關(guān)鍵的問題是我們在什么時候去定義這個宏和怎么去動態(tài)配置這個宏。
開發(fā)環(huán)境的切換在代碼中最實用的還是宏定義, 那么我們怎么樣才能夠讓宏定義動態(tài)可配置呢?
其中一種辦法就是使用GCC預編譯頭參數(shù)GCC_PREPROCESSOR_DEFINITIONS。
- 添加Build Configuration
打開項目進入Xcode的主界面。選擇project->info,找到Configuration,點擊下方的“+”。

從圖中可以看到兩個已經(jīng)添加好的Configuration:Debug和Release。
選擇“duplicate debug configuration”,添加一個新的configuration,命名為Test。

- 在Project文件下的Build Settings對預編譯宏定義進行默認賦值。在Xcode9下的路徑為Build Settings->Apple LLVM 6.x Preprocessing->Preprocessor Macros

這里添加的
DEBUG、Test就會對應(yīng)在項目里生成宏定義。
- 新建并配置xcconfig文件
common + "n", 選擇 iOS -> Other -> Configuration settings file

新建4個xxconfig文件,我采用一下命名:

commonConfig中放入通用的配置,另外三個Config放入各自對應(yīng)的配置。
然后在PCH文件中根據(jù)判斷Debug、Test、Release來引人需要的頭文件
#if Test
#import "ReleaseTestConfig.xcconfig"
#elseif DEBUG
#import "DebugConfig.xcconfig"
#else
#import "ReleaseConfig.xcconfig"
#endif