作為一個(gè)前端開發(fā)人員,在開發(fā)過程中,難免與服務(wù)器打交道,同一套代碼,后端為了支持不同的場景,需要部署多個(gè)環(huán)境,比如開發(fā)、測試、生產(chǎn)等。就我們公司的項(xiàng)目而言,有開發(fā)、預(yù)發(fā)布、發(fā)布環(huán)境。如果不做多環(huán)境適配的話,每次想要切換環(huán)境,可能就需要改一大堆代碼,注釋、取消注釋...
我們可以通過Xcode的設(shè)置,來快速切換不同環(huán)境
需求描述:
- 開發(fā)過程中:要隨時(shí)能切換并運(yùn)行任意環(huán)境
- 測試環(huán)境:打包時(shí)生成的是測試環(huán)境地址的測試包
- 預(yù)發(fā)布環(huán)境:打包時(shí)生成的是預(yù)發(fā)布環(huán)境地址的測試包
- 發(fā)布環(huán)境:打包時(shí)生成的是生產(chǎn)環(huán)境地址的正式包
思路:
新建測試環(huán)境Testing、預(yù)發(fā)布環(huán)境Staging、發(fā)布環(huán)境Production幾個(gè)配置,與原來的Debug下的開發(fā)環(huán)境Develop組成四種環(huán)境
Debug模式下:四個(gè)環(huán)境均可運(yùn)行。其他模式下,各自運(yùn)行各自的環(huán)境;

實(shí)現(xiàn)步驟:
1. 選擇項(xiàng)目 - Project - Info - Configuration
點(diǎn)擊 + ,選擇參照release。依次新建Testing、Staging、Production三種配置。

新增配置
2. 項(xiàng)目 - Project - Build Settings - 搜索"custom flags"
參照Debug,修改其余幾種模式,分別給其設(shè)置標(biāo)記。注意,每個(gè)里面有個(gè)$(inherited)也要加上

設(shè)置標(biāo)記
3. 項(xiàng)目 - Project - Build Settiongs 搜索"Preprocessor Macros"
參照Debug,修改其余幾種模式,對預(yù)編譯宏定義進(jìn)行默認(rèn)賦值
宏定義賦值
4. 集成了Cocoapods的,此時(shí)要更新一下pod,重新編譯。
5. 修改運(yùn)行時(shí)的環(huán)境為Staging環(huán)境(只做嘗試,驗(yàn)證宏是否起作用,運(yùn)行時(shí)選擇環(huán)境有其他方法),添加測試代碼,打印當(dāng)前的環(huán)境

至此,多環(huán)境配置成功??梢詤^(qū)分運(yùn)行環(huán)境,并做不同處理了。接下來,可以將不同環(huán)境的域名寫在各自配置中:
1. 添加自定義環(huán)境變量MY_APP_BASE_URL
添加自定義環(huán)境變量

添加自定義環(huán)境變量

2. 將MY_APP_BASE_URL放入info.plist文件中轉(zhuǎn)化成鍵值對,方便取值。

3. 測試,用Bundle.main.infoDictionary!["MY_APP_BASE_URL"] as! String取出當(dāng)前環(huán)境的服務(wù)器地址。

至此,多個(gè)環(huán)境運(yùn)行各自的服務(wù)器地址的需求已完成。接下來實(shí)現(xiàn)Debug模式下切換不同的環(huán)境地址:
以枚舉的方式,選擇debug模式下,運(yùn)行的服務(wù)器地址,只有開發(fā)階段,我們需要在Debug模式下調(diào)試各個(gè)環(huán)境地址,其他幾種模式,都運(yùn)行各自環(huán)境,不需要適配。
Debug模式下切換不同域名也已經(jīng)完成。如果想在設(shè)備上運(yùn)行不同環(huán)境,并且同時(shí)存在,可以接著配置:
-
想要在設(shè)備上,同時(shí)存在各個(gè)環(huán)境的App,需要設(shè)置不同的bundleId。這里僅演示Staging環(huán)境區(qū)分,其他的也可視情況單獨(dú)配置
-
想要不同環(huán)境,使用不同的應(yīng)用名:
-
想要不同環(huán)境,使用不同的AppIcon:



