iOS使用.xcconfig配置文件的若干坑

有一些文章介紹.xconfig文件的使用臼寄,如這篇饼酿,但是經(jīng)過(guò)親自實(shí)踐吭敢,發(fā)現(xiàn)還是有一些坑,這里記錄下缭受。

構(gòu)建新的configuration

這一步在“project-info-configuration”位置進(jìn)行胁澳,點(diǎn)擊“+”構(gòu)建“-”消除,沒(méi)什么問(wèn)題米者,這個(gè)很簡(jiǎn)單也不會(huì)出錯(cuò)韭畸。


新建configuration

只是原來(lái)使用xcodebuild進(jìn)行自動(dòng)打包時(shí)的-configuration指的是就是這里啊。每個(gè)項(xiàng)目默認(rèn)就有的Debug和Release配置蔓搞。

這個(gè)Configuration是對(duì)于同一個(gè)項(xiàng)目的配置的一個(gè)完整的最高的總結(jié)了胰丁。

使用.xcconfig文件

新建這個(gè)文件很簡(jiǎn)單,xcode自帶了這個(gè)模板喂分。然后是在Configuration里配置锦庸,比如在debug時(shí)使用First.xcconfigrelease時(shí)使用Second.xcconfig,如圖:

屏幕快照 2017-05-13 下午9.22.08.png

這一步也簡(jiǎn)單。但是我開(kāi)始使用的時(shí)候妻顶,思維就走錯(cuò)方向了:

根據(jù)各種文章的指示酸员,配置文件(.xcconfig)里面的內(nèi)容會(huì)覆蓋當(dāng)前的Build Settings里面的東西,所以我以為是我在配置文件里面寫(xiě)了一個(gè)配置讳嘱,那么Build Settings里面的東西會(huì)跟著變。

比如我現(xiàn)在是Debug環(huán)境酿愧,然后對(duì)應(yīng)的就是First.xcconfig,我在它里面寫(xiě)入:

//:configuration = Debug
OTHER_LDFLAGS = -Objcxxx

//:configuration = Release
OTHER_LDFLAGS = -Objcxxx

//:completeSettings = some
OTHER_LDFLAGS

其實(shí)就是Other Linker flags的配置沥潭,可是外面Build Settings里的東西并沒(méi)有變。

Build Settings實(shí)際樣子

我就暈了嬉挡,這到底怎么回事钝鸽。

這里有兩個(gè)坑

  1. 項(xiàng)目的Build Settings里直接寫(xiě)的內(nèi)容是會(huì)優(yōu)先顯示的,就是說(shuō)Xcode有一個(gè)默認(rèn)的配置文件(yourAppName.xcodeproj/project.pbxproj)庞钢,如果你直接在Build Settings里編輯拔恰,是寫(xiě)到它里面去,比如只是修改了other linker flag基括,再看github的修改:
修改了配置文件

這個(gè)文件里的配置會(huì)優(yōu)先在Configuration里指定的.xcconfig文件里的配置颜懊,那要怎么使用.xcconfig文件里的配置?刪掉Build Settings里的配置就好了风皿。Command+delete搞定河爹。

  1. 因?yàn)?code>.xcconfig配置文件很難寫(xiě),主要是各種配置名你記不住桐款,所以就到實(shí)際的Build Settings里面去拷貝咸这,就在對(duì)應(yīng)的配置項(xiàng)Command+C就有了,所以?xún)?nèi)容就變成了上面那樣魔眨,我以為3句話(huà)是在不同環(huán)境下起作用的媳维,是互不干擾的酿雪,其實(shí)是OTHER_LDFLAGS設(shè)了3遍,左后一次生效侄刽,最后是啥指黎?空的啊,所以即使刪除了Build Settings里的內(nèi)容也不出現(xiàn)唠梨,我還以為.xcconfig文件沒(méi)起作用袋励!

    所以改成:OTHER_LDFLAGS = -Objcxxx然后就有了。

    配置文件生效了

環(huán)境切換配置也跟著切換当叭?

首先使用配置文件的作用就是茬故,在環(huán)境切換后,配置可以跟著一整套的切換蚁鳖,.xcconfig就相當(dāng)于一個(gè)把相關(guān)的配置打包了磺芭。

這里就有了另一個(gè)坑,或者說(shuō)理解失誤:

我以為是你在Build Configuration里選擇什么醉箕,那么Build Settings里的內(nèi)容會(huì)跟著改變钾腺。

Build Configuration修改

實(shí)際上Build Settings還是原來(lái)那樣,改變的是每一項(xiàng)里面的內(nèi)容讥裤,比如First.xcconfig配置里寫(xiě)入OTHER_LDFLAGS = -Objc_first,而Second.xcconfig里寫(xiě)入OTHER_LDFLAGS = -Objc_second,在外面看到的是這樣的:

build settings不變

每一項(xiàng)配置里面會(huì)再分成Debug放棒、Release等不同的Configuration,而不是Build Settings整體切換了己英。**

或者說(shuō)這是一個(gè)結(jié)構(gòu)上的問(wèn)題间螟,讓新接觸者會(huì)改不清楚Xcode到底是什么做到不同情況使用不同配置的。

整個(gè)配置的結(jié)構(gòu)

實(shí)際結(jié)構(gòu)是這樣:

  • 最上層就是Project-info-Configuration里的配置了
  • 然后每個(gè)配置里可以有不同配置文件(.xcconfig)损肛,每個(gè)target一個(gè)配置文件
  • 然后是每個(gè)配置文件里面有許多的配置項(xiàng)

但是在Build Settings的顯示里厢破,這個(gè)結(jié)構(gòu)是倒過(guò)來(lái)的:**

  • 配置文件
  • 配置項(xiàng)
  • 不同Configuration

另外,關(guān)于宏

在整個(gè)Build Settings里治拿,可以在代碼里直接使用的摩泪,Preprocess Mcros就是其中之一。

在這里定義不同的宏劫谅,就可以在代碼里由此做不同處理见坑,比如默認(rèn)的DEBUG宏就經(jīng)常用來(lái)做條件編譯。

Build Settings里可以$(xxx)來(lái)引用其他配置里的東西同波,那么也就可以在這里定義宏并且跟隨其他配置而改變鳄梅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市未檩,隨后出現(xiàn)的幾起案子戴尸,更是在濱河造成了極大的恐慌,老刑警劉巖冤狡,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孙蒙,死亡現(xiàn)場(chǎng)離奇詭異项棠,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)挎峦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)香追,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人坦胶,你說(shuō)我怎么就攤上這事透典。” “怎么了顿苇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵峭咒,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我纪岁,道長(zhǎng)凑队,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任幔翰,我火速辦了婚禮漩氨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遗增。我一直安慰自己叫惊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布做修。 她就那樣靜靜地躺著赋访,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缓待。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天渠牲,我揣著相機(jī)與錄音旋炒,去河邊找鬼。 笑死签杈,一個(gè)胖子當(dāng)著我的面吹牛瘫镇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播答姥,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼铣除,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鹦付?” 一聲冷哼從身側(cè)響起尚粘,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敲长,沒(méi)想到半個(gè)月后郎嫁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體秉继,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年泽铛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了尚辑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盔腔,死狀恐怖杠茬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情弛随,我是刑警寧澤瓢喉,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站撵幽,受9級(jí)特大地震影響灯荧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盐杂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一逗载、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧链烈,春花似錦厉斟、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漩勤,卻和暖如春感挥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背越败。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工触幼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人究飞。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓置谦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親亿傅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子媒峡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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