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

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

- 在Project文件下的Build Settings對(duì)預(yù)編譯宏定義進(jìn)行默認(rèn)賦值。在Xcode9下的路徑為Build Settings->Apple LLVM 6.x Preprocessing->Preprocessor Macros

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

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

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