談到多環(huán)境惨远,相信現(xiàn)在大多公司都至少有2-3個(gè)app環(huán)境了躯枢,比如Test環(huán)境,預(yù)發(fā)環(huán)境環(huán)境刃泡,Release環(huán)境等等巧娱。當(dāng)需要開發(fā)打多個(gè)包的時(shí)候碉怔,一般常見做法就是直接代碼里面修改環(huán)境變量烘贴,改完之后Archive一下就打包了。當(dāng)然這種做法很正確撮胧,只不過不是很優(yōu)雅很高效桨踪。如果搭建好了Jenkins(搭建教程),我們利用它來優(yōu)雅的打包芹啥。如果利用Jenkins來打包锻离,我們就需要來給app來配置一下多個(gè)環(huán)境變量了铺峭。之后Jenkins分別再不同環(huán)境下自動集成即可。所以也方便了很多汽纠。
一.利用Build Configuration來配置多環(huán)境
由于需要配置多個(gè)環(huán)境卫键,并且多個(gè)環(huán)境都需要安裝到手機(jī)上,那么可以配置Build Configuration來完成這個(gè)任務(wù)虱朵。如果Build Configuration還不熟悉的莉炉,可以先溫習(xí)一下官方文檔。
先點(diǎn)擊Project里面找到Configuration碴犬,然后選擇添加絮宁,這里新加一個(gè)Configuration。系統(tǒng)默認(rèn)是2個(gè)服协,一個(gè)Debug绍昂,一個(gè)Release。這里我們需要選擇是復(fù)制一個(gè)Debug還是Release偿荷。Release和Debug的區(qū)別是窘游,Release是不能調(diào)試程序,因?yàn)槟J(rèn)是屏蔽了可調(diào)試的一些參數(shù)跳纳,具體可以看BuildSetting里面的區(qū)別张峰,而且Release編譯時(shí)有做編譯優(yōu)化,會比用Debug打包出來的體積更小一點(diǎn)棒旗。
這里我們選擇一個(gè)Duplicate “Debug” Configuration喘批,因?yàn)槲覀冃碌沫h(huán)境需要debug,添加完了之后就會多了一套Configuration了铣揉,這一套其實(shí)是包含了一些編譯參數(shù)的配置集合饶深。如果此時(shí)項(xiàng)目里面有cocopods的話,打開Configuration Set就會發(fā)現(xiàn)是如下的樣子:
注意:剛剛新建完Build Configuration之后逛拱,這時(shí)如果有pod敌厘,請立即執(zhí)行一下
pod install
如果沒用pod,可以忽略一下這一段朽合。
2. 新建User-defined Build Settings
再次回到Project的Build Settings里面來俱两,Add User-Defined Setting。
我們這里新加入2個(gè)參數(shù)曹步,CustomAppBundleld是為了之后打包可以分開打成多個(gè)包宪彩,這里需要3個(gè)不同的Id,建議是直接在原來的Bundleld加上Configuration的名字即可讲婚。
CustomProductName是為了app安裝到手機(jī)上之后尿孔,手機(jī)上顯示的名字,這里可以按照對應(yīng)的環(huán)境給予描述,例如:測試活合,線上等等雏婶。
修改info.plist文件 和 Images.xcassets
由于我們新添加了2個(gè)CustomAppBundleld 和 CustomProductName,這里我們需要把info.plist里面的Bundle display name修改成我們自定義的這個(gè)字典白指。編譯過程中留晚,編譯器會根據(jù)我們設(shè)置好的Scheme去自己選擇Debug,Release告嘲,TestRelease分別對應(yīng)的ProductName倔丈,如下圖所示:
3. 配置和獲取環(huán)境變量
接下來講幾種動態(tài)配置環(huán)境變量的方法
1. 使用GCC預(yù)編譯頭參數(shù)GCC_PREPROCESSOR_DEFINITIONS
我們進(jìn)入到Build Settings里面,可以找到Apple LLVM Preprocessing状蜗,這里我們可以找到Preprocessor Macros在這里需五,我們是可以加一些環(huán)境變量的宏定義來標(biāo)識符。Preprocessor Macros可以根據(jù)不同的環(huán)境預(yù)先制定不同定義的宏轧坎。
如上圖宏邮,AdHoc = 1 ,DEBUG = 1 ,RELEASE = 1;
有了這些我們預(yù)先設(shè)置的標(biāo)識符之后,我們就可以在代碼里面寫入如下的代碼了缸血。同時(shí)可以配置不同的環(huán)境的域名蜜氨,統(tǒng)計(jì),很多參數(shù)在不同環(huán)境的配置捎泻。
我們可以選擇工程中的Config飒炎,然后點(diǎn)擊Edit scheme, 如圖所示:
然后在運(yùn)行時(shí),就可以選擇Run 笆豁,Info -> Buidl Configuration 中就可以看到之前設(shè)置的Debug , AdHoc , Relaese 郎汪,這樣就可以配置不同的環(huán)境了,不同參數(shù)的設(shè)定都可以根據(jù)自定義的進(jìn)行配置闯狱,如果打包煞赢,也可以選擇Archive ,Build configuration 中也可以設(shè)置Debug , AdHoc ,Release等環(huán)境。
選擇不同的run 的Configuration哄孤,運(yùn)行如下結(jié)果照筑,
可以參考如下demo :iOS 多環(huán)境配置Demo