xcconfig的使用与xcode环境变量

在正式使用xcconfig之前,还是得先把这几个概念给区分一下。什么是workspace,什么是project,什么是target
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。
在这里插入图片描述

其中common为通用configuration。

在这里插入图片描述

所有环境相同的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中去设置。

在这里插入图片描述

这里有个坑就是自定义配置后会导致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可以查看

在这里插入图片描述

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值