需求一:不少公司的app都分紅debug環境和release環境(多個接口域名),平時開發和測試都在debug環境,打包上線的時候才切換到release環境;需求二:公司要求製做馬甲包,即在原來app的基礎上,只修改app的名稱,圖標,LaunchImage,替換app中帶有app名稱的文本,並用另外一個開發者帳號發佈,馬甲包的數量不定。手動在代碼裏更改環境變量,替換圖片確定是不可取的,這裏咱們採用Configuration來實現這兩個需求。定義好不一樣的Configuration後,就能夠分別設置 Build、Archive、Test等操做分別使用哪個 Configuration 進行編譯,從而能夠輕鬆地分離開各個環境變量的設置。git
點擊Project->Info,默認有Debug和Release兩個Configuration,顧名思義Debug用於調試,Release用於發佈,區別是Debug默認添加了預編譯宏DEBUG=1,Release不能調試程序,而且Release編譯時作了優化。點擊Configurations選項卡下面的加號,分別複製一個Debug和Release的Configuration,這裏我取名爲Debug_a和Release_a,表明馬甲包a的兩個Configurationgithub
1.新建configurationapi
2.馬甲包a的configurationapp
注意:新建完Configuration以後請從新執行pod install命令測試
爲上一步新建的Configuration再新建Scheme,這裏我新建了兩個Scheme,命名爲馬甲包a_release和馬甲包a_debug,在Manage Schemes裏面把右邊的Shared選項勾選,不然在git上沒法同步。優化
新建Schemeui
勾選Sharedspa
在Edit Scheme裏面把Run和Archive模式改爲對應新建的Build Configurationdebug
新建一個App Icon和Launch Image文件夾,從新命名,拖入圖片。3d
新建AppIcon和LaunchImage
選擇Targets->Build Settings,搜索asset,在Asset Catalog App Icon Set Name 和 Asset Catalog Launch Image Set Name 配置各個Configuration所對應的圖片文件夾名稱。
在Project->Build Settings 點擊加號選擇Add User-Defined Setting],即增長用戶自定義設置,添加一個App名稱的設置,爲不一樣的Configuration設置不一樣的App名字。
而後在info.plist中設置Bundle display name爲咱們自定義的設置,${CusomAppName}。
不一樣的馬甲包多是由不一樣的開發者帳號發佈的,因此須要配置對應的bundle id 和 證書。
bundle id 在Targets->Build Settings 中的Product Bundle Identifier設置。
證書配置以下圖
在Targets->Build Settings->Preprocessor Macros中,能夠根據Configuration配置不一樣的預編譯宏,根據這個預編譯宏的不一樣,在代碼裏面也能夠有不一樣的配置,好比渠道號,接口域名等。
#ifdef MaJiaA #define kchannelCode @"majia_1" #endif #ifdef DEBUG NSString *kServiceDomain = @"http://api.test"; #else NSString *kServiceDomain = @"http://api.release"; #endif
用這種方法能比較方便地實現多環境變量的配置,具體demo能夠在github上下載。