有時為了開發需求,專案中經常要用到多種環境配置,比如開發環境,測試環境,預發環境,以及正式環境等,對於這個問題,一開始想到的是在pch中用一個變數去控制,每次打包都去修改這個變數的值,從來來達到實現不同環境的配置,但這種方式明顯太Low,xcode可以在同一個app中設定不同的環境變數(系統預設的是DEBUG和release兩種模式),文末會附上demo的github地址
#if DEBUG
#else
#endif
複製程式碼
這種寫法想必大家都不陌生,那麼我們如果想增加別的變數,實現類似這種去控制執行環境,該如何實現呢?下面我先描述下如何新增類似DEBUG這種配置變數。
一、第一步
如下幾個圖
![01](https://i.iter01.com/images/2c6a5dd84e65713813702a77bdb4b6db3b497ca8cd88774a990974c1fe6c6498.png)
到project-> info中增加你想要定製的環境變數配置
![02](https://i.iter01.com/images/7cae5d9a2731e58e118af3b4f6f621f7e5d862525f3091a76607d5a41428ed36.png)
- 注意,如果有cocoapods,這裡增添後要進行一次pod install,pods會自動去配置相關的環境
二、第二步
![02-01](https://i.iter01.com/images/a19a808257a68ca44873c6ff4aca4d6a8bb790af8a29cd0d4b6173f3c58d3fc6.png)
到project-build settings中搜尋preprocessor macros,修改裡面的配置如下:
![02-02](https://i.iter01.com/images/9cdffa1d351179977d0a6c3216628547ec2e454e0b9b57d3a4b6843b9b9f485e.png)
這裡要加上${inherited},否則在進行Pod install或者編譯的時候會有警告,最終的樣式如下:
![02-03](https://i.iter01.com/images/72b6459d75bb31a0fc842074f647a0f1f80391c44b96ca6fda27ca0584e92ca7.png)
那麼進行到這裡,就可以再專案中 用了
三、第三步
![03-01](https://i.iter01.com/images/043581ff7fb085d2ebb43f2d60305e2266a80662040f33ede33551806940c4e3.png)
到edit schemes -> run中,可以看到build configurations多了兩個,這裡就可以切換不同的環境
![03-02](https://i.iter01.com/images/096e653346ff51018a2d4263d9f58b29da32d80cba21a199c908363c2a239161.png)
到現在為止,就可以根據不同的環境設定不同的值:
![03-03](https://i.iter01.com/images/0bf272032f4e0f32831893263e107b762b858105dacc869fb87999d226594cce.png)
![03-04](https://i.iter01.com/images/5838f0ceeafbe354a1a7ec0da20e709a73bb514feff86afd5a9f1162d67e915e.png)
![03-05](https://i.iter01.com/images/fa9deb4292cd34249b32995b2f08644634386230f5f9cef1b4e87b6bccfbbe37.png)
以上幾個圖已經表明一切
那麼,如果想要實現不同環境下不同的app名稱或者一個手機上可以安裝多個版本的app,那又該如何設定呢?下面主要講述這一點:
第四步
![05-01](https://i.iter01.com/images/50f77a1e57a82b8525bb5318b670de64eda3fd0b5577c8f84b0fbf243813f286.png)
project->build settings店家加號,add user-defnied setting
![05-02](https://i.iter01.com/images/72da239dd0220e650bd6e931fb376c11d02766f42ce76c2d18918419be0ecd7d.png)
比如增加了一個ProductDisplayName,下面四個可以設定對應的名稱
![05-03](https://i.iter01.com/images/45ca2c02a62c425b293e1f37b7ff1087cb1240dfb2cd6c1ee6c34cc7cab7e42c.png)
之後再info.plist中修改預設的名稱為$(ProductDisplayName)即可
此外,為了方便還可以新增schemes
![05-04](https://i.iter01.com/images/f9366c2c08590d04ceafbd5cfa541c518404fc3694878928d8104d8facfa48f1.png)
點選這個,可以新增對應的schemes
![05-05](https://i.iter01.com/images/9f43b7f7897cb541ffbe354c1840e234b977684eb2421f96d94efe77434a512d.png)
檢查下schemes配置,通過manage shcemes入口進入:
![05-06](https://i.iter01.com/images/342386071d897e17c2b6a9a400fdfd08fa8ca360e380ca93fcae86adf0469fe6.png)
右側只要都選中就好
下面看下target-general
![05-07](https://i.iter01.com/images/36f3ce0fd6d2c48a0235d8913ab18e6013172544a78aa0bc61b94e1b975014c0.png)
這裡的app名稱已經設定為自己定義的了
![05-08](https://i.iter01.com/images/9352bdac945fcc0402f7269c709d0f08992e37a075b8b2a1d994225de77b1814.png)
![05-09](https://i.iter01.com/images/14a85d12671a10c26e7b8278a442cdd14832cf5a146c473c141caeb51ea27102.png)
![05-10](https://i.iter01.com/images/c4c5a587726a30b03e1df45147a5add311d0b82d7ec30c0eae4f0aefd463c09f.png)
![05-11](https://i.iter01.com/images/871400ef63d8f4585ef73e05252daa0652469c2794079aa9db0c8613a2bacf5c.png)
![05-12](https://i.iter01.com/images/0a22db52b67810d31b93be2ad48be9b87e237372a39f10bdf258d10f40258be1.png)
對於一個手機上安裝多個不同環境的app也是如此,只需要在add user-defined setting中增加一組配置去設定bundle id,並且把info.plist中的Bundle Identifier替換為自己設定的即可,替換方式和name替換方式一樣
- 如果有cocoapods,一定要注意pod install,否則會報錯