1概念:
Project:包含了项目所有代码、资源文件、所有信息
Target: 对指定代码和资源文件的具体构建方式,从而生成一个特定的Product。
Scheme:对指定Target的环境配置。
2创建
2.1创建Target
选中当前Target -> 右键选择Duplicate -> 弹窗中选Duplicate Only


2.2新建Scheme
点击左上角选择框 -> Edit Schemes -> 选中当前Target -> 设置Scheme Name


2.3新建Configuration
选择Project -> Info -> Configurations -> 点击加号 -> 新建Configuration

此时Scheme中的Build Configuration中的选项多了一个添加的Beta,默认Project创建了Debug和Release两个Build Configuration。
个人感受:我个人觉得项目要生成Product的需要差异比较大(比如SDK不同,涉及的文件、图片、资源不同等)则需要创建不同的Target,如果只是单纯的配置方面的问题(域名、参数、链接)则只需要创建不同的Scheme就可以了。
3,使用
创建不同的Scheme后,进行一次测试
选中Target -> Build Setting -> Add User-Defined Setting

创建HOST_URL设置 Release、Debug、Beta配置不同的地址

在Info.plist里设置键值对 HOST_URL : ${HOST_URL},在代码中获取对应的值


工程Run的时候选择对应的Target和Scheme,对打印出对应配置下的值,这样就根据Scheme分别配置了相应的设置。(正式环境、测试环境、预发布环境可以根据这种方式完美解决)
4.多xconfig文件配置
cmd + n 创建Config文件,一般命名规则:文件夹名-Target名.Build Configuration,后面会自动带上xcconfig

根据自己的Build Configurations创建,每种对应一个,并配置

如果是CocoaPods安装过第三方的话,Configurations下的Xconfig文件就会默认配置成Cocoapods的Xconfig文件。因为Cocoapods就是采用的这种配置管理方式。此时,就会有个尴尬的地方,无论怎么选都不能融合自己的文件和Cocoapods自动生成的配置文件。继承是个好东西!嘎嘎!

我们在自己的Xconfig文件中,#include相应的Pod下来的Xconfig文件,然后在Configurations中选中自己的文件,就可以拥有自定义和Pod的所有配置!!!
5,xcconfig的书写规范
xcconfig是以键值对的形式出现的。
//双斜杠是注释,需要做一个转义
定义 SLASH = /
HOST_URL = http:${SLASH}/www.xxx.com
否则代码中获取HOST_URL的时候,只能获取到http:,后面的无法获取!
参考:多环境配置 · 语雀
网友评论