Skip to content

zhuxiaod/MultiEnvironmentLearning

Repository files navigation

笔记-iOS多环境配置

前言

​ 在iOS发开中,经常会遇到多环境的情况,例如网络请求链接就分为开发,测试,正式。经常调试程序也需要用到假数据,在同样的逻辑中,写开发数据,正式数据。等调试完必须将开发用的变量删除掉,如果在多处的调试,往往可能忘记删除开发数据,上线,导致事故。笔者曾经就遇到过这样的情况,由于不想每次开发输入登录账号密码,边将账号密码写死,最后因为忘记注释掉,上线导致问题。还好使用用户不多,没有被追究。但是那个时候笔者就暗下决心,必须使用多环境来管理,不然就会暗藏bug,开发中也会导致不必要的麻烦,提高开发的效率。

​ 需求:由于开发中不需要对不同的系统库,三方库使用多环境管理。使用最多的就是不同环境的常量,代码,项目配置涉及到多环境。根据三个需求设置多环境。

一、利用Build Configuration来配置多环境

​ 根据常见的开发场景,开发,测试和线上三个场景。分别创建对应的Configurations:Debug、Internal和AppStore。集中Internal是Duplicate "Debug" 生成的。这里设置三种场景主要是设置编译、打包的条件。

​ 创建新的Scheme

​ 笔者在这里为了区分不同的scheme,加上了一个后缀,方便在使用的时候能够做到一个区分。

​ 只有将scheme对应不同的Configuration,我们的设置才知道我们对应的环境是什么。

​ 分别将Debug对应Debug,Test对应Internal,Release对应AppStore。

​ 这样我们就能用不同的scheme来区分不同的使用场景了。

二、使用xcconfig设置项目配置

​ 第一部分,已经区分出了三个开发环境,那么我们如何去设置不同的项目配置呢?

​ 以Build Active Architecture Only 为例,因为我们设置了不同的Configuration,我们在这里也让我们在不同的环境有多种不同的选择。

​ 其实到这里已经满足了我们进行不同配置的需求,但是因为这种方式是对于项目的。当我们项目有多个的时候,使用这种方式来配置项目其实是很麻烦的。且容易出错。因为不知道什么时候我们就会错误的去做一个选择,且后面可能忘记配置了什么。

​ 这个时候就需要使用xcconfig来配置了。

​ 在项目中添加xcconfig文件,上图是我管理的方式。

​ 如果使用Pods来管理的话,设置上会对应Pods的配置。针对使用Pods的朋友,在添加scheme后,需要重新pod install,这样pod会创建新的配置。

​ 将我们的配置文件,与对应的Configuration绑定。

​ 这个时候运行会报错。提示重新 pod install。

​ 重新pod install后会有警告。是提示Pods的配置没有被引用。

将pods 配置文件在对应的xcconfig引入。

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

​ 再次pod install 会发现警告没有了。

​ 再次Run,运行正常。

​ 下面来测试一下效果,为了测试在xcconfig中配置参数是否有效。

​ 成功!


​ 切换scheme,App名字被修改,证明配置成功。

​ 这样我们就能给测试包的时候,不在被问是什么环境了!

三、根据多环境运行代码

​ 相信说到Preprocessor Macros 大家一定不会陌生。

​ 多环境中,可以根据设置的宏来改变代码流程。

同样我们使用xcconfig来设置。 通过复制Preprocessor Macros 粘贴到xcconfig。可以拿到Key值,这样我们就能使用文本控制项目的配置了。

​ xcconfig配置完成后,运行项目会发现Preprocessor Macros 的值也发生了改变,再次证明我们使用xcconfig是会影响项目配置的。

​ 这样就满足了我相同的逻辑在多环境,不同的实现。

结尾

​ 网上对于多环境有很多好的帖子,讲的十分详细,笔者这里是综合自己的使用需求写的笔记。如果有朋友要想了解更多可以去网上搜索相关内容。

​ 参考:

手把手教你给一个iOS app配置多个环境变量

About

iOS多环境配置。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors