在APP開(kāi)發(fā)中,一般會(huì)存在develop 環(huán)境 ,test環(huán)境,online環(huán)境.一般不同的環(huán)境我們可能需要不同的接口,還有一些變量自動(dòng)變?yōu)椴煌闹?這個(gè)時(shí)候使用Configfile配置不同的環(huán)境就很好用了
一般我們創(chuàng)建一個(gè)Porject的時(shí)候就會(huì)默認(rèn)有Debug Release兩個(gè)配置
一般target是默認(rèn)繼承Project的configs.不過(guò)我們可以在Project里面指定某個(gè)target使用哪個(gè)config文件
我們也可以選擇加號(hào)或減號(hào)來(lái)新增或刪除某個(gè)config.例如我們上傳到fir平臺(tái)的打包一般選擇adhoc,我們可以選擇新加一個(gè)adhoc的config
新建一個(gè)config文件很簡(jiǎn)單,直接xcode中選擇新建一個(gè)configfile. config文件也很簡(jiǎn)單就是鍵值對(duì)的形式 key=value .config文件支持bool值, string值,path值,string list (stringlist 字符串以空格分開(kāi),如果字符串內(nèi)部包含空格,該字符串需要用引號(hào)包裹起來(lái))
1.如果config文件中定義的值是Project或target中已經(jīng)有的值,不想被config文件定義的值被覆蓋,可以使用$(inherited)
BUILD_SETTING_DECLARATION_NAME = $(inherited)ADDITIONAL_VALUE
2.config文件中支持引用已經(jīng)定義好的環(huán)境變量
DSTROOT = /tmp/$(PROJECT_NAME).dst
3.config文件支持條件定義
OTHER_LDFLAGS[sdk=macosx*] = -lncurses
OTHER_LDFLAGS[sdk=macosx*][arch=x86_64] = -lncurses
4.config文件中可以引入其他的config文件
#include "MyOtherConfigFile.xcconfig"
如果導(dǎo)入的文件可能不存在可以使用?號(hào)#include? "MyOtherConfigFile.xcconfig"
當(dāng)然引入其他config文件可以使用相對(duì)路徑,絕對(duì)路徑
config文件中定義的值可以在project settings,?info.plist , entitlement files文件中使用.如果想要在代碼中使用有兩種方式:
一種是通過(guò)讀取info.plist來(lái)得到這個(gè)字段
另一種是通過(guò) GCC的預(yù)編譯參數(shù):GCC_PREPROCESSOR_DEFINITIONS = $(inherited) VariableA='$(VariableA)'VariableB='$(VariableB)'?VariableD=$(VariableD)
其實(shí)就是在Build Settings->Apple LLVM 7.x Preprocessing->Preprocessor Macros中添加自定義的編譯宏
這個(gè)預(yù)編譯參數(shù)會(huì)讓編譯器自動(dòng)為我們加上這幾個(gè)宏.上面的示例就是表示在config中定義的字符串VariableA ,VariableB 和其他類型的VariableD 會(huì)被自動(dòng)轉(zhuǎn)換為宏
ps:當(dāng)我們使用config文件的時(shí)候注意,如果同時(shí)使用了cocoapods要記得將cocopods自動(dòng)生成的config文件導(dǎo)入我們自定義的config文件中.否則會(huì)出現(xiàn)無(wú)法找到cocopods文件的報(bào)錯(cuò)
#include "Pods/Target Support Files/Pods-ConfigDemo/Pods-ConfigDemo.release.xcconfig"
記得使用相對(duì)路徑