swift 條件編譯 自定義環境變量

1、why

在實際開發中我們常常需要區分不同的環境,此處以最簡單的開發與生產環境為例,每次打包通過修改代碼區分不同的環境過于繁瑣,并且如果需要修改的地方過多,忘改了某一處的話就會造成環境不統一,不僅給開發人員增加負擔,對測試同事也是麻煩的一件事。因此,通過預處理宏能很好的解決我們這一問題。

但實際上我們僅僅開發與生產環境是不夠的,往往還需要測試,預上線環境。Xcode使用Build configuration 配置多種項目環境

此外,通過預處理宏也能用于區分不同的target版本。

在C 系語言中,我們可以通過預處理宏定義一些參數,使用#if或者#ifdef編譯條件分支來控制哪些代碼需要編譯,而哪些代碼不需要。但是在swift中沒有宏定義的概念,雖然不能使用 #ifdef 的方法來檢查某個符號是否經過宏定義,但是可以支持“#if/#else/#endif”語句。

2、how

下面我們來介紹下如何自定義環境變量:(有圖更清晰)

Objective-C、C、C++的LLVM預處理宏在Preprocessor Macros處定義。如圖創建工程時已經默認創建好了在Debug時定義DEBUG=1 宏標記。

如果還需要其他控制參數可以雙擊 DEBUG=1 自行添加。


圖1


因為swift中沒有宏定義的概念,那么swift中要如何定義呢?

接下來我們介紹一下Xcode8的前后都是如何定義的預處理宏的

Xcode7:創建一個新的工程,打開buildsetting

配置Swift Compiler - Custom Flags,展開Other Swift Flags,在Debug右側輸入“-DDEBUG”。

也可以“-D DEBUG”,但是不能有賦值,如:“-DDEBUG=1” 或 “-D DEBUG=1”都是無效的。


圖2


然后就可以在代碼中使用DEBUG進行條件判斷了,添加之前,swift代碼中使用DEBUG無效果,

#if DEBUG

self.view.backgroundColor = UIColor.blueColor()

#endif

Xcode8:新建工程,打開buildsetting

可以看到Swift Compiler -Custom Flags 已經為我們添加好了DEBUG 預處理宏,代碼中可以直接使用DEBUG來判斷是debug還是release模式。

圖3


我們可以在Active Compilation Conditions 中繼續添加需要的參數(圖4)


圖4

就可以多個參數通過'與或非'組合實現邏輯判斷。

圖5


當然也可以繼續在OTHER_SWIFT_FLAGS中配置環境變量。但是有一個不爽的地方就是需要在自定義的變量前增加“-D”后才能使用。

3、more

其實系統給我們設置了很多環境變量宏。

cd到工程目錄

然后

$ xcodebuild -project Test8.xcodeproj -target Test8 -configuration Debug -showBuildSettings > buildSettings.txt

在工程目錄中生成了一個buildSettings.txt文件,其中保存了target "Test8”的所有的環境變量。

以上。

喜歡就關注我吧?(? ? ??)嘿嘿

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

推薦閱讀更多精彩內容