多环境配置

前言:

Project: 包含了项目所有的代码,资源文件,所有信息。

Target: 对指定代码和资源文件的具体构建方式。

Scheme: 对指定Target的环境配置。

一. 多环境配置

1.1  创建多个target

image.png

创建完target,会生成对应的.plist文件,可以进行相应的配置。如 bundleid  icon图标 ... 等等

配置新生成的.plist文件路径

image.png

多个target缺点:

多个info.plist 文件,配置比较繁琐

1.2设置预处理宏

设置控制环境的参数

OC配置相应的宏

image.png

Swift配置相应的宏

image.png

根据不同的宏值做相应判断逻辑

#if DEV 

#import  

#else

 #import  

#endif

2.1设置多个Scheme

点击加号添加scheme 如下图

image.png

点击 Manage Schemes -> 点击+号  弹出下图配置相应的scheme  如 LoginApp  Debug  Beta ... 等等

image.png

点击 Edit Schemes  将不同环境scheme 与 Build Configuration 配置一一对应,如下图所示

image.png

2.2配置不同环境下的宏

image.png
image.png

最后在info.plist中配置

image.png

工程中取配置的宏

NSString *path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];  NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:path];    NSLog(@"%@",infoDic[@"HOST_URL"]);

小提示:也可以配置不通scheme的icon  app名称等等

3.1配置不同scheme环境的xcconfig文件,类似于cocoapods中pods文件夹下内容

image.png

接下来是配置过程

image.png
image.png

如果是多个target工程,xcconfig也可以配置不同target工程

上面创建的xcconfig文件里边配置HOST_URL如下

debug文件 :HOST_URL = 127.0.0.1

release文件:HOST_URL = 127.0.0.2

同时需要在文件中配置 HOST_URL  = ${HOST_URL}  参考上面的图,不同环境下运行就可以取出相应配置的 HOST_URL 值  类似于多个scheme取值一样,同时 User-Defined 里面也会出现相应 HOST_URL 值。

注意⚠️  Cmd + Delete 删除 User-Defined -> HOST_URL,重新编译User-Defined下也会出现对应的HOST_URL值

我们好奇为什么会定义A呢,是因为如果我们直接写成HOST_URL=https://www.debug.com,编译器会默认//是注释符号。

//在debug的config下       

 A=/ 

HOST_URL=https:${A}/www.debug.com

//在release的config下

A=/

HOST_URL=https:${A}/www.release.com

image.png


xcconfig文件进行相应配置可以映射到 Build Settings 中,如下图所示

image.png
image.png

小结:xcconfig文件里面是 key - value 的配置,OTHER_LDFLAGS是 Other Linker Flags 的缩写,相应缩写可以在  xcodebuildsettings 查询

多环境配置方式小结

使用预编译宏在代码中进行环境判断

通过方式配置

    1. 使用单个Target和单个Scheme,需要每次运行修改Scheme环境

    2. 使用多个Scheme,每个Scheme对应一种环境

xconfig是配置User-Defined的另一种方式

多Target更像是多个APP,用这个方式实现多环境配置大材小用了

配置冲突

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

image.png

这里默认已经配置好了

image.png

接下来我们把Configurations 下面默认配置的改为自定义的 文件,终端执行 pod install 会出现下面冲突

image.png

解决办法:要么设置base configurations为Pods-LoginApp.debug.xcconfig要么在Config-LoginApp.debug.xcconfig中导入

#include "Pods/Target Support Files/Pods-LoginApp/Pods-LoginApp.debug.xcconfig"

在Podfile文件中添加AFNetworking,SDWebImage并执行pod install之后,查看Other Linker Flags 配置如下图

image.png

在自定义xcconfig文件中配置如下

image.png

编译之后查看Other Linker Flags 配置如下图,发现Pods中xcconfig被覆盖掉了

image.png

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

image.png

配置完继承关系之后,编译 查看Other Linker Flags 

image.png

总结: 优先级(由高到低)

手动配置Target Build Settings

Target中配置的自定义xcconfig文件

Target中配置的Pod  xcconfig文件

手动配置Project Build Settings

Project中配置的自定义xcconfig文件

Project中配置的Pod  xcconfig文件

你可能感兴趣的:(多环境配置)