iOS强化1.2-多环境配置

1,672 阅读3分钟

多环境配置

  • 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 NameBundle idIcon等信息

如果两个Target设置相同的Bundle Id那么就可以看作同一个App的不同环境,例如DevRelease

如果两个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

首先配置TargetDemoDebug环境

配置TargetDemo1Release环境

分别选择TargetDemoTargetDemo1运行

通过user_defined+Info.plist+Xconfig来配置多环境

可以删除Target配置的user_defined

创建文件夹命名为xconfig,分别创建DebugRelease模式的配置文件,命名格式为 文件夹名称-Target名称.模式名称,这里我的文件夹分别命名为,xconfig-TargetDemo.debug.xconfigxconfig-TargetDemo.release.xconfig,分别进行配置

分别输入内容

选择不同的Scheme运行

TargetDemo对应的Building Settings查看,发现user_defined自动生成了HOST_URL,这只不过是文件配置和可视化操作的两种不同方式

多环境配置方式小结

  • 使用预编译宏在代码中进行环境判断
  • 通过User-Defined+Info.plist方式配置
    1. 使用单个Target和单个Scheme,需要每次运行修改Scheme环境
    2. 使用多个Scheme,每个Scheme对应一种环境
  • xconfig是配置User-Defined的另一种方式
  • Target更像是多个APP,用这个方式实现多环境配置大材小用了

配置冲突

创建一个新的项目,在根目录分别执行命令pod initpod install,打开项目看到自动生成了两个配置文件

这里默认已经配置好了

但是如果我们自己创建xconfig配置文件并设置,需要使用#include引入Pod创建的配置文件

这里说的很明白了,要么设置base configurationsPods-TargetDemo.debug.xconfig要么在Config-TargetDemo.debug.xconfiginclude

pods文件中添加AFNetworking并执行pod install之后

我们在自己的配置文件中也配置OTHER_LDFLAGS = -framework "SDWebImage"

这里需要使用关键字$(inherited)继承之前的配置信息

我们也可以在Building Settings中继续修改配置

优先级从高到低依次为

  • 手动修改Building Settings
  • 修改Basic中配置的文件,也就是自己的配置文件
  • 修改Pod中的配置文件,也就是被继承的文件

参考文档

xcodebuildsettings