(譯)使用Xcode Configuration (.xcconfig)來管理不同的編譯設置

原文鏈接https://www.appcoda.com/xcconfig-guide/

在軟件項目的開發(fā)周期中,你可能在不同的階段創(chuàng)建不同的版本。在早期階段住练,將會有一個版本符合你的本地配置绊诲。當您準備轉(zhuǎn)移到下一個階段時,你的QA團隊將會使用另一個版本來測試功能和修復bug靴庆。當應用程序通過所有測試并獲得QA團隊的批準后时捌,你將創(chuàng)建另一個版本,將其發(fā)送給你的客戶進行測試炉抒,然后再將其推送到App Store奢讨。最后,一旦客戶對您所發(fā)送的版本滿意焰薄,就會有生產(chǎn)就緒的應用程序拿诸。所有這些版本都不是完全相同的,每一個都有一些特殊的或者稍微不同的配置蛤奥。

例如佳镜,如果應用程序需要連接到后端,那么很有可能應用程序在QA測試期間連接到測試環(huán)境凡桥。版本可能配置了一個測試URL蟀伸。當您移動到下一個階段時,另一個版本將有另一個用于連接到staging(production環(huán)境的鏡像)/生產(chǎn)服務器的URL缅刽。最重要的是啊掏,當在所有版本的應用程序中出現(xiàn)錯誤時,您可能不會顯示相同級別的信息衰猛。

如何在Xcode中使用相同的代碼庫有效地管理所有這些構(gòu)建版本呢?這是我想在本教程中討論的內(nèi)容迟蜜,并向您展示如何在Xcode的幫助下創(chuàng)建多個配置。

如何管理多個版本?

有不同的方法可以達到這個目的啡省。一個是創(chuàng)建不同的target娜睛,每個target都使用不同的Info.plist。每次選擇一個target卦睹,一個不同的info.plist將被使用畦戒,因此我們將能夠區(qū)分諸如token、用于不同版本的url等變量结序。

也可以通過使用Bundle Identifiers來實現(xiàn)障斋。定義不同的preprocessor macros(預處理器宏)將控制不同代碼塊的條件編譯。

Eugene Trapeznikov已經(jīng)在這個優(yōu)秀的教程中介紹了這一方法。如果您還沒有讀過垃环,請閱讀他的教程—How to Use Xcode Targets to Manage Development and Production Builds 邀层,涵蓋了所有的關鍵概念。

另一種方法是將您的build configuration(構(gòu)建配置)設置放入.xcconfig文件遂庄,并在項目信息中引用這些文件寥院。然后你可以通過改變scheme來建立一個不同版本的應用程序。這就是我將在本教程中介紹的內(nèi)容涛目。將build configuration設置放入文件中對于配置管理來說是一個巨大的勝利只磷。

創(chuàng)建 Build Configuration

首先,讓我們使用Xcode創(chuàng)建一個新項目泌绣。如果你愿意的話,也可以從電腦上現(xiàn)有的工程開始预厌。選擇項目導航欄中頂部的元素阿迈,并確保Project部分中的“你的項目名稱”欄目被選中。完成后轧叽,您應該看到Xcode已經(jīng)為您提供了兩個不同的configuration級別: Debug和Release苗沧。如果您以前沒有發(fā)現(xiàn),那么現(xiàn)在你知道這意味著您可以使用不同的設置來創(chuàng)建一個用于調(diào)試的版本炭晒,以及另一個用于生產(chǎn)的版本待逞。

現(xiàn)在我們要創(chuàng)建一個新的configuration。我們就叫它“ Staging”吧网严。在configuration列表下面單擊+號识樱,選擇“Duplicate Debug configuration”,因為從Debug configuration中刪除我們不想要的東西震束,要比在Release configuration中放回我們需要的東西容易的多怜庸。


使用 Xcode Configuration 文件 (.xcconfig)

正如前面提到的,我們使用的是Xcode配置文件(.xcconfig)垢村,而不是使用條件編譯塊來管理編譯設置(例如割疾,使用哪些token、api鍵嘉栓、后端的url)宏榕。

如果您不知道一個Xcode配置文件(.xcconfig)是什么,它實際上是一個基于鍵/值的文件侵佃。您可以將構(gòu)建設置以鍵/值對的形式存儲麻昼,類似于您在字典中所做的。通過使用一個.xcconfig文件趣钱,很容易為每個版本定義編譯參數(shù)涌献。你很快就會理解我的意思。

現(xiàn)在回到項目首有,創(chuàng)建一個.xcconfig文件燕垃。在項目導航欄中枢劝,右鍵單擊項目文件夾并選擇New file….在彈出的對話框中,選擇Configurations Settings File卜壕。點擊Next您旁,給它命名為“Staging”,并確保targets復選框全部沒有選中轴捎,因為您不想將它包含在應用程序的包中鹤盒。

現(xiàn)在轉(zhuǎn)到您項目的info窗口,在Configurations部分中侦副,展開列表并從下拉框中選擇xcconfile“ Staging”侦锯。

完成之后,您可以為主target重復這個過程秦驯,并選擇Debug文件尺碰。同樣,為Release Target重復這個過程译隘。


修改編譯信息

一旦你有了Xcode configuration文件的設置亲桥,它就非常直接地改變了版本。例如固耘,您想要更改編譯信息题篷,比如應用程序名稱、應用程序版本厅目、bundle identifier和bundle version番枚,您可以對每個.xcconfig文件進行編輯,如下:

Debug.xcconfig:

IS_APP_NAME = Donate Debug
IS_APP_VERSION = 0.3
IS_APP_BUNDLE_ID = com.intensifystudio.DonateDebug

Staging.xcconfig:

IS_APP_NAME = Donate Staging
IS_APP_VERSION = 0.2
IS_APP_BUNDLE_ID = com.intensifystudio.DonateStaging

Release.xcconfig:

IS_APP_NAME = Donate
IS_APP_VERSION = 0.1
IS_APP_BUNDLE_ID = com.intensifystudio.DonateRelease

您可以在項目設置,info.plist和entitlement文件中使用您的配置變量璧瞬。在本例中户辫,我們將在info.plist中使用它更改應用名稱、應用程序版本和bundle identifier嗤锉,如下所示:


為了清晰起見渔欢,我使用了一個自定義前綴“IS”作為我的小開發(fā)工作室的名字,用來將自定義鍵從默認值中調(diào)離瘟忱。

注意:更改 bundle identifier 將需要創(chuàng)建更多的provisioning profiles奥额。

修改App Icon

使用Xcode配置文件,您現(xiàn)在可以輕松地為不同的build配置app圖標访诱。為不同的build定制應用圖標的過程與我們在前一節(jié)中討論的一樣垫挨,除了會在在Build settings中使用變量。像這樣編輯每一個.xcconfig文件:

Debug.xcconfig:

IS_APP_ICON = AppIconDebug

Staging.xcconfig:

IS_APP_ICON = AppIconStaging

Release.xcconfig:

IS_APP_ICON = AppIconRelease

完成后触菜,切換到Build Settings九榔,并使用變量 ${IS_APP_ICON}替換AppIcon:

xcode-build-settings.gif

然后在Assets.xcassets創(chuàng)建幾個新的App Icon集合,然后按照上面的名字重命名。

xcode-new-app-icon.gif

拖入你的圖片哲泊,就準備好了剩蟀!

在代碼中訪問變量

Xcode的配置文件非常強大,也可以用于其他設置切威。例如育特,如果您有不同版本的API鍵和后端URL,您可以在每個.xcconfig文件中指定它們先朦。然后在你的代碼中缰冤,你可以取回它們。這是一個例子:

Debug.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/development
CONSUMER_KEY = ck_a57e4fa2e14c12ae3f400371cf2951ec3dea5_dev
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_dev

Staging.xcconfig::

BACKEND_URL = http:\/\/api.intensifystudio.com/staging
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5_staging
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f13f63bb22b_staging

Release.xcconfig:

BACKEND_URL = http:\/\/api.intensifystudio.com/
CONSUMER_KEY = ck_a57e4fa2e14c12f400371cf2951ec3dea5
CONSUMER_SECRET = cs_c847caa35ce1041e9c69d239141f1f63bb22b

接下來喳魏,通過新建keyValue將這些變量添加到Info.pist:


您可以在運行時使用下面的示例代碼從plist文件中讀取值:

func infoForKey(_ key: String) -> String? {
        return (Bundle.main.infoDictionary?[key] as? String)?
            .replacingOccurrences(of: "\\", with: "")
 }

代碼非常簡單棉浸。我們正在訪問Main Bundle,以檢索我們想要使用的信息刺彩。然后涮拗,如果返回的值是一個URL,則從字符串中刪除所有的反斜杠迂苛。

切換 Build Configurations

要在Build Configurations 之間切換,只需按住option鍵鼓择,然后單擊頂部的scheme三幻,就可以更改這個scheme。然后您可以選擇您喜歡的build configuration呐能。


switching-between-flavors.gif

結(jié)論

Xcode配置文件是配置不同build configuration的一種強大的方式念搬,允許您輕松地管理不同的構(gòu)建版本。你覺得這個教程怎么樣?如果你對xcconfig有任何疑問摆出,請在評論部分告訴我 ??

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朗徊,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子偎漫,更是在濱河造成了極大的恐慌爷恳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件象踊,死亡現(xiàn)場離奇詭異温亲,居然都是意外死亡,警方通過查閱死者的電腦和手機杯矩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門栈虚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人史隆,你說我怎么就攤上這事魂务。” “怎么了?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵粘姜,是天一觀的道長鬓照。 經(jīng)常有香客問我,道長相艇,這世上最難降的妖魔是什么颖杏? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮坛芽,結(jié)果婚禮上留储,老公的妹妹穿的比我還像新娘。我一直安慰自己咙轩,他們只是感情好获讳,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著活喊,像睡著了一般丐膝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钾菊,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天帅矗,我揣著相機與錄音,去河邊找鬼煞烫。 笑死浑此,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的滞详。 我是一名探鬼主播凛俱,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼料饥!你這毒婦竟也來了蒲犬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤岸啡,失蹤者是張志新(化名)和其女友劉穎原叮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巡蘸,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡篇裁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了赡若。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片达布。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖逾冬,靈堂內(nèi)的尸體忽然破棺而出黍聂,到底是詐尸還是另有隱情躺苦,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布产还,位于F島的核電站匹厘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脐区。R本人自食惡果不足惜愈诚,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牛隅。 院中可真熱鬧炕柔,春花似錦、人聲如沸媒佣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽默伍。三九已至欢嘿,卻和暖如春也糊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背框弛。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斗搞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓允悦,卻偏偏與公主長得像隙弛,于是被迫代替她去往敵國和親狞山。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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