前言:每次app在Release和Debug模式下都要來回改正式與測試的 BaseUrl以及其餘的url或者常量,有可能忘記改,咱們就上線,結果就可想而知,因而爲了不手動更改的麻煩和犯錯誤,咱們纔去配置環境。swift
通常咱們會用頭文件配置環境,在須要使用的時候導入頭文件便可,這樣會更加簡潔,職能更加專注,更好維護, 代碼以下:api
#ifdef DEBUG
#define BaseURL @"https://test.app/api/"
#else
#define BaseURL @"https://app/api/"
#endif
複製代碼
可是這不是最好的方式,最好的方式經過Xcode
中的Configurations Setting Fil(.xcconfig)
來解決,這應該是最優的實現方式,從而根據Debug
和Release
來選擇相應的環境。xcode
一、建立三個 Configuration Settings File
文件,該文件的後綴爲.xcconfig
, 三個文件的命名分別命名爲Common.xcconfig
, Debug.xcconfig
, Release.xcconfig
, 其中 Debug.xcconfig
和Release.xcconfig
可使用#include
來包含Common.xcconfig
配置文件, 注意在建立.xcconfig
的時候Xcode默認是不會選中Targets的,注意要選中!bash
提示:
Common.xcconfig
,Debug.xcconfig
,Release.xcconfig
三個文件的名字本身能夠隨便起,不想改就以這三個名字就好,下面我就把這三個名字前都加上JK
,如:JKCommon.xcconfig
,JKDebug.xcconfig
,JKRelease.xcconfig
。app
二、打開xcode,新建new file,選擇Configuration Setting File
,並選中相應的Targets,以下圖: ide
三、修改Debug
和 Release
模式下的的配置,把工程切換到PROJECT
—> info
—> Configurations
下,分別 配置Debug
和Release
模式下對應的 .xcconfig
配置文件,當建立了.xcconfig
文件後,在每一個模式下自動做爲一個選項來選擇,這樣直接選擇.xcconfig
對應的文件名字便可,以下圖:測試
四、JKDebug.xcconfig
配置ui
#include "JKCommon.xcconfig"
// 測試下基礎的URL
JKURL = @"https:/$()/test.com/api/api/"
// 是測試的環境
JK_IS_PRODUCATION = NO
複製代碼
五、JKRelease.xcconfig
配置url
#include "JKCommon.xcconfig"
// 正式下基礎的URL
JKURL = @"https:/$()/app.com/api/api/"
// 是正式的環境
JK_IS_PRODUCATION = YES
複製代碼
提示:在
//
之間使用$()
來轉義,如:JKURL = @"https:/$()/app.com/api/api/"
spa
六、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的時候必定不要回車換行,敲一個空格,而後在同一行後面追加就好了,換行會編譯錯誤,切記!
七、在 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 配置
![]()
讀取配置
![]()