多环境配置
- Project:包含了项目所有的代码,资源文件,所有信息。
- Target:对指定代码和资源文件的具体构建方式。
- Scheme:对指定Target的环境配置。
通过preprocesor macro来配置多环境
在代码中根据宏来做判断,从而实现多环境配置
通过user_defined+Info.plist+单个Target来配置多环境
选择
Debug环境
同样的方式选择
Release环境运行
通过user_defined+Info.plist+多个Target来配置多环境
新建工程TargetDemo,在工程中新建target命名为TargetDemo2
将plist文件名称修改为TargetDemo2-Info.plist
可以看到不同的Target可以设置自己的App Name、Bundle id、Icon等信息
如果两个Target设置相同的Bundle Id那么就可以看作同一个App的不同环境,例如Dev和Release
如果两个Target设置不同的Bundle Id,那么这完全就是两个不同的App了
这里我们演示使用TargetDemo配置Debug环境,使用TargetDemo1配置Release环境,在创建Target的时候系统也帮我们创建了对应的Scheme
选中TargetDemo选择Debug模式
选中
TargetDemo1选择Release模式
因为我们之前已经配置好了HOST_URL
分别运行
创建Target的时候系统帮我们创建了对应的Scheme,那么我们能不能不创建多个Target而是通过创建多个Scheme来实现多环境配置呢
通过user_defined+Info.plist+多个Scheme来配置多环境
选择Edit Scheme来进行配置
这里还是要配置好HOST_URL
首先配置TargetDemo为Debug环境
配置TargetDemo1为Release环境
分别选择TargetDemo和TargetDemo1运行
通过user_defined+Info.plist+Xconfig来配置多环境
可以删除Target配置的user_defined
创建文件夹命名为xconfig,分别创建Debug和Release模式的配置文件,命名格式为 文件夹名称-Target名称.模式名称,这里我的文件夹分别命名为,xconfig-TargetDemo.debug.xconfig和xconfig-TargetDemo.release.xconfig,分别进行配置
分别输入内容
选择不同的Scheme运行
去TargetDemo对应的Building Settings查看,发现user_defined自动生成了HOST_URL,这只不过是文件配置和可视化操作的两种不同方式
多环境配置方式小结
- 使用预编译宏在代码中进行环境判断
- 通过
User-Defined+Info.plist方式配置- 使用单个
Target和单个Scheme,需要每次运行修改Scheme环境 - 使用多个
Scheme,每个Scheme对应一种环境
- 使用单个
xconfig是配置User-Defined的另一种方式- 多
Target更像是多个APP,用这个方式实现多环境配置大材小用了
配置冲突
创建一个新的项目,在根目录分别执行命令pod init和pod install,打开项目看到自动生成了两个配置文件
这里默认已经配置好了
但是如果我们自己创建xconfig配置文件并设置,需要使用#include引入Pod创建的配置文件
这里说的很明白了,要么设置base configurations为Pods-TargetDemo.debug.xconfig要么在Config-TargetDemo.debug.xconfig中include之
在pods文件中添加AFNetworking并执行pod install之后
我们在自己的配置文件中也配置OTHER_LDFLAGS = -framework "SDWebImage"
这里需要使用关键字$(inherited)继承之前的配置信息
我们也可以在Building Settings中继续修改配置
优先级从高到低依次为
- 手动修改
Building Settings - 修改
Basic中配置的文件,也就是自己的配置文件 - 修改
Pod中的配置文件,也就是被继承的文件