前言
在项目研发过程中,都会用到多个环境,一般包括 DEV(开发)、SIT(集成测试)、UAT(用户验收测试)、PPE(预生产)和 PRD(生成)等多个环境。环境不同,对应的服务器URL不同,执行条件不同,以及一些https证书或网络请求证书不同等等问题。有这么多的环境需要管理和配置,怎么样才能更好的管理呢?
有两种方案比较好的可以解决。
1、多个 .xcconfig 文件进行配置。
2、多个 Target 进行设置。
各有优缺点,大家可以根据需求和理解进行更简单,更方便,更有效的使用。
多个 .xcconfig 文件进行配置
每一个项目工程创建默认都是一个 target 并带有 Debug 和 Release 两种配置。在项目中都可以使用预编译, #if DEBUG 来判断当前环境时 Debug 还是 Release 环境。在设备直连 xcode 开发工具调试时, 是 Debug 环境,打包之后是 Release 环境。
多个 .xcconfig 文件是不需要创建多个 target 的。那么就需要在 target 中,创建不同环境的 Debug 和 Release。
创建多个环境的 Debug 和 Release
1、选择项目的 PROJECT -> info -> configurations
当然也可以不使用 Debug 和 Release 命名, 可以使用自定义命名
2、设置多个 scheme 对应环境
- 找到 scheme 入口 ,并选择 manage schemes
- 删除默认的 scheme ,并创建新的 scheme, 命名对应环境
删除默认的 scheme
创建新的 scheme
- 修改 scheme 配置
第一步找到要修改的入口
第二步修改对应的 debug 和 release
- 修改 scheme 配置 debug
- 修改 scheme 配置 release
3、创建 .xcconfig 文件
- 创建 .xcconfig 文件
- 对应环境命名
因为在 .xcconfig 文件中, // 表示注释,所以不能直接使用 https://help... 只能识别到 https: 也就是 // 前面的内容
在相应的配置文件中添加您的服务器URL和其他自定义键值。
4、设置多语言环境的 info.plist 文件
复制 info.plist 文件,创建多环境对应的 info.plist 文件。可以在文件中,复制,改名,添加到项目中
5、设置 info.plist 文件对应 .xcconfig 文件内的 key
设置 多个环境的 info.plist 文件对应 .xcconfig 文件内的 key
6、设置不同环境的 info.plist 文件对应关系
7、设置不同环境链接不同 xcconfig 文件
8、使用用例
先选择 scheme 环境 例如 UAT
多个 Target 进行设置
1、创建多个target
修改环境 target 名称
创建多个环境 target,右键点击 target ,选择 duplicate, 修改名称
创建多个 target 时,会同时生成对应的 info.plist , 我们可以修改info.plist 文件名称,也可以不修改,因为info.plist 文件的包含在不同的 target 之中。为了方便查找,我们修改一下名称
当设置了不同 target 包含文件时,切换 target 就不会打包有另外环境的配置
2、在多个 target 的 build setting 中,设置对应的 info.plist 文件
其他环境一样设置
3、设置不同环境的常量配置对应环境的 target
创建常用的常量和服务器URL 的配置,根据环境创建多个文件添加到不同的 target 之中,使用 target 进行管理,不会有重名的冲突,而且配置也是隔离的,减少耦合,减少修改配置影响其他的环境问题。并且打包时,只有当前环境的文件。
4、设置 target 对应的 scheme
这次设置 scheme 要选择对应的 target
5、使用示例
首先选择环境 scheme ,然后使用并进行打印
关于 .xcconfig 文件配置和多 Target 配置的优缺点
共同点
- 都可以解决多环境配置,减少配置的耦合,可以快速的切换环境,避免了切换环境引起的问题
.xcconfig 配置
优点:
- 只有一个 target,除了xcconfig 相关配置,其他只需要设置一遍 build setting 即可。
- 配置文件也不需要选择 target
缺点:
- build setting 是公用的,有可能会影响到其他环境,或容易改动到其他环境。例如开发证书等等。
- .xcconfig 的配置,编译时不会报错,设置时要注意
- 打包的时候,所有的文件和环境的配置都会打包进来。如何不想要其他环境的配置,可能需要手动删除或脚本删除。
- 打包时,需要注意 scheme 的环境。
多 Target 配置
优点:
- 有多个 target , build setting 是相互独立的,不会相互影响。
- 打包时,只会打包 target 包含的文件,其他环境的文件和资源不会打包进来。
缺点:
- build setting 是相互独立的,有些一样的配置,需要每个都设置一遍,容易忘记其他环境进行同步设置。
- 添加文件需要注意选择 target ,是通用都勾选还是选择某个环境。
- 打包时,需要注意 scheme 的环境。
总结
总体来说,多个 target 的环境隔离更彻底一下,因为文件包含是指定 target 的,除了公用的文件,其他都是隔离的,基本上可以看作不同的项目,只是代码放在了一起。
如果不想要有环境之间有耦合的配置或耦合的文件,那么建议使用多 target ,这个比较放心,无论修改 target 配置或还是修改文件,只要包含关系没有问题,那就没有问题,完全不用担心被其他环境改动到了。
需要注意一点,不同环境的相同的配置,需要及时的同步,以防遗漏