摘要
在我們實(shí)際開發(fā)中剂邮,后臺服務(wù)器一般都會有幾套地址,如:測試乐埠,預(yù)生產(chǎn)抗斤,生產(chǎn)。這時(shí)丈咐,我們項(xiàng)目打不同環(huán)境包時(shí)瑞眼,如果通過注釋代碼或修改域名也是可以達(dá)到目的。但是這樣比較煩鎖還容易出錯(cuò)棵逊。像我們公司伤疙,還有一套性能測試環(huán)境,所有的第三方接口處理都需要屏蔽辆影,如果還這樣來修改徒像,熟悉代碼還好,幾分鐘可以注釋好蛙讥,但是對于一個(gè)不熟悉的同事锯蛀,那么就會顯得舉步最艱難了,于是這篇文章講述下次慢,只通過修改Xcode中scheme的configaration配置項(xiàng)旁涤,選擇你要的環(huán)境,一步切換環(huán)境迫像,簡單實(shí)用且不會出錯(cuò)劈愚。
使用場景
針對不對的域名或環(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為性能測試。分別實(shí)現(xiàn)兩套不同的環(huán)境浸卦。
-
三署鸡、修改build settings下的Preprocessor Macros下對應(yīng)的值
scheme3.png
注意:經(jīng)測試,這一步完全可以省略限嫌,也是可能實(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,不然選擇其它配置也會跑到DEBUG環(huán)境下的代碼塞茅。
測試
-
配置選擇,如圖亩码,在run模型下,build configuration選擇不同的配置野瘦,然后運(yùn)行程序描沟,會執(zhí)行對應(yīng)的代碼,如果打包鞭光,在archive模型下吏廉,去選擇build configuration即可。
scheme5.png
- 測試示例代碼
#if XYJDEBUG // 測試環(huán)境
let baseUrl = "https://test.baidu.com/"
#elseif Pre // 預(yù)生產(chǎn)
let baseUrl = "https://pre.baidu.com/"
#elseif Test // 性能測試
let baseUrl = "https://functionTest.baidu.com/"
#else // 生產(chǎn)
let baseUrl = "https://app.baidu.com/"
#endif
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 測試代碼
testPrint()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func testPrint() -> Void {
//打印地址
print("請求的基址為:\(baseUrl)")
#if XYJDEBUG
print("測試環(huán)境")
#elseif Pre
print("Pre環(huán)境")
#elseif Test
print("Test性能測試環(huán)境")
#else // 生產(chǎn)
print("生產(chǎn)環(huán)境")
#endif
}
}
cocoapods報(bào)錯(cuò)
-
如果項(xiàng)目中使用了cocoapods管理第三方惰许,那么選擇你新創(chuàng)建出來的項(xiàng)目build時(shí)席覆,會報(bào)找不到第三方庫錯(cuò)誤。解決辦法如下:
configuration.png
寫在最后
很多功能都可以通過這個(gè)實(shí)現(xiàn)多套環(huán)境(通過修改build settings里的一般都可以)啡省,如:appicon,appName,bundleId娜睛,info.plist等。