xcconfig的使用与xcode环境变量

在正式使用xcconfig之前,还是得先把这几个概念给区分一下。什么是workspace,什么是project,什么是target。下面一张图简单说明:

image.png
  • workspace,顾名思义就是我们的工作区。一个workspace可以包含多个project以及一些其它文件。workspace也可以把多可以project组织起来。
  • 一个project会包含属于这个项目的所有文件,资源,以及生成一个或者多个软件产品的信息。
  • 一个project会包含一个或者多个 target,而每一个 target都对应一个products,也就是最终产生的.app。
  • 一个targets可以有多个configuration(如我们平常用到的debug和release,当然我们还可以自己添加),每个configuration就会有对应的build settings。每次build都是在一个configuration下build的。
  • build setting 中包含了 product 生成过程中所需的参数信息。project的build settings会对于整个project 中的所有targets生效,而target的build settings是重写了project的build settings,重写的配置以target为准。

那么,什么又是scheme呢?scheme就相当于一个组织者。在build的时候,schema会指定一个target和configuration,这样就能保证在build的时候configuration的唯一性,就能产生一个特定的product。

OK。理清了这些环境变量后,就可以来介绍一下xcconfig了。
在项目中使用了cocoapods的都会发现,在pod项目中有.xcconfig这样的文件,一般有多少个configuration就会有多少个.xcconfig这样的文件。一般工程中就分为debug和release两个。这里的.xcconfig文件就是通过文本方式指定build settings的一种形式。

所以我们也可以在工程中通过创建xcconfig来指定build settings。这样能够更加方面管理和修改。

下面我在一个demo工程中创建了几个xcconfig。

image.png

其中common为通用configuration。

image.png

所有环境相同的settings可以写在这里。然后你就可以在里面去添加任意键值对了。下面是settings.release.xcconfig的一个示例。

// settings.release.xcconfig
#include "settings.common.xcconfig"
#include "Pods/Target Support Files/Pods-TTLivenessDetection_Example/Pods-TTLivenessDetection_Example.release.xcconfig"
ONLY_ACTIVE_ARCH = NO
ENABLE_BITCODE = YES
test = 123

然后在project->info中去设置。

image.png

这里有个坑就是自定义配置后会导致cocoapods无法使用,这里需要在相应的xcconfig里面导入相应的pod的xcconfig

#include "Pods/Target Support Files/Pods-TTLivenessDetection_Example/Pods-
TTLivenessDetection_Example.release.xcconfig"

如果还报这种错

  [!] The `TTLivenessDetection_Example [Debug]` target overrides the 
`HEADER_SEARCH_PATHS` build setting defined in `Pods/Target Support 
Files/Pods-TTLivenessDetection_Example/Pods-
TTLivenessDetection_Example.debug.xcconfig'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

按照它说的把HEADER_SEARCH_PATHS改为$(inherited)就可以了。

另外就是这里有个继承关系,打开levels可以查看


image.png

其中继承关系如下:
Target configuration->Target xcconfig->Project configuration->Project xcconfig。

也就是说如果是单一的配置,继承级低的会覆盖继承等级高的,而像$()这样的会进行叠加。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容