Xcode配置測試環境和線上環境

李華光發表於2019-01-23

前言:每次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)來解決,這應該是最優的實現方式,從而根據DebugRelease來選擇相應的環境。

使用.xcconfig配置步驟

1、建立三個 Configuration Settings File 檔案,該檔案的字尾為.xcconfig, 三個檔案的命名分別命名為Common.xcconfig, Debug.xcconfig, Release.xcconfig, 其中 Debug.xcconfigRelease.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,如下圖:

1

2

3、修改DebugRelease 模式下的的配置,把工程切換到PROJECT—> info —> Configurations下,分別 配置DebugRelease模式下對應的 .xcconfig 配置檔案,當建立了.xcconfig檔案後,在每個模式下自動作為一個選項來選擇,這樣直接選擇.xcconfig 對應的檔名字即可,如下圖:

3

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 下檢視自己的配置,如圖:

4

測試

上面配置完,我們來測試一下是否好使。

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 配置

1

讀取配置

2

參考

相關文章