关于多环境:
- Project:包含了项目所有信息——所有代码、资源文件(workSpace就是包含多个Project)
- Target:对指定代码和资源文件的具体构建方式
- Scheme:对指定 target 的环境配置
一:多target
Target 是具体做事的;而 Scheme 就是指定 Target 具体怎么做(执行哪份配置)
1. Duplicate 一个 Target
Duplicate 完成之后会发现多了一个 plist 文件,这个 plist 与 新的target 是对应的。
2. 修改 target 名
3. 修改对应target下配置
3.1 - 修改对应 target 下的 AppIcon(targets - build settings - search "appicon")
原 target:
Dev target:
3.2 - 在对应 target 下配置宏,在代码中根据宏来区分 target
原 target 下宏配置:
Dev target 下宏配置:
代码中根据宏来区分Target:
- 原 target:
- Dev target
多 Target 配置多环境虽然能够满足我们的需求,但是会生成多个Info.plist文件,而修改配置需要频繁操作每个Info.plist文件(有点儿麻烦,好在还有别的方案)
二:多 scheme
与多Target类似,都是通过自定义参数类达到目的。
1. 添加 Configuration
我们添加了一个名为 Beta 的 configuration,然后到 Edit Schemems 里面,可以看到 Build Configuration 变成了三个:
Target 下所有涉及到配置的地方也都变成了三个:
2. 添加 Scheme
我这里添加了两个 scheme
3. 给 scheme 设置对应的 configuration
在 Edit Schemes 里,给scheme设置configuration;如下图:
4. 自定义配置变量
添加自定义变量;如下图:
这里我们添加了环境变量: BASE_URL,并对三种环境下分别设置了值:
5. 通过Info.plist将自定义的配置变量暴露
因为在代码中无法直接拿到配置的变量,但是可以通过在Info.plist中配置,从而获取到。
自定义变量在Info.plist中的配置:
通过Info.plist读取变量值:
- 这样就可以通过切换Scheme来完成多环境配置,但是自定义配置还是有点复杂
三:多 Xcconfig (Xcode Config)
1. 创建.xcconfig 文件
命名一般为:项目名 + 环境名(可参考集成Cocoapods时的 .xcconfig 文件)
2. 给Configuration设置 .xcconfig 文件
这里我们看到Project也可以选择配置文件,因为在Project的BuildSetting里面也有相应环境的配置,也可以通过.xcconfig文件进行配置,下面红圈的是代表每个target的配置
3. 在 .xcconfig 文件中定义变量
这里还以BASE_URL为例;(注意:多Target 中已在 Info.plist 里添加 BASE_URL)
3.1 在.xcconfig 文件中定义变量 BASE_URL:
3.2 在代码中读取:
- .xcconfig文件实质就是在配置 BuildSetting 里面的选项———Xcode Build Settings网站、Xcode Build 配置文件 详细介绍了各个变量
四:Xcconfig (Xcode Config) 冲突
1. Pods-config冲突
当我们在多环境下进行podfile配置后,终端会报出警告,且项目无法运行
从字面意思看就是 “因为你的项目配置了自定义的xcconfig,所以 Pods-config 没有生效”———为了解决这个警告、让项目能够运行,需要在自定义的xcconfig 文件中引用Pods-config
按照提示来操作(在每个自定义的xcconfig中引入对应的pods-config):
如此这般,警告就没有了。。。
2. 继承xcconfig
只是像上面那样引用还不够,因为引用只是将原有的配置引用过来,如果在自定义的xcconfig文件中重写的话,就会覆盖原来的
原来的:
重写后:
解决覆盖问题,使用Xcode内置的 $(inherited) 字段类继承(Pods-config也是如此操作的)
- 在引用、继承 之后,任然可以在 Build Settings 手动添加引用,这是不冲突的