xcode內(nèi)置了一個(gè)shell環(huán)境,編譯的時(shí)候Build Setting中的配置會(huì)被Xcode導(dǎo)成環(huán)境變量并執(zhí)行相應(yīng)的命令。

如圖我們?cè)陧?xiàng)目中添加一個(gè) ' Test' 腳本命令,然后編譯項(xiàng)目,會(huì)發(fā)現(xiàn)xcode提示錯(cuò)誤,并列出一個(gè)表

表中 = 左邊的代表key,右邊的代表值,我們選出其中的一個(gè)key:ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES,在Biuld Settings中搜索會(huì)看到搜索結(jié)果。

這些key和值就表示了xcode的編譯配置,這也代表我們可以在Biuld Settings外部通過這寫key和值改變xcode的配置。

在oc與swift混編項(xiàng)目swift如果想要引用oc代碼中需要導(dǎo)入橋接頭文件并置頂文件路徑。

在終端通過xcodebuild -showBuildSettings命令輸出項(xiàng)目中的xcconfig配置,能夠看到
SWIFT_OBJC_BRIDGING_HEADER 對(duì)應(yīng)的值就是 橋接文件的路徑。那么我們能否不通過BuildSettings而通過xcconfig配置橋接文件呢。

首先將原來配置的路徑刪除,注意清空路徑后還要選中當(dāng)前行再按下刪除鍵,因?yàn)閤code默認(rèn)BuildSettings優(yōu)先級(jí)最高,否則xcode會(huì)認(rèn)為配置的是空路徑


新建一個(gè)config文件,并添加相關(guān)配置


選擇生效模式。然后編譯項(xiàng)目。在Build Setting中發(fā)現(xiàn)路徑會(huì)自動(dòng)添加到對(duì)應(yīng)的模式下。

條件變量
引用變量:{}
根據(jù)SDK,Archive,Configration對(duì)設(shè)置進(jìn)行條件化,如:
指定Configration是Debug還是Release
指定SDK是模擬器,還是iPhoneos,macosx等
指定架構(gòu)是arm64還是x86_64
[config=Debug][sdk=iphonesimulator*][arch=x86_64]
Xcode 11.4及以后版本可以指定變量為空時(shí)的默認(rèn)值
//$(BUILD_SETTING_NAME:default=value)
應(yīng)用
hosturl:開發(fā)工作中,為了方便開發(fā)與測(cè)試,往往不同的環(huán)境需要配置不同的域名。
因?yàn)閜list文件是會(huì)被編譯到ipa包里的,所以我們可以把host_url加到plist文件中,然后通過plist文件獲取host_url
Xcode在編譯的時(shí)候會(huì)在shell環(huán)境中把變量自動(dòng)替換成這個(gè)變量所代表的值

可以看到控制臺(tái)成功打印了我們?cè)赾onfig中設(shè)置的host_url
宏
為什么我們?cè)诠こ汤锸裁炊紱]有寫就可以使用DEBUG這個(gè)宏呢,就是因?yàn)閤code在bulid setting里預(yù)先給我們定義了

鼠標(biāo)放上去會(huì)提示我們它的key以及key所等于的值
GCC_PREPROCESSOR_DEFINITIONS[config=Debug][sdk=*][arch=*] = DTest=1
GCC_PREPROCESSOR_DEFINITIONS[config=Release][sdk=*][arch=*] = RTest=1
我們仿照xcode在 Debug模式下設(shè)置DTest=1,Release模式下設(shè)置RTest=1。

編譯之后就會(huì)看到我們?cè)O(shè)置的宏已經(jīng)配置到build setting里了,這樣我們就可以通過自己的宏來判斷當(dāng)前的編譯模式了
#if DTest
#import "DTestView.h"
#endif
#if RTest
#import "RTestView.h"
#endif
@interface ViewController ()
{
DTestView *_dView;
RTestView *_rView;
}
@end
如在通過判斷環(huán)境模式來中導(dǎo)入頭文件。
擴(kuò)展


在build setting里找到 User-Defind 然后添加一個(gè)key definedTest = hello xcconfig
再放到info plist文件

最后在到項(xiàng)目中獲取讀取info plist 看到控制臺(tái)成功打印的這個(gè)值。
也就是說我們還可以通過User-Defind自定義build setting中的配置。