iOS多環(huán)境配置方案(xcconfig)

前言

在App開發(fā)過程中, 配置參數(shù)經(jīng)常會隨著環(huán)境的變化而不同.
例如基本的URL地址, 第三方秘鑰和key等等.
以往為了切換環(huán)境, 都是手動的注釋對應的參數(shù). 還要配置很多宏定義, 以及很多的#ifdef #endif判斷.
這種手動切換配置的方法, 即耽誤時間, 又影響代碼的可讀性. 因此需要更簡潔的動態(tài)修改方案.

開發(fā)環(huán)境

  • macOS Ventura 13.4
  • Xcode 14.3

環(huán)境配置方案

  • 多target形式
  • 多scheme方式
  • xcconfig配置文件的形式

以上3種環(huán)境配置方案都可以達到動態(tài)修改的效果, 經(jīng)過各種嘗試, 個人認為xcconfig是最優(yōu)解決方案, 而且更符合個人的開發(fā)習慣, 但是需要進行很多地方的配置. 因此詳細講解一下如何配置.

具體操作步驟

1. 創(chuàng)建一個新項目(OC & Swift)

首先創(chuàng)建一個新的項目, 并用cocoapods管理

2. 創(chuàng)建xcconfig配置文件(OC & Swift)

創(chuàng)建xcconfig文件夾:


創(chuàng)建xcconfig文件夾.jpg

創(chuàng)建Configuration Setting Flie文件:


Configuration Setting Flie.jpg

根據(jù)項目的開發(fā)環(huán)境需求, 創(chuàng)建多個xcconfig文件, 這里演示的只有生產(chǎn)環(huán)境和開發(fā)環(huán)境(Sit):
創(chuàng)建xcconfig文件.jpg

注釋: 此處一定要記得選擇Targets. 如果忘記了, 不要緊, 點擊創(chuàng)建的xcconfig文件, 在Target Membership中勾選

3.將xcconfig文件配置到對應的Configuartion中(OC & Swift)

切換到PROJECT -> info -> Configuartion下, 已經(jīng)配置了Debug和Release模式. 這是項目里默認的

image.png

因為我們有多個環(huán)境的配置, 原有的Debug和Release已經(jīng)無法滿足需求, 所以, 根據(jù)之前創(chuàng)建的xcconfig文件,點擊+號添加新的Debug和Release, 并且重新命名.
同時把紅框內(nèi)的選項, 選擇創(chuàng)建的xcconfig文件, 要一一對應. 其他選項選擇None.
替換.jpg

項目是cocoapods管理, 在終端pod install 命令, 生成相關文件.
會發(fā)現(xiàn), 之前選擇None的選項自動選擇新生產(chǎn)的文件.

4. 創(chuàng)建新的Scheme(OC & Swift)

創(chuàng)建New Scheme 命名SchemeSit


創(chuàng)建Scheme.jpg

Build Configuartion選擇對應的xcconfig文件


替換.jpg

5. 在xcconfig文件中定義相應的變量(OC & Swift)

Debug或Release中添加的變量
其中導入pod對應的xcconfig是根據(jù)之前pod install 時生成的文件路徑

// 應用名字
APP_DISPLAY_NAME = 開發(fā)DEBUG
// 基礎URL (  // 中間要加上$()  )
// OC寫法
BASE_URL = @"https:/$()/www.baidu.com"
// Swift寫法
BASE_URL = https:/$()/www.baidu.com
// 圖標名
APP_ICON = AppIcon

// 導入pod對應的config
#include "Pods/Target Support Files/Pods-SchemeCode/Pods-SchemeCode.debug.xcconfig"
// 導入公共config
#include "CommonConfig.xcconfig"

常用配置文件中, 要把xcconfig中的變量Key值書寫到這里.

GCC_PREPROCESSOR_DEFINITIONS = ${inherited} APP_DISPLAY_NAME='$(APP_DISPLAY_NAME)' 
BASE_URL='$(BASE_URL)' 
BUNDLE_ID='$(BUNDLE_ID)' 
APP_ICON='$(APP_ICON)'

此時我們能在TARGETS -> Build Settings -> User-Defined 中看見自定義的變量


13.jpg

6. 讀取自定義變量(OC & Swift 不同)

切換Scheme即可在不同開發(fā)環(huán)境下, 自動切換對應的環(huán)境變量
OC讀取自定義變量: 可以直接以宏定義的形式獲取所需要的自定義變量.

NSLog(BASE_URL);

Swift讀取自定義變量: 由于Swift沒有了OC中的宏定義, 所以獲取自定義變量如下

func readBaseUrl() -> String? {
        guard let path = Bundle.main.path(forResource: "Info", ofType: "plist") else {
            return nil
        }
        let infoDic = NSDictionary(contentsOfFile: path)
        let host = infoDic?["BASE_URL"] as? String
        return host
    }

print(readBaseUrl()!)

7. 設置特定的變量

  • 設置不同應用名TARGETS -> General -> Identity -> Display Name
    填寫${APP_DISPLAY_NAME}


    設置應用名.jpg
  • 設置不同應用圖標
    在Assets.xcassets中添加所需要的圖標,命名Appicon / AppiconSit
    TARGETS -> Build Settings -> Primary App Icon Set Name
    對應的環(huán)境選擇對應的應用圖標


    應用圖標.jpg
  • 設置不同應用Build Identifity
    設置Build Identifity 不生效
    手動設置Build Identifity后, 設置不同應用名發(fā)生錯誤.

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容