xcconfig的作用以及配置流程

4,708 阅读3分钟

IMG_9412.jpg

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

写下一些我对xcconfig的了解~

xcconfig是什么?

xcconfig文件是Xcode的配置设置文件(又称构建配置文件或者xcconfig文件),文件扩展名就是.xcconfig,是一个用于定义和覆盖project或者target的特定构建配置的纯文本文件。简单的说,.xcconfig文件就是通过文本方式指定build setting的一种形式。

为什么要用xcconfig?

设想一下,一个工程在团队里由多人共同开发时,如果同事A修改了build settings的配置提交到git,同事B也修改了build settings,这时同事B提交代码时就很容易发生冲突,这时候我们就可以用Xcconfig文件来解决这个问题了。而且一般比较成熟的项目基本都会有自己的.xcconfig文件,这样会更方便管理和修改工程的配置信息。

xcconfig的配置流程

说了半天虚的,现在来到实干环节,如何编写项目的.xcconfig文件并生效到工程呢?我们开发阶段一般分为测试和正式环境,先创建Debug和Release这两种环境下的.xcconfig文件

1.png

生成后在工程目录如下图

2.png

然后我们就可以在生成的.xcconfig文件里添加想要添加的键值对了,.xcconfig文件的语法比较简单,每个配置文件都由一系列键值分配组成,这些键值分配具有以下语法:

BUILD_SETTING_NAME = value

给个demo如下

3.png 这个图片定义了BasicURLAPP_NAMEAPP_DISPLAY_NAMECONFIG_FLAG四个变量,其中BasicURLAPP_NAME又在GCC_PREPROCESSOR_DEFINITIONS后面跟着,所以在工程中会变成宏定义。

定义完build一下看有没有生效,可以去TARGETS里面最后的User-Defined看看,有就代表键值对添加成功了

4.png

这时还没完,因为宏定义还没加进工程!这时去到build Setting的preprocessor Macros选项,添加$(inherited)参数后回车,才会把宏定义引入到工程

5.png

6.png 注意!!!!想要在.xcconfig中宏定义变量,则必须要有GCC_PREPROCESSOR_DEFINITIONS = $(inherited)这行代码,然后把对应的宏定义名字和值跟在这行代码后面,用空格隔开,不要换行,宏定义的等号两边也不能有空格,不然会报错导致编译失败!我就是在这里踩坑了,花了好多时间找原因,大家引以为鉴!

最后一步来了!在工程的PROJECT -> Info -> Configurations中,Debug和Release环境均指定对应的.xcconfig文件,如下图

7.png 这时候终于可以运行起来了~

工程中读取宏定义如下:

8.png 工程中修改配置用.xcconfig定义如下

9.png 读出来是这样的

10.png

题外话之我的踩坑之旅:

        一开始没有在.xcconfig中加入GCC_PREPROCESSOR_DEFINITIONS = $(inherited)这行代码,直接在preprocessor Macros里面的放入BasicURL,导致运行工程后读到BasicURL这个宏定义后崩溃了

        第二步踩坑是我把BasicURL='\${BasicURL}’写成BasicURL = '${BasicURL}’了,对没错,就是等号左右两边留了空格,程序员格式强迫症的毛病=_=,然后构建时覆盖到build setting里的preprocessor Macros时出错了,导致找了半天问题才发现是空格!!!

后记:

.xcconfig文件之宏定义

在.xcconfig文件设置宏定义的优势是,可以根据不同的环境去执行不同的配置,只要在配置文件中写入对应环境的接口访问地址,以及一些第三方SDK的key配置,就能达到不用因为环境的变化而去更改代码读取数据的接口地址

而宏定义的优先级是:代码中#define定义 > .xcconfig文件设置 > build setting中preprocessor Macros设置