OC学习24:多环境配置

张建 lol

多环境配置

  • Project : 包含了项目所有的代码、资源文件和所有信息。
  • Target : 对指定代码和资源文件的具体构建方式。
  • Scheme : 对指定的Target的环境配置

在实际开发中,我们必须要进行网络请求(内网和外网),而网络请求则就要针对不同的环境(开发测试生产)有不同的的 主机名称(URL_HOST),那么我们如何获取某个环境下的URL_HOST,那么在这个过程中,我们需要进行配置,而 多环境配置 的方式有三种:

  1. Target 配置
  2. Scheme 配置
  3. xcconfig 配置

Target 配置

  1. 新建Dev的Target
  • 选中 TargetLoginApp -> 右键选中 Duplicate 复制 -> 生成新的 LoginApp copy -> 将其改名为 LoginApp-Dev

  • 修改 Bundle Identifier 名为 com.srsf.LoginApp-Dev

  • 修改新生成的 LoginApp copy-info 名为 LoginApp-Dev-info,plist名称改变同时需要在 Build Settings -> Packaging -> info.list File 下 -> 将 LoginApp copy-info 改成 LoginApp-Dev-info

如下图:

注:到目前为止,你运行 LoginAppLoginApp-Dev 会生成两个 App

  1. 添加自定义宏 macros
  • 选中 LoginApp-Dev -> Builds Settings -> all -> 搜索 macros -> Apple Clang - Preprocessing -> 选中 Debug 右键空白双击 -> 弹出添加 DEV=1;同理,Release 设置 DEV=0

  • 此时,自定义的宏已经生效了,此时可以在任意地方调用下面的方式进行判断使用
1
2
3
4
5
#if DEV
#define URL_HOST @"http://192.168.0.1"
#else
#define URL_HOST @"http://192.168.0.2"
#endif
  1. 当你切换不同的 Scheme 时,打印不同的 URL_HOST

如果你觉得 Scheme 下名字看的不爽,也可以将 Scheme 下的名字也修改:LoginApp copy 改成 LoginApp-Dev

  1. 总结

Target 配置这种方式,每创建一个 target 都会产生新的 info.plist,每一个都需要去配置 macros,配置比较乱,不推荐 使用。

Scheme 配置

  1. 首先我们要了解到 Scheme 默认是有两种环境变量 DebugRelease,可以在 Edit Scheme -> Run -> info -> Build Configuration 下查看。

  1. 其次,与之对应的环境配置在 Project -> LoginApp -> Configurations 下也可以看到

  1. Project -> Info -> Configurations 下,我们可以创建一个自己的配置环境 Beta,现在我们有了 种配置方式,对应的在 Edit Scheme -> Run -> info -> Build Configuration 下也有三种,同时在 Target -> Build Settings -> Build Active Architecture Only 下也有对应的三种配置方式,说明这是一个 全局 的配置,如下图:

  1. 新建 Scheme
  • 点击 LoginApp -> manager Schemes -> 点击 + 号 -> 添加 DebugBeta 两种,加上 LoginApp 本身 Release 就是三种,对应上面 三种 配置

  • 点击 Edit Scheme 切换 Scheme,并指定 Configurations,如下图

  1. 自定义主机名URL_HOST
  • Target -> Build Settings -> 点击 + 号 -> Add User-Defined Settings -> URL_HOST,此时我们发现其对应的配置也是三个,分别设值如下:

  1. URL_HOST 添加到 info.plist 文件中,Build Settings 中的配置可以通过 info.plist 暴露出来,可以直接读出来

  1. 在项目中使用
1
2
3
NSString * path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary * infoDic = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"%@",infoDic[@"HOST_URL"]);

切换 Scheme ,打印如下

1
2
3
Debug:http://137.0.0.2
Beta:http://137.0.0.1
LoginApp:http://www.zjboy.com
  1. 同理配置图标的也一样

xcconfig 配置

  1. 在实际项目中,我们可能会有多个主机名称 HOST_URL,因此,我们还是需要去配置多个Configurations,下面还是以三个为准
  • Project -> LoginApp -> Configurations 下,我们可以创建一个自己的配置环境 Beta,现在我们有 了 种配置方式,对应的在 Edit Scheme -> Run -> info -> Build Configuration 下也有三种,同时在 Target -> Build Settings -> Build Active Architecture Only 下也有对应的三种配置方式,说明这是一个 全局 的配置,如下图:

  1. 在主项目下,创建 Congifg 文件,并在下面创建三个对应环境的 .xxconfig 文件
  • 在Config文件夹下 -> command + N -> 搜索config

  • 输入对应的名称 -> 点击create

  • 创建成功之后,如下图

  1. 选择对应Target的进行配置

  1. xxconfig 文件中写入 HOST_URL
  • Debug
1
2
A = /
HOST_URL = http:${A}/127.0.0.1
  • Beta
1
2
A = /
HOST_URL = http:${A}/127.0.0.2
  • Release :
1
2
A = /
HOST_URL = http:${A}/www.bboyzj.cn
  1. 同样,我们需要在 info.plist 文件中暴露,在项目中取出

  1. 项目中代码取出
1
2
3
NSString * path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary * infoDic = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"%@",infoDic[@"HOST_URL"]);

切换不同的 scheme 的打印结果

1
2
3
4
5
Debug:http://127.0.0.1

Beta: http://127.0.0.2

Release:https://www.bboyzj.cn

Pch

  • 到 Target -> Build Settings -> 设值不同的DEBUG值

  • 具体是现代吗
1
2
3
4
5
6
7
8
#if (DEBUG == 1)
#define kBaseUrl @"http://127.0.0.1"
#elif (DEBUG == 2)
#define kBaseUrl @"http://127.0.0.2"
#else
#define kBaseUrl @"https://www.bboyzj.cn"
#endif
NSLog(@"url:%@",kBaseUrl);

xconfig 其他功能

  • xconfig 全名是 xcodeConfig,它不仅仅是一个文件,它的本质是控制 Build Settings 里面的选项(比如配置动态库、静态库等)
1
2
3
// ld 配置到链接器上
// OTHER_LDFLAGS 即 Other Linker Flags 的缩写
OTHER_LDFLAGS = -framework "AFNetworking"
  • 在Debug配置下运行,报错 ld: framework not found AFNetworking ,然后我们找到 Other Linker Flags,可以看到如下

  • 他的原理与 cocoapods 的原理相同

  • 想查找 Build Settings 中选项的缩写,这里有一个网站可以去查看 Build Settings 缩写网站

  • 比如搜索一个 header search path,找到其缩写 HEADER_SEARCH_PATHS

1
HEADER_SEARCH_PATHS = \user\zjbboy
  • 你会在 build settings 找到

  • Post title:OC学习24:多环境配置
  • Post author:张建
  • Create time:2023-03-21 08:31:38
  • Post link:https://redefine.ohevan.com/2023/03/21/OC/OC学习24:多环境配置/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.