iOS多环境配置

531 阅读3分钟

关于多环境:

  • Project:包含了项目所有信息——所有代码、资源文件(workSpace就是包含多个Project)
  • Target:对指定代码和资源文件的具体构建方式
  • Scheme:对指定 target 的环境配置 qhb_01_project_target_scheme.png

一:多target

Target 是具体做事的;而 Scheme 就是指定 Target 具体怎么做(执行哪份配置)

1. Duplicate 一个 Target

qhb_01_create_target.png

Duplicate 完成之后会发现多了一个 plist 文件,这个 plist 与 新的target 是对应的。 qhb_01_create_target_copy.png

2. 修改 target 名

qhb_01_create_target_modify_name_done.png

3. 修改对应target下配置

3.1 - 修改对应 target 下的 AppIcon(targets - build settings - search "appicon")

原 target: qhb_01_yyjapp01_appicon.png

Dev target: qhb_01_yyjapp01dev_appicon.png

3.2 - 在对应 target 下配置宏,在代码中根据宏来区分 target

原 target 下宏配置: qhb_01_add_macros.png

Dev target 下宏配置: qhb_01_add_macros_dev.png

代码中根据宏来区分Target:

  • 原 target: qhb_01_macros_log.png
  • Dev target qhb_01_macros_dev_log.png

多 Target 配置多环境虽然能够满足我们的需求,但是会生成多个Info.plist文件,而修改配置需要频繁操作每个Info.plist文件(有点儿麻烦,好在还有别的方案)

二:多 scheme

多Target类似,都是通过自定义参数类达到目的。

1. 添加 Configuration

qhb_01_create_config.png

我们添加了一个名为 Beta 的 configuration,然后到 Edit Schemems 里面,可以看到 Build Configuration 变成了三个: qhb_01_three_config.png

Target 下所有涉及到配置的地方也都变成了三个: qhb_01_target_three_config.png

2. 添加 Scheme

qhb_01_create_scheme_01.png

qhb_01_create_scheme_02.png

我这里添加了两个 scheme qhb_01_create_scheme_03.png

3. 给 scheme 设置对应的 configuration

在 Edit Schemes 里,给scheme设置configuration;如下图: qhb_01_modify_scheme_configuration.png

4. 自定义配置变量

添加自定义变量;如下图: qhb_01_add_user_defind_01.png

这里我们添加了环境变量: BASE_URL,并对三种环境下分别设置了值: qhb_01_add_user_defined_02.png

5. 通过Info.plist将自定义的配置变量暴露

因为在代码中无法直接拿到配置的变量,但是可以通过在Info.plist中配置,从而获取到。

自定义变量在Info.plist中的配置: qhb_01_base_url_config_infoplist.png

通过Info.plist读取变量值: qhb_01_base_url_beta.png qhb_01_base_url_output_dev.png

  • 这样就可以通过切换Scheme来完成多环境配置,但是自定义配置还是有点复杂

三:多 Xcconfig (Xcode Config)

1. 创建.xcconfig 文件

qhb_01_create_xcconfig_01.png

命名一般为:项目名 + 环境名(可参考集成Cocoapods时的 .xcconfig 文件) qhb_01_create_xcconfig_02.png

2. 给Configuration设置 .xcconfig 文件

qhb_01_cocoapods_xcconfig_use.png

这里我们看到Project也可以选择配置文件,因为在Project的BuildSetting里面也有相应环境的配置,也可以通过.xcconfig文件进行配置,下面红圈的是代表每个target的配置

3. 在 .xcconfig 文件中定义变量

这里还以BASE_URL为例;(注意:多Target 中已在 Info.plist 里添加 BASE_URL)

3.1 在.xcconfig 文件中定义变量 BASE_URL: qhb_01_xcconfig_bata.png

qhb_01_xcconfig_dev.png

3.2 在代码中读取: qhb_01_xcconfig_nslog_beta.png qhb_01_xcconfig_nslog_dev.png

四:Xcconfig (Xcode Config) 冲突

1. Pods-config冲突

当我们在多环境下进行podfile配置后,终端会报出警告,且项目无法运行 qhb_01_xcconfig_conflict.png 从字面意思看就是 “因为你的项目配置了自定义的xcconfig,所以 Pods-config 没有生效”———为了解决这个警告、让项目能够运行,需要在自定义的xcconfig 文件中引用Pods-config

按照提示来操作(在每个自定义的xcconfig中引入对应的pods-config): qhb_01_xcconfig_remove_conflict.png 如此这般,警告就没有了。。。

2. 继承xcconfig

只是像上面那样引用还不够,因为引用只是将原有的配置引用过来,如果在自定义的xcconfig文件中重写的话,就会覆盖原来的

原来的: qhb_01_other_link_flags_01.png 重写后: qhb_01_other_link_flags_02.png

解决覆盖问题,使用Xcode内置的 $(inherited) 字段类继承(Pods-config也是如此操作的) qhb_01_other_link_flags_03.png

  • 引用继承 之后,任然可以在 Build Settings 手动添加引用,这是不冲突的