xcconfig理解与应用

xcode内置了一个shell环境,编译的时候Build Setting中的配置会被Xcode导成环境变量并执行相应的命令。


截屏2022-11-05 14.47.01.png

如图我们在项目中添加一个 ' Test' 脚本命令,然后编译项目,会发现xcode提示错误,并列出一个表


截屏2022-11-05 14.58.00.png

表中 = 左边的代表key,右边的代表值,我们选出其中的一个key:ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES,在Biuld Settings中搜索会看到搜索结果。
截屏2022-11-05 15.02.04.png

这些key和值就表示了xcode的编译配置,这也代表我们可以在Biuld Settings外部通过这写key和值改变xcode的配置。

截屏2022-11-16 16.11.11.png

在oc与swift混编项目swift如果想要引用oc代码中需要导入桥接头文件并置顶文件路径。
截屏2022-11-16 19.41.48.png

在终端通过xcodebuild -showBuildSettings命令输出项目中的xcconfig配置,能够看到SWIFT_OBJC_BRIDGING_HEADER 对应的值就是 桥接文件的路径。那么我们能否不通过BuildSettings而通过xcconfig配置桥接文件呢。

截屏2022-11-16 20.37.38.png

首先将原来配置的路径删除,注意清空路径后还要选中当前行再按下删除键,因为xcode默认BuildSettings优先级最高,否则xcode会认为配置的是空路径
截屏2022-11-16 20.39.32.png

截屏2022-11-16 19.47.38.png

新建一个config文件,并添加相关配置

截屏2022-11-16 20.33.58.png

截屏2022-11-16 20.59.56.png

选择生效模式。然后编译项目。在Build Setting中发现路径会自动添加到对应的模式下。


截屏2022-11-16 21.02.05.png

条件变量

引用变量:()和{}
根据SDK,Archive,Configration对设置进行条件化,如:
指定Configration是Debug还是Release
指定SDK是模拟器,还是iPhoneos,macosx
指定架构是arm64还是x86_64
[config=Debug][sdk=iphonesimulator*][arch=x86_64]
Xcode 11.4及以后版本可以指定变量为空时的默认值
//$(BUILD_SETTING_NAME:default=value)

应用

hosturl:开发工作中,为了方便开发与测试,往往不同的环境需要配置不同的域名。

因为plist文件是会被编译到ipa包里的,所以我们可以把host_url加到plist文件中,然后通过plist文件获取host_url
Xcode在编译的时候会在shell环境中把变量自动替换成这个变量所代表的值


截屏2022-11-20 14.19.36.png

可以看到控制台成功打印了我们在config中设置的host_url

为什么我们在工程里什么都没有写就可以使用DEBUG这个宏呢,就是因为xcode在bulid setting里预先给我们定义了


截屏2022-11-20 14.30.44.png

鼠标放上去会提示我们它的key以及key所等于的值

GCC_PREPROCESSOR_DEFINITIONS[config=Debug][sdk=*][arch=*] = DTest=1
GCC_PREPROCESSOR_DEFINITIONS[config=Release][sdk=*][arch=*] = RTest=1

我们仿照xcode在 Debug模式下设置DTest=1,Release模式下设置RTest=1。


截屏2022-11-20 15.03.57.png

编译之后就会看到我们设置的宏已经配置到build setting里了,这样我们就可以通过自己的宏来判断当前的编译模式了

#if DTest
    #import "DTestView.h"
#endif

#if RTest
    #import "RTestView.h"
#endif

@interface ViewController ()
{
    DTestView *_dView;
    RTestView *_rView;
}
@end

如在通过判断环境模式来中导入头文件。

扩展

截屏2022-11-20 15.23.21.png

截屏2022-11-20 15.24.20.png

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


截屏2022-11-20 15.26.04.png

最后在到项目中获取读取info plist 看到控制台成功打印的这个值。
也就是说我们还可以通过User-Defind自定义build setting中的配置。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容