前言:每次app在Release和Debug模式下都要來回改正式與測試的 BaseUrl以及其他的url或者常量,有可能忘記改,我們就上線,結果就可想而知,於是為了避免手動更改的麻煩和犯錯誤,我們才去配置環境。
使用.h檔案配置巨集定義
一般我們會用標頭檔案配置環境,在需要使用的時候匯入標頭檔案即可,這樣會更加簡潔,職能更加專一,更好維護, 程式碼如下:
#ifdef DEBUG
#define BaseURL @"https://test.app/api/"
#else
#define BaseURL @"https://app/api/"
#endif
複製程式碼
但是這不是最好的方式,最好的方式通過Xcode
中的Configurations Setting Fil(.xcconfig)
來解決,這應該是最優的實現方式,從而根據Debug
和Release
來選擇相應的環境。
使用.xcconfig配置步驟
1、建立三個 Configuration Settings File
檔案,該檔案的字尾為.xcconfig
, 三個檔案的命名分別命名為Common.xcconfig
, Debug.xcconfig
, Release.xcconfig
, 其中 Debug.xcconfig
和Release.xcconfig
可以使用#include
來包含Common.xcconfig
配置檔案, 注意在建立.xcconfig
的時候Xcode預設是不會選中Targets的,注意要選中!
提示:
Common.xcconfig
,Debug.xcconfig
,Release.xcconfig
三個檔案的名字自己可以隨便起,不想改就以這三個名字就好,下面我就把這三個名字前都加上JK
,如:JKCommon.xcconfig
,JKDebug.xcconfig
,JKRelease.xcconfig
。
2、開啟xcode,新建new file,選擇Configuration Setting File
,並選中相應的Targets,如下圖:
3、修改Debug
和 Release
模式下的的配置,把工程切換到PROJECT
—> info
—> Configurations
下,分別 配置Debug
和Release
模式下對應的 .xcconfig
配置檔案,當建立了.xcconfig
檔案後,在每個模式下自動作為一個選項來選擇,這樣直接選擇.xcconfig
對應的檔名字即可,如下圖:
4、JKDebug.xcconfig
配置
#include "JKCommon.xcconfig"
// 測試下基礎的URL
JKURL = @"https:/$()/test.com/api/api/"
// 是測試的環境
JK_IS_PRODUCATION = NO
複製程式碼
5、JKRelease.xcconfig
配置
#include "JKCommon.xcconfig"
// 正式下基礎的URL
JKURL = @"https:/$()/app.com/api/api/"
// 是正式的環境
JK_IS_PRODUCATION = YES
複製程式碼
提示:在
//
之間使用$()
來轉義,如:JKURL = @"https:/$()/app.com/api/api/"
6、JKCommon.xcconfig
配置
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) JKURL='$(JKURL)' JK_IS_PRODUCATION='$(JK_IS_PRODUCATION)'
複製程式碼
提示:
Common.xconfig
中第一個鍵的配置必須有 :GCC_PREPROCESSOR_DEFINITIONS = $(inherited)
,沒有Xcode會報錯;- 自定義鍵時的語法:
巨集名='$(key)'
, 在程式碼或其他地方使用巨集名來引用,通過key來指定每個模式下的對應的自定義鍵的名字,通常將巨集的名字和key的名字保持一致,注意 等號前後一定不能有空格;- 特別注意:
Common.xconfig
中第一個key是GCC_PREPROCESSOR_DEFINITIONS = $(inherited)
後面跟自定義的key,注意在第一個key後面跟上自己定義的key的時候一定不要回車換行,敲一個空格,然後在同一行後面追加就行了,換行會編譯錯誤,切記!
7、在 TARGETS
—> Build Settings
—> Preprocessor Macros
下檢視自己的配置,如圖:
測試
上面配置完,我們來測試一下是否好使。
NSLog(@"JKURL=%@",JKURL);
複製程式碼
在 Debug 模式下測試結果:
JKURL=https://test.com/api/api/
複製程式碼
在 Release 模式下測試結果:
JKURL=https://app.com/api/api/
複製程式碼
補充:以上設定在OC中好使,在swift中不好使,swift設定需要改一下
在
//
之間使用 反斜槓\
來轉義,如:JKURL = app.com/api/api/Info.plist 配置
讀取配置