app多環境配置與切換

引用KB_MoreShare的http://www.code4app.com/blog-859519-884.html 這篇

寫的很好,很詳細?

內容==================================================================

談到多環境,相信現在大多公司都至少有2-3個app環境了,比如Test環境,預發環境環境,Release環境等等。當需要開發打多個包的時候,一般常見做法就是直接代碼里面修改環境變量,改完之后Archive一下就打包了。當然這種做法很正確,只不過不是很優雅很高效。如果搭建好了Jenkins(搭建教程),我們利用它來優雅的打包。如果利用Jenkins來打包,我們就需要來給app來配置一下多個環境變量了。之后Jenkins分別再不同環境下自動集成即可。所以也方便了很多。

一.利用Build Configuration來配置多環境

由于需要配置多個環境,并且多個環境都需要安裝到手機上,那么可以配置Build Configuration來完成這個任務。如果Build Configuration還不熟悉的,可以先溫習一下官方文檔

先點擊Project里面找到Configuration,然后選擇添加,這里新加一個Configuration。系統默認是2個,一個Debug,一個Release。這里我們需要選擇是復制一個Debug還是Release。Release和Debug的區別是,Release是不能調試程序,因為默認是屏蔽了可調試的一些參數,具體可以看BuildSetting里面的區別,而且Release編譯時有做編譯優化,會比用Debug打包出來的體積更小一點。

這里我們選擇一個Duplicate “Debug” Configuration,因為我們新的環境需要debug,添加完了之后就會多了一套Configuration了,這一套其實是包含了一些編譯參數的配置集合。如果此時項目里面有cocopods的話,打開Configuration Set就會發現是如下的樣子:

注意:剛剛新建完Build Configuration之后,這時如果有pod,請立即執行一下

pod install

如果沒用pod,可以忽略一下這一段。

2. 新建User-defined Build Settings

再次回到Project的Build Settings里面來,Add User-Defined Setting。

我們這里新加入2個參數,CustomAppBundleld是為了之后打包可以分開打成多個包,這里需要3個不同的Id,建議是直接在原來的Bundleld加上Configuration的名字即可。

CustomProductName是為了app安裝到手機上之后,手機上顯示的名字,這里可以按照對應的環境給予描述,例如:測試,線上等等。

修改info.plist文件 和 Images.xcassets

由于我們新添加了2個CustomAppBundleld 和 CustomProductName,這里我們需要把info.plist里面的Bundle display name修改成我們自定義的這個字典。編譯過程中,編譯器會根據我們設置好的Scheme去自己選擇Debug,Release,TestRelease分別對應的ProductName,如下圖所示:

3. 配置和獲取環境變量

接下來講幾種動態配置環境變量的方法

1. 使用GCC預編譯頭參數GCC_PREPROCESSOR_DEFINITIONS

我們進入到Build Settings里面,可以找到Apple LLVM Preprocessing,這里我們可以找到Preprocessor Macros在這里,我們是可以加一些環境變量的宏定義來標識符。Preprocessor Macros可以根據不同的環境預先制定不同定義的宏。

如上圖,AdHoc = 1 ,DEBUG = 1 ,RELEASE = 1;

有了這些我們預先設置的標識符之后,我們就可以在代碼里面寫入如下的代碼了。同時可以配置不同的環境的域名,統計,很多參數在不同環境的配置。

我們可以選擇工程中的Config,然后點擊Edit scheme, 如圖所示:

然后在運行時,就可以選擇Run,Info -> Buidl Configuration 中就可以看到之前設置的Debug , AdHoc , Relaese ,這樣就可以配置不同的環境了,不同參數的設定都可以根據自定義的進行配置,如果打包,也可以選擇Archive,Build configuration 中也可以設置Debug , AdHoc ,Release等環境。

選擇不同的run 的Configuration,運行如下結果,

主要的坑就是,在新加入一個環境后,比如這里的ADHoc 環境, 你如果項目中引入的cocopod, pod 文件夾里面有加入第三方框架的時候,一定記得要pod install一次,不然編譯就報錯!

還有就是切換環境的時候

#ifdef DEBUG

#define ABC @"我是debug的demo"

#elif ADHoc ? ? ? ? ? ? ? ? ? ? ?//這里的ADHoc 應該和你Preprocessor Macros 里面設置的一樣

#define ABC @"我是ADHoc的demo"

#else

#define ABC @"我是release的demo"

#endif

比如下面這樣

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容