摘要
在我們實(shí)際開發(fā)中,后臺(tái)服務(wù)器一般都會(huì)有幾套地址,如:測(cè)試,預(yù)生產(chǎn),生產(chǎn)。這時(shí),我們項(xiàng)目打不同環(huán)境包時(shí),如果通過注釋代碼或修改域名也是可以達(dá)到目的。但是這樣比較煩鎖還容易出錯(cuò)。像我們公司,還有一套性能測(cè)試環(huán)境,所有的第三方接口處理都需要屏蔽,如果還這樣來修改,熟悉代碼還好,幾分鐘可以注釋好,但是對(duì)于一個(gè)不熟悉的同事,那么就會(huì)顯得舉步最艱難了,于是這篇文章講述下,只通過修改Xcode中scheme的configaration配置項(xiàng),選擇你要的環(huán)境,一步切換環(huán)境,簡(jiǎn)單實(shí)用且不會(huì)出錯(cuò)。
使用場(chǎng)景
針對(duì)不對(duì)的域名或環(huán)境,實(shí)現(xiàn)打包或運(yùn)行的代碼不一致。
步驟
-
一、創(chuàng)建一個(gè)configuration
scheme1.png
如上圖,一般我們都是直接Duplicate Debug,因?yàn)閞elease模型是不支持?jǐn)帱c(diǎn)調(diào)試的。
-
二、然后我們就可以在scheme中看到我們新添加的
scheme2.png
這里我添加了2個(gè)環(huán)境,一個(gè)Pre為預(yù)生產(chǎn),一個(gè)Test為性能測(cè)試。分別實(shí)現(xiàn)兩套不同的環(huán)境。
-
三、修改build settings下的Preprocessor Macros下對(duì)應(yīng)的值
scheme3.png
注意:經(jīng)測(cè)試,這一步完全可以省略,也是可能實(shí)現(xiàn)功能的。 -
四、各個(gè)配置下添加自定義標(biāo)簽other swift flags,如下圖
scheme4.png
這一步才是重點(diǎn),我們代碼中就是通過判斷flags來實(shí)現(xiàn)。
注意:Debug下,默認(rèn)是有一個(gè)DEBUG標(biāo)簽,代碼中盡量不要用,而是用自己自定義的XYJDEBUG,不然選擇其它配置也會(huì)跑到DEBUG環(huán)境下的代碼。
測(cè)試
-
配置選擇,如圖,在run模型下,build configuration選擇不同的配置,然后運(yùn)行程序,會(huì)執(zhí)行對(duì)應(yīng)的代碼,如果打包,在archive模型下,去選擇build configuration即可。
scheme5.png
- 測(cè)試示例代碼
#if XYJDEBUG // 測(cè)試環(huán)境
let baseUrl = "https://test.baidu.com/"
#elseif Pre // 預(yù)生產(chǎn)
let baseUrl = "https://pre.baidu.com/"
#elseif Test // 性能測(cè)試
let baseUrl = "https://functionTest.baidu.com/"
#else // 生產(chǎn)
let baseUrl = "https://app.baidu.com/"
#endif
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 測(cè)試代碼
testPrint()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func testPrint() -> Void {
//打印地址
print("請(qǐng)求的基址為:\(baseUrl)")
#if XYJDEBUG
print("測(cè)試環(huán)境")
#elseif Pre
print("Pre環(huán)境")
#elseif Test
print("Test性能測(cè)試環(huán)境")
#else // 生產(chǎn)
print("生產(chǎn)環(huán)境")
#endif
}
}
cocoapods報(bào)錯(cuò)
-
如果項(xiàng)目中使用了cocoapods管理第三方,那么選擇你新創(chuàng)建出來的項(xiàng)目build時(shí),會(huì)報(bào)找不到第三方庫錯(cuò)誤。解決辦法如下:
configuration.png
寫在最后
很多功能都可以通過這個(gè)實(shí)現(xiàn)多套環(huán)境(通過修改build settings里的一般都可以),如:appicon,appName,bundleId,info.plist等。