iOS配置多环境的三种方案

5,659 阅读4分钟

前言

谈到多环境,相信现在大多公司都至少有2-3个app环境了,比如Test环境、UAT用户验收测试环境,Release环境等等。当需要开发打多个包的时候,一般常见做法就是直接代码里面修改环境变量,改完之后Archive一下就打包了。当然这种做法很正确,但是这种做法比较浪费时间。如果配合着搭建了Jenkins环境(Mac如何下载安装jerkins),使用Jenkins自动打包就很好了,Jenkins自动打包的方案可参考。下面就来谈谈多环境配置的三种方案:

一、利用Targets来配置多环境

  • 创建一个target

截屏2021-11-01 下午3.23.00.png

  • 创建完成后,会发现多一个plist文件,这个plist便是对应新创立的target,然后修改对应target和plist文件的名称。

截屏2021-11-01 下午3.24.28.png

截屏2021-11-01 下午3.25.52.png

  • 创建对应这个target的AppIcon,对应的Tragets选择对应的AppIcon,再到buildsetting里边将icon从头设置一下,这样两个target就展现不同的icon了

截屏2021-11-01 下午3.26.51.png

截屏2021-11-01 下午3.27.16.png

  • 设置在不同target下的宏定义,然后在代码中读取宏的值就知道对应是哪个环境了。注意在swift环境下,需要在变量前面加-D才能生效。

截屏2021-11-01 下午3.30.38.png

截屏2021-11-01 下午3.33.30.png

截屏2021-11-01 下午6.06.15.png

截屏2021-11-01 下午3.36.35.png

二、利用Scheme来配置多环境

首要咱们先了解一下三个名词的意义:

  • project:包含了项目所有的代码、资源文件、信息
  • target:指定代码和资源文件的详细构建方法
  • scheme:指定target的环境装备

第一步、增加Config

目前Traget下面只有debug和release两种,如果能够增加多个Config,就不用采用多个target实现了,下面来增加Config

截屏2021-11-01 下午3.55.01.png

截屏2021-11-01 下午3.55.17.png

增加了一个DebugDev的Config,然后在Edit scheme可以看到能够看到build Configuration变成了三种选择

截屏2021-11-01 下午3.55.45.png

target下涉及到的配置都变成了三种

截屏2021-11-01 下午3.56.17.png

第二步、增加scheme

像上面的方法,每次都要去修改scheme对应的环境也是比较麻烦的,可以通过增加scheme来实现多环境,需要什么环境直接切换到对应scheme就可以了

截屏2021-11-01 下午3.57.50.png

在user-Defined中增加需求的变量

选择Buidle Settiongs,然后点击上面的+号,增加一个自定义的User-Defined,比如增加了一个变量CustomProductName,对应各种环境设置不同的值

截屏2021-11-01 下午3.58.47.png

截屏2021-11-01 下午4.22.37.png

在项目中是可以读取info.plist里面的信息,在plist里面增加对应的key-value,这个key可以读取你自定义的参数,读取的就是这个scheme下对应的CustomProductName

截屏2021-11-01 下午4.22.47.png

也可以在配置各环境的AppIcon,同理app名称、bundle identifier也都是可以配置的

截屏2021-11-01 下午4.27.51.png

三、利用xcconfig文件配置实现多环境

新建config文件

截屏2021-11-01 下午5.02.19.png

将config文件配置到对应的configuration中

截屏2021-11-01 下午5.14.33.png

在config文件创建使用的变量

截屏2021-11-01 下午6.20.59.png

在info.plsit文件增加key-value,通过key读取URLStr的值

截屏2021-11-01 下午6.14.53.png

截屏2021-11-01 下午5.37.13.png

这样又比创建多个scheme方便一些,能够将多config协作多个scheme一同运用。

这个文件可以配置很多内容,包含像buildSetting里面的一些配置,比如Other Linker Flags,相当于在config中配置 OTHER_LDFLAGS

截屏2021-11-02 下午3.11.51.png

会发现在debug里边配置上了framework AFNetworking

截屏2021-11-01 下午5.20.20.png

其实OTHER_LDFLAGS便是配置到链接器里边,本质上Config文件是key-value方法进行配置的。其他能够配置的参数请参照xcodebuildsettings。其实我们在自定义的config配置的可能会和其他config里面存在冲突,直接pod install时会发现cocoapods有两个警告:项目已经配置了config,pods-config可能不生效

截屏2021-11-01 下午5.23.07.png

当在自定义config里面引入pods的debug和release的config文件后,这个警告就会消除了。但是只是这样只会将原有的配置引用过来,如果重写就会覆盖了,所以我们需要Xcode 内置的$(inherited)字段来继承。

截屏2021-11-01 下午5.37.37.png

这样同样实现了多环境的配置。具体可以根据自己的需求选择适合自己的配置方案。 多环境的配置方案,再配合着自动化打包就完美了,自动化打包可以参考这篇文章:juejin.cn/post/702801… 如果Mac想配置Jenkins,新版本的Jenkins在安装完 eychains and provisioning profiles Management插件后,上传login.keychain,点击upload一直都没有反应。需要下载旧版本的Jenkins,可以参考这个安装

至此完成了一整套的构建流程