有一些文章介紹.xconfig文件的使用,如這篇,可是通過親自實踐,發現仍是有一些坑,這裏記錄下。html
這一步在「project-info-configuration」位置進行,點擊「+」構建「-」消除,沒什麼問題,這個很簡單也不會出錯。 ios
只是原來使用xcodebuild
進行自動打包時的-configuration
指的是就是這裏啊。每一個項目默認就有的Debug和Release
配置。git
這個Configuration
是對於同一個項目的配置的一個完整的最高的總結了。github
新建這個文件很簡單,xcode自帶了這個模板。而後是在Configuration
裏配置,好比在debug時使用First.xcconfig
在release時使用Second.xcconfig
,如圖:xcode
這一步也簡單。可是我開始使用的時候,思惟就走錯方向了: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
我就暈了,這到底怎麼回事。debug
這裏有兩個坑
Build Settings
裏直接寫的內容是會優先顯示的,就是說Xcode有一個默認的配置文件(yourAppName.xcodeproj/project.pbxproj),若是你直接在Build Settings
裏編輯,是寫到它裏面去,好比只是修改了other linker flag
,再看github的修改:這個文件裏的配置會優先在Configuration
裏指定的.xcconfig
文件裏的配置,那要怎麼使用.xcconfig
文件裏的配置?刪掉Build Settings
裏的配置就行了。Command+delete
搞定。
由於.xcconfig
配置文件很難寫,主要是各類配置名你記不住,因此就到實際的Build Settings
裏面去拷貝,就在對應的配置項Command+C
就有了,因此內容就變成了上面那樣,我覺得3句話是在不一樣環境下起做用的,是互不干擾的,實際上是OTHER_LDFLAGS
設了3遍,左後一次生效,最後是啥?空的啊,因此即便刪除了Build Settings
裏的內容也不出現,我還覺得.xcconfig
文件沒起做用!
因此改爲:OTHER_LDFLAGS = -Objcxxx
而後就有了。
首先使用配置文件的做用就是,在環境切換後,配置能夠跟着一整套的切換,.xcconfig
就至關於一個把相關的配置打包了。
這裏就有了另外一個坑,或者說理解失誤:
我覺得是你在Build Configuration裏選擇什麼,那麼Build Settings裏的內容會跟着改變。
實際上Build Settings仍是原來那樣,改變的是每一項裏面的內容,好比First.xcconfig配置裏寫入OTHER_LDFLAGS = -Objc_first
,而Second.xcconfig裏寫入OTHER_LDFLAGS = -Objc_second
,在外面看到的是這樣的:
每一項配置裏面會再分紅Debug、Release等不一樣的Configuration,而不是Build Settings總體切換了。
或者說這是一個結構上的問題,讓新接觸者會改不清楚Xcode究竟是什麼作到不一樣狀況使用不一樣配置的。
實際結構是這樣:
可是在Build Settings的顯示裏,這個結構是倒過來的:
在整個Build Settings裏,能夠在代碼裏直接使用的,Preprocess Mcros
就是其中之一。
在這裏定義不一樣的宏,就能夠在代碼裏由此作不一樣處理,好比默認的DEBUG
宏就常常用來作條件編譯。
在Build Settings裏能夠$(xxx)
來引用其餘配置裏的東西,那麼也就能夠在這裏定義宏而且跟隨其餘配置而改變。