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

有一些文章介紹.xconfig文件的使用,如這篇,可是通過親自實踐,發現仍是有一些坑,這裏記錄下。html

構建新的configuration

這一步在「project-info-configuration」位置進行,點擊「+」構建「-」消除,沒什麼問題,這個很簡單也不會出錯。 ios

新建configuration

只是原來使用xcodebuild進行自動打包時的-configuration指的是就是這裏啊。每一個項目默認就有的Debug和Release配置。git

這個Configuration是對於同一個項目的配置的一個完整的最高的總結了。github

使用.xcconfig文件

新建這個文件很簡單,xcode自帶了這個模板。而後是在Configuration裏配置,好比在debug時使用First.xcconfigrelease時使用Second.xcconfig,如圖:xcode

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

這一步也簡單。可是我開始使用的時候,思惟就走錯方向了:bash

根據各類文章的指示,配置文件(.xcconfig)裏面的內容會覆蓋當前的Build Settings裏面的東西,因此我覺得是我在配置文件裏面寫了一個配置,那麼Build Settings裏面的東西會跟着變。app

好比我如今是Debug環境,而後對應的就是First.xcconfig,我在它裏面寫入:ui

//:configuration = Debug
OTHER_LDFLAGS = -Objcxxx

//:configuration = Release
OTHER_LDFLAGS = -Objcxxx

//:completeSettings = some
OTHER_LDFLAGS
複製代碼

其實就是Other Linker flags的配置,但是外面Build Settings裏的東西並無變。 spa

Build Settings實際樣子

我就暈了,這到底怎麼回事。debug

這裏有兩個坑

  1. 項目的Build Settings裏直接寫的內容是會優先顯示的,就是說Xcode有一個默認的配置文件(yourAppName.xcodeproj/project.pbxproj),若是你直接在Build Settings裏編輯,是寫到它裏面去,好比只是修改了other linker flag,再看github的修改:

修改了配置文件

這個文件裏的配置會優先在Configuration裏指定的.xcconfig文件裏的配置,那要怎麼使用.xcconfig文件裏的配置?刪掉Build Settings裏的配置就行了。Command+delete搞定。

  1. 由於.xcconfig配置文件很難寫,主要是各類配置名你記不住,因此就到實際的Build Settings裏面去拷貝,就在對應的配置項Command+C就有了,因此內容就變成了上面那樣,我覺得3句話是在不一樣環境下起做用的,是互不干擾的,實際上是OTHER_LDFLAGS設了3遍,左後一次生效,最後是啥?空的啊,因此即便刪除了Build Settings裏的內容也不出現,我還覺得.xcconfig文件沒起做用!

    因此改爲:OTHER_LDFLAGS = -Objcxxx而後就有了。

    配置文件生效了

環境切換配置也跟着切換?

首先使用配置文件的做用就是,在環境切換後,配置能夠跟着一整套的切換,.xcconfig就至關於一個把相關的配置打包了。

這裏就有了另外一個坑,或者說理解失誤:

我覺得是你在Build Configuration裏選擇什麼,那麼Build Settings裏的內容會跟着改變。

Build Configuration修改

實際上Build Settings仍是原來那樣,改變的是每一項裏面的內容,好比First.xcconfig配置裏寫入OTHER_LDFLAGS = -Objc_first,而Second.xcconfig裏寫入OTHER_LDFLAGS = -Objc_second,在外面看到的是這樣的:

build settings不變

每一項配置裏面會再分紅Debug、Release等不一樣的Configuration,而不是Build Settings總體切換了。

或者說這是一個結構上的問題,讓新接觸者會改不清楚Xcode究竟是什麼作到不一樣狀況使用不一樣配置的。

整個配置的結構

實際結構是這樣:

  • 最上層就是Project-info-Configuration裏的配置了
  • 而後每一個配置裏能夠有不一樣配置文件(.xcconfig),每一個target一個配置文件
  • 而後是每一個配置文件裏面有許多的配置項

可是在Build Settings的顯示裏,這個結構是倒過來的:

  • 配置文件
  • 配置項
  • 不一樣Configuration

另外,關於宏

在整個Build Settings裏,能夠在代碼裏直接使用的,Preprocess Mcros就是其中之一。

在這裏定義不一樣的宏,就能夠在代碼裏由此作不一樣處理,好比默認的DEBUG宏就常常用來作條件編譯。

Build Settings裏能夠$(xxx)來引用其餘配置裏的東西,那麼也就能夠在這裏定義宏而且跟隨其餘配置而改變。

相關文章
相關標籤/搜索