基本概念
- Project:包含了项⽬所有的代码,资源⽂件,所有信息。
- Target:对指定代码和资源⽂件的具体构建方式。
- Scheme:对指定Target的环境配置。
通过不同的方式配置多环境
通过Duplicate Target方式配置

- 通过上述操作之后会多生成一个target,也会多出来一个info.plist

-
可以定义一个宏的方式,对代码做一些差异化的配置
-
oc在
build setting
->Preprocessor Macros
-
swift在
build setting
->Other Swift Flags
,需要注意的是swift
中使用宏需要加上-D
参数 -
这种方式配置起来缺点
- 生成多个info.plist
- 需要配置的点比较多,比较乱
通过配置Scheme的方式

- 再通过
Edit Scheme
->Manage Schemes
新增不同环境的scheme - 再将不同的
Scheme
对应到不同的Build Configuration
模式下
使用场景举例
- 在日常开发中,不同环境下的
host url
的地址都会有不同的差异,通过定义一个宏的方式

- 再通过
info.plist
文件暴露出来

- 使用方式如下
ini
NSString *path = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@".plist"];
NSDictionary *infoDict = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"host url:%@",infoDict[@"HOST_URL"]);
复制代码
xcconfig文件
xcconfig指南
- xcconfig文件的语法比较简单,每个配置文件都由一系列键值分配组成,这些键值分配具有以下语法:
ini
BUILD_SETTING_NAME = value
复制代码
Build Setting
value对应字段的缩写,Build Setting字段对应查询
注释
- xcconfig文件只有一种注释方式\。
include导入其他设置
- 在创建xcconfig文件的时候,可以根据需求,创建多个。也就意味着,可以通过include关键字导入其他的xcconfig内的配置。通过include关键字后接上双引号:
arduino
#include "Debug.xcconfig"
复制代码
- 在搜索引入的文件时,如果是以/开头,代表绝对路径,例如:
arduino
// 表示确切的文件位置
#include "/Users/xx/Desktop/.../xxx.xcconfig"
复制代码
- 或者通过相对路径,以${SRCROOT}路径为开始:
arduino
#include "Pods/Target Support Files/xxx.xcconfig"
复制代码
变量
-
变量定义,按照OC命名规则,仅由大写字母,数字和下划线
(_)
组成,原则上大写,也可以不。字符串可以是"
也可以是'
号。 -
变量有三种特殊情况:
-
- 在
xcconfig
中定义的变量与Build Settings
的一致,那么会发生覆盖。可以通过$(inherited)
,让当前变量继承变量原有值。例如:
- 在
iniOTHER_LDFLAGS = -framework SDWebImage OTHER_LDFLAGS = $(inherited) -framework AFNetworking // OTHER_LDFLAGS = -framework SDWebImage -framework AFNetworking 复制代码
注意⚠️:有部分变量不能通过xcconfig配置到Build Settings中,例如:配 置PRODUCT_BUNDLE_IDENTIFIER不起作用。 复制代码
-
- 引用变量,
$()
和${}
两种写法都可以:VALUE=value
- 引用变量,
iniTEACHER=$(VALUE)-${VALUE} 复制代码
-
- 条件变量,根据
SDK
、Arch
和Configration
对设置进行条件化,例如:
- 条件变量,根据
scss// 指定`Configration`是`Debug` // 指定`SDK`是模拟器,还有iphoneos*、macosx*等 // 指定生效架构为`x86_64` OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*[arch=x86_64]= $(inherited) -framework "Cat" 复制代码
javascript注意⚠️:在Xcode 11.4及以后版本,可以使用default,来指定变量为空时的默认值: $(BUILD_SETTING_NAME:default=value) 复制代码
-
优先级(由高到低):
-
- 手动配置Target Build Settings
-
- Target中配置的xcconfig文件
-
- 手动配置Project Build Settings
-
- Project中配置的xcconfig文件