xcconfig的作用以及配置流程

敞开生长之旅!这是我参与「日新计划 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文件

xcconfig的作用以及配置流程

生成后在工程目录如下图

xcconfig的作用以及配置流程

然后咱们就能够在生成的.xcconfig文件里增加想要增加的键值对了,.xcconfig文件的语法比较简略,每个装备文件都由一系列键值分配组成,这些键值分配具有以下语法:

BUILD_SETTING_NAME = value

给个demo如下

xcconfig的作用以及配置流程
这个图片界说了BasicURLAPP_NAMEAPP_DISPLAY_NAMECONFIG_FLAG四个变量,其中BasicURLAPP_NAME又在GCC_PREPROCESSOR_DEFINITIONS后边跟着,所以在工程中会变成宏界说。

界说完build一下看有没有生效,能够去TARGETS里边最后的User-Defined看看,有就代表键值对增加成功了

xcconfig的作用以及配置流程

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

xcconfig的作用以及配置流程

xcconfig的作用以及配置流程
注意!!!!想要在.xcconfig中宏界说变量,则必须要有GCC_PREPROCESSOR_DEFINITIONS = $(inherited)这行代码,然后把对应的宏界说姓名和值跟在这行代码后边,用空格隔开,不要换行,宏界说的等号两边也不能有空格,不然会报错导致编译失利!我便是在这里踩坑了,花了很多时间找原因,大家引以为鉴!

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

xcconfig的作用以及配置流程
这时候终于能够运转起来了~

工程中读取宏界说如下:

xcconfig的作用以及配置流程
工程中修正装备用.xcconfig界说如下

xcconfig的作用以及配置流程
读出来是这样的

xcconfig的作用以及配置流程

题外话之我的踩坑之旅:

一开始没有在.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设置