在做公司项目的时候,我们经常碰到多个开发环境的问题,比如内网环境,联调环境,外网环境等,这时候根据不同的环境,可能会设置不同的域名,但是每次切换起来比较麻烦。这时候,我们可以修改Xcode的配置,来达到切换环境的目的。首先我们先来了解一下Xcode相关的配置的具体含义:
Project:包含了项⽬所有的代码,资源⽂件,所有信息
Target:对指定代码和资源文件的具体构建方式
Scheme:对指定Target的环境配置
方法一:多Target
1、创建新的Target(如下图):

创建新的Target
接下来就会发现,项目中多了一个
Target,并且运行后,会发现,多了一个APP,一个名字是TargetDemo,另一个是TargetDemo-Dev
2、修改
Target和info.plist的名字
3、在
BuildSetting里修改info.plist的名字
4、这时候,我们可以在
BuildSetting,增加一个宏定义,Debug模式下Dev=1,然后在Release模式下Dev=0(如下图)
5、在代码里我们就可以通过宏定义来判定具体的域名
#if Dev
NSLog(@"dev");
#else
NSLog(@"release");
#endif
方法二:多Scheme
1、添加Scheme(如下图),这时候我们就会发现,项目所有的配置中,都会多了一个Beta的配置,

2、对应的,我们创建两个版本的
Scheme,一个Beta,一个Debug(如下图)



创建完成后,我们会发现,项目中多了两个可选择的项如下图:

然后我们指定对应的
Scheme设定对应的环境。SchemeDemo指定到Release,Debug指定到Debug,Beta指定到Beta,
3、然后在
BuildSetting中根据不同的模式,创建不同的域名(如下图)

4、然后在
info.plist中添加域名同名的键值对
image.png
5、我们就可以用不同的
Scheme来获取不同的域名了
方法三:使用xcconfig
1、跟创建普通的类文件一样,创建两个xcconfig文件,分别为Debug和Release对应的版本,并且设置不同的域名


2、更改配置,修改成我们对应的配置文件即可

3、同方法二,第4步,增加键值对
4、同方法二,第5步类似,直接测试我们配置的效果
使用
Scheme+xcconfig文件是我们最推荐的方式,使用起来也比较简单,但是需要注意冲突问题,因为Cocoapods也是使用xcconfig方式,那么如果有两个配置文件,应该以哪种为标准来设置呢?可以使用#include包含别的配置文件。但是如果两个配置文件设置的key相同,会怎么办呢?这时候,我们可以设置继承,使用关键字${inherited}。