Xcode 使用 Configuration 來配置不同的專案環境

isaced發表於2019-02-26

很多專案在開發時都會經常在開發環境和生產環境之間切換,切換隨之伴來的還有比如更換 App 名稱、Bundle identitier、服務端介面地址等等相關引數和屬性,這個時候我們就可以利用 Xcode 提供的 Configuration 來配置不同的環境,從而進行快速切換、編譯等等一系列操作。

Xcode 使用 Configuration 來配置不同的專案環境
xcode_ configuration_list

注: Xcode 中 Build Settings 的所有項都可以針對不同的 Configuration 設定不同的值

使用不同的環境配置進行除錯

定義好不同的環境後,你就可以分別設定 runtestArchive... 這些操作分別使用哪一個 Build Configuration 進行編譯,從而可以很輕鬆得分離開各個配置環境的設定。比如分離不同的服務端開發和正式環境,就可以利用巨集定義進行引數區分(參見後文)輕鬆實現,然後開發的時候需要切換環境測試之類的就可以直接在 Edit Scheme 裡修改對應的 Configuration,不用再修改程式碼。

Xcode 使用 Configuration 來配置不同的專案環境
edit_scheme

切換不同的 Bundle identifier

在 Targets -> Build Settings -> Packaging -> Product Bundle Identifier 中設定不同的值即可。

切換不同的 App Name

如果需要實現根據 Configuration 設定不同的應用顯示名稱,可以通過增加 User-Define 屬性實現,甚至可以直接使用 Product Name,這裡說一下前者的設定方法。

在 Targets -> Build Settings 頂部 "+" 按鈕彈出選單中選擇 "Add User-Defined Setting" 來增加一項 User-Defined 屬性,值可以自己隨意設定,名稱可以叫 "BUNDLEDISPLAY_NAME",然後在 "xxx-Info.plist" 中的 Bundle display name 項中設定值為 ${BUNDLE_DISPLAY_NAMEAA},搞定!

利用巨集定義進行引數區分

如果想在程式碼中對不同環境進行各自的引數載入或者操作處理,我們可以通過預處理巨集來判斷,通過給 Configuration 增加巨集定義和 #ifdef 預處理命令就可以實現。

比如我們要給一個名為 DebugBeta 的 Configuration 設定載入非正式環境的服務端介面地址,在 Targets -> Build Settings -> Preprocessor Macros 中給 DebugBeta 設定一個特殊標識就行了,比如 "BETASERVERURL=1"。

然後通過預處理程式碼進行判斷就可以實現載入不同的引數項,比如還可以設定一些 SDK 區分正式/開發環境的 Key,做一些非常靈活的操作。

NSString *serverURL;
#ifdef BETASERVERURL
    serverURL = @"http://xxx";
#else
    serverURL = @"http://yyy";
#endif複製程式碼

Cocoapods 可能會遇到的問題

定義好自己的 Configuration 後,再執行 pod install 可能會遇到類似下面的警告資訊,這個時候只需要在 Project -> Info -> Configurations 中自定義的配置 'Based on Configuration File' 設為 None 就可以了。

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target 專案名 to Pods/Target Support Files/Pods-專案名/Pods-專案名.release.xcconfig or include the Pods/Target Support Files/Pods-專案名/Pods-專案名.release.xcconfig in your build configuration.

相關文章