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