利用 Macros 和 Custom Flags 來區分開發和正式環境的參數值
6 min readJun 1, 2020
在實務上,常常需要對開發和正式環境設定不同的參數,比方 API 的 URL、需不需要印 Log 等等。雖然說,這些事情可以手動調整,但是人非聖賢,難免會有失手的時侯🙃。透過 Xcode 的 Macros(巨集)、Custom Flags 的定義,可以輕鬆幫我們避免諸如此類的問題發生。
在開始前,法蘭克必須創建一個專案來模擬主題的情境。它有兩個 Targets,一個是開發環境(Staging),另一個則是正式環境(Production),詳細創建的過程就不在此多加贅述,避免偏離了今天的主題。
ViewController 裡有一個條件式判斷,如果是測試環境(Staging)則取得測試環境的 URL,反之,則取得正式環境(Production)的 URL。
問題來了,要怎麼依照不同的 Target 取到相對應的 URL 呢?讓我們開始進入今天的主題吧😀
要解決上面的問題,有兩個方案。
- 使用 Preprocessor Macros + Other Swift Flags。
- 使用 Xcode8 以後才有的 Active Compilation Conditions。
使用 Preprocessor Macros + Other Swift Flags
- 切換到 Staging Target → Build Setting → 搜尋 Macros → Preprocessor Macros設定 STAGING=1
- 同樣的,切換到 Production Target → Build Setting → 搜尋 Macros → Preprocessor Macros設定 STAGING=0
- 再度切回 Staging Target → Build Setting → 搜尋 custom flags → Other Swift Flags 設定 -DSTAGING。
-D一定得額外加上,否則此 Flag 則不會生效
- Production Target 則無須做任何設定。
- 切換至 Staging Scheme,並試著啟動模擬器,看看結果是不是取得 Staging 的 URL。
- 切換至 Production Scheme,並試著啟動模擬器,看看結果是不是取得 Production 的 URL。
使用 Xcode8 以後才有的 Active Compilation Conditions
- 切換到 Staging Target → Build Setting → 搜尋 Custom Flags → Active Compilation Conditions 設定 STAGING
- 切換到 Production Target → Build Setting → 搜尋 Custom Flags → Active Compilation Conditions 設定 PRODUCTION
- 切換至 Staging Scheme,並試著啟動模擬器,看看結果是不是取得 Staging 的 URL
- 切換至 Production Scheme,並試著啟動模擬器,看看結果是不是取得 Production 的 URL
以上,相對於使用 Preprocessor Macros + Other Swift Flags,Active Compilation Conditions 來得更為容易,法蘭克更推薦此做法
如果您喜歡我的文章,請多按幾下「拍手」給我鼓勵,或是按「follow」讓我持續提供好文章給您。