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

前言

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

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

  • macOS Ventura 13.4
  • Xcode 14.3

環(huán)境配置方案

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

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

具體操作步驟

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文件配置到對應(yīng)的Configuartion中(OC & Swift)

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

image.png

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

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

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

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


創(chuàng)建Scheme.jpg

Build Configuartion選擇對應(yīng)的xcconfig文件


替換.jpg

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

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

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

// 導(dǎo)入pod對應(yīng)的config
#include "Pods/Target Support Files/Pods-SchemeCode/Pods-SchemeCode.debug.xcconfig"
// 導(dǎo)入公共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)境下, 自動切換對應(yīng)的環(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. 設(shè)置特定的變量

  • 設(shè)置不同應(yīng)用名TARGETS -> General -> Identity -> Display Name
    填寫${APP_DISPLAY_NAME}


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


    應(yīng)用圖標(biāo).jpg
  • 設(shè)置不同應(yīng)用Build Identifity
    設(shè)置Build Identifity 不生效
    手動設(shè)置Build Identifity后, 設(shè)置不同應(yīng)用名發(fā)生錯誤.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載粟按,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者妈拌。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子桑孩,更是在濱河造成了極大的恐慌饮亏,老刑警劉巖徽千,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缸匪,死亡現(xiàn)場離奇詭異,居然都是意外死亡准夷,警方通過查閱死者的電腦和手機钥飞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衫嵌,“玉大人读宙,你說我怎么就攤上這事⌒ń剩” “怎么了结闸?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長酒朵。 經(jīng)常有香客問我桦锄,道長,這世上最難降的妖魔是什么蔫耽? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任结耀,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饼记。我一直安慰自己香伴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布具则。 她就那樣靜靜地躺著,像睡著了一般具帮。 火紅的嫁衣襯著肌膚如雪博肋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天蜂厅,我揣著相機與錄音匪凡,去河邊找鬼。 笑死掘猿,一個胖子當(dāng)著我的面吹牛病游,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播稠通,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼衬衬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了改橘?” 一聲冷哼從身側(cè)響起滋尉,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎飞主,沒想到半個月后狮惜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡碌识,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年碾篡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筏餐。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡开泽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胖烛,到底是詐尸還是另有隱情眼姐,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布佩番,位于F島的核電站众旗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趟畏。R本人自食惡果不足惜贡歧,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧利朵,春花似錦律想、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至樟遣,卻和暖如春而叼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豹悬。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工葵陵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞻佛。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓脱篙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伤柄。 傳聞我的和親對象是個殘疾皇子绊困,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容