「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战。」
什么是 xcconfig 文件
简单来说,xcconfig 是苹果在 xcode 文件中用来使同一套代码能够在不同的条件下编译,运行的一个配置文件。
怎么生成和配置一个配置文件
在工程中添加一个新文件,然后在弹出框搜索 configuration,就可以看到下图的结果:
我这里创建了一个名为 TestConfig.debug.xcconfig 的文件
然后在Project里面设置刚才新建的文件,这样就可以在 Debug 条件下使用这个文件了
现在就可以开始在 TestConfig.debug.xcconfig 文件中添加配置了。
xcconfig文件语法介绍
xcconfig文件的语法比较简单,每个配置文件都由一系列的键值组成
BUILD_SETTING_NAME = value
注释
xcconfig 文件只有一种注释方式 \\
include 导入其他设置
在创建 xcconfig 文件的时候,可以根据需求,创建多个。这个时候就可以通过 include 关键字导入其他的 xcconfig 内的配置
#include "Debug.xcconfig"
在引入文件的时候,可以写绝对路径也可以使用相对路径。${SRCROOT} 代表项目根目录下,$(PROJECT_DIR)代表的是整个项目。
变量
变量定义,按照OC命名,仅由大写字母、数字和下划线构成,原则上大写,但是也可以小写。字符串可以是双引号"修饰,也可以是单引号'修饰,变量有三种特殊情况:
- 在
xcconfig定义的变量与Build Setting中的变量相同,那么就会发生覆盖的情况,可以通过$(inherited)关键字来继承Build Setting的值,这个最常见的就是解决了和pods.xcconfig的冲突。
OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"
有部分变量不能通过xcconfig 配置到Build Settings,比如配置 PRODUCT_BUNDLE_IDENTIFIER不生效
-
引用变量 ()都可以
-
条件变量,根据SDK、Arch和Configration 对设置进行条件化,比如:
//指定`Configration`是`Debug`
//指定`SDK`是模拟器,还是`iphoneos* `macosx*`等等
//指定生效架构是`x86_64`
OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*[arch=x86_64]= $(inherited) -framework "SDWebImage"
在 Xcode 11.4 及之后版本,可以使用default,来指定变量为空时的默认值
$(BUILD_SETTING_NAME:default=value)
优先级(由高到低)
-
手动配置 Target Build Settings
-
Target 中配置的 xcconfig 文件
-
手动配置 Project Build Settings
-
Project 中配置的 xcconfig 文件
Xcode Build Settings 对应的 xcconfig 变量,可以查看这个链接:xcodebuildsettings.com
总结:
其实我们在日常开发中,需要设置 Build Settings 选项还是挺多的,假如都设置在 xcconfig 文件中,这样就可以一目了然,并且设置的是条件变量。像我们配置的多环境就可以通过这样的方式实现:具体实现的案例可以参考:iOS配置多环境的三种方案