前言
? ? ?在項目開發(fā)過程中厘肮,我們通常會有多個項目環(huán)境,比如開發(fā)舞虱、測試欢际、預(yù)發(fā)、正式環(huán)境等矾兜,而Xcode默認(rèn)是只有debug和release兩種環(huán)境的,并且切換起來不是那么方便损趋。當(dāng)需要開發(fā)打多個包的時候,一般常見做法就是直接代碼里面修改環(huán)境變量椅寺,改完之后Archive一下就打包了浑槽。當(dāng)然這種做法沒問題,只不過不是很優(yōu)雅很高效返帕。為了更優(yōu)雅的解決這個問題桐玻,我們可以利用xcode提供的 Targets、scheme以及xcconfig來解決這個問題荆萤。
目錄
1镊靴、通過Targets來實現(xiàn)多環(huán)境配置
2、通過Build Configuration來實現(xiàn)多環(huán)境配置
3链韭、通過xcconfig來實現(xiàn)多環(huán)境配置
一偏竟、通過Targets來實現(xiàn)多環(huán)境配置
1、復(fù)制Targets
新建Xcode時會自動創(chuàng)建一個默認(rèn)的Target梧油,我們?nèi)绻约盒略龅脑捝凰剩梢酝ㄟ^復(fù)制的方式快捷創(chuàng)建第二個,復(fù)制會將已有的資源以及工程屬性copy一份儡陨。
2、修改復(fù)制后Target的名稱骗村、生成的對應(yīng)info.plist文件名稱嫌褪,修改target相關(guān)的info.plist文件配置
3、設(shè)置預(yù)編譯宏
4胚股、根據(jù)不同的配置來加載不同的文件或者變量
5笼痛、其他應(yīng)用
? ? ? 給不同的target配置不同的Bundle Identifier以及圖標(biāo)和名稱,來實現(xiàn)擁有相似功能的多app開發(fā)琅拌。共用文件時缨伊,用宏區(qū)!但有些文件就共用就不方便进宝,如Info.plist文件刻坊。不共用文件,就設(shè)置選擇屬于自己的Target
二党晋、通過Build Configuration來實現(xiàn)多環(huán)境
1谭胚、新建Build Configuration
? ? ? ?通過Project里的info找到Configuration徐块,然后選擇添加新的Configuration。系統(tǒng)默認(rèn)Debug和Release兩種灾而。這里我們需要選擇是復(fù)制一個Debug還是Release胡控。值得注意的是,Release默認(rèn)是進(jìn)行了脫符號處理旁趟,編譯出來的包體積回比Debug模式要小一點昼激,會屏蔽部分參數(shù),具體可以通過BuildSetting里面的配置來查看區(qū)別锡搜。
2、新建Scheme
為新的Configuration新建一個編譯Scheme,使用Manage Scheme添加Scheme
通過Edit scheme 來編輯各個Scheme對應(yīng)的Build Configuration
以上多環(huán)境已經(jīng)好啦余爆,現(xiàn)在舉個??:
我們通過User-Define來添加HOST_URL來作為請求的服務(wù)器地址,在不同的scheme環(huán)境下配置不同的地址
通過info.plist文件來暴露這個變量
<key>HOST_URL</key>
<string>${HOST_URL}</string>
最后在項目里通過切換不同的scheme就可以打印各環(huán)境下的HOST_URL啦
項目里的bundle id還有圖標(biāo)也可以通過這種方式來配置不同環(huán)境下的
三夸盟、通過xcconfig文件來實現(xiàn)多環(huán)境
多環(huán)境配置
1蛾方、新建一個配置目錄,在目錄里new兩個xcconfig文件上陕,注意的是這兒文件名命名規(guī)矩一般是遵循:文件夾名+ APP名 + 環(huán)境名
2桩砰、新建文件后我們在project里面設(shè)置一下
這里各環(huán)境對應(yīng)的config文件已經(jīng)配置好了,現(xiàn)在我們在文件里添加變量,并通過info.plist文件暴露出該變量
<key>HOST_URL</key>
<string>${HOST_URL}</string>
通過info.plist文件訪問這個變量的值释簿,可以看到不同環(huán)境下變量的值是不一樣的
注意:
在xcconfig文件里的的雙斜線會被認(rèn)為是注釋亚隅,我們需要對服務(wù)器地址的雙斜線進(jìn)行處理一下
? ?我們一般對動態(tài)庫配置是通過build setting中的Other Linker Flags來處理的,在xcconfig文件中只需添加OTHER_LDFLAGS?就可以對Other Linker Flags添加動態(tài)庫
? ? ? ? 其實OTHER_LDFLAGS便是裝備到鏈接器里邊庶溶,本質(zhì)上Config文件是key-value方法進(jìn)行裝備的煮纵,已然OTHER_LDFLAGS能夠裝備,那buildSetting里邊悉數(shù)涉及到環(huán)境變量的參數(shù)都能裝備偏螺,還有許多參數(shù)能夠裝備行疏,詳細(xì)能夠查看xcodebuildsettings這個網(wǎng)站。
xcconfig沖突
? ? ? ?如果我們在項目中運用cocoapods套像,項目會幫我們生成一組xcconfig文件酿联,然后pod install時會發(fā)現(xiàn)cocoapods會報錯這個警告:
? ? ? 從警告可以看出cocoapods發(fā)現(xiàn)咱們自己裝備了config文件,所以它沒有幫咱們裝備夺巩。我們可以將cocoapods生成的config文件導(dǎo)入到咱們自界說的config文件里邊贞让,而導(dǎo)入方法便是經(jīng)過include + 文件途徑,導(dǎo)入后柳譬,咱們在進(jìn)行pod install喳张,發(fā)現(xiàn)警告消除了
當(dāng)兩個config文件都有同一個配置的話會發(fā)成沖突,只生成我們配置文件的變量征绎,這個時候我們可以通過$(inherited)處理
$(inherited) :是繼承的意思蹲姐,它會將導(dǎo)入的Config文件里相同變量的值拼接起來磨取,可是在buildSetting里邊只會顯現(xiàn)$(inherited)、里邊本身所寫的柴墩,還有裝備的config文件里邊的信息忙厌,實際上所有的信息都是導(dǎo)入的