xcconfig理解與應(yīng)用

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


截屏2022-11-05 14.47.01.png

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


截屏2022-11-05 14.58.00.png

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

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

截屏2022-11-16 16.11.11.png

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

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

截屏2022-11-16 20.37.38.png

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

截屏2022-11-16 19.47.38.png

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

截屏2022-11-16 20.33.58.png

截屏2022-11-16 20.59.56.png

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


截屏2022-11-16 21.02.05.png

條件變量

引用變量:()和{}
根據(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è)變量所代表的值


截屏2022-11-20 14.19.36.png

可以看到控制臺(tái)成功打印了我們?cè)赾onfig中設(shè)置的host_url

為什么我們?cè)诠こ汤锸裁炊紱]有寫就可以使用DEBUG這個(gè)宏呢,就是因?yàn)閤code在bulid setting里預(yù)先給我們定義了


截屏2022-11-20 14.30.44.png

鼠標(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。


截屏2022-11-20 15.03.57.png

編譯之后就會(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ò)展

截屏2022-11-20 15.23.21.png

截屏2022-11-20 15.24.20.png

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


截屏2022-11-20 15.26.04.png

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容