多环境配置

512 阅读3分钟

多环境配置

首先我们了解下下面三个概念

  1. Project: 包含了项目所有的代码,资源文件,所有信息
  2. Target: 对指定代码和资源文件的具体构建方式
  3. Scheme: 对指定target的环境配置 在我们实际开发的过程中,我们一个project可能需要生成多个target,在不同的配置下, 那么接下来就是怎么配置多环境

三种配置多环境的方法

多个target的方式

具体流程如下 image.png image.png 当我们copy一个target之后,这个copytarget会保持跟被copytarget同样的配置. 改变LoginApp copyLoginApp-Dev,为了保持一致,我们需要对工程如下地方需要做修正 image.png 那么我们为了区分这两套环境的不同,我们就需要预先定义宏, 可以看到在Debug环境下,已经预先定义了DEBUG这个宏,我们也可以在里面加入自定义的宏 image.png 如下是swift添加宏的方式 image.pngswiftc编译器中,需要添加一个-D的option, 查看swiftchelp-D代表将条件编译标志标记为true. image.png 在代码里面就可以通过新加的宏来做控制了。 上述方法总体来说是比较繁琐的,会生成多个plist文件,并且配置比较多

scheme 配置

image.png 通过上述方式我们添加一个configuration, 当我们edit scheme的时候,会发现我们多了一种configuration image.png 可以在run的时候改动configuration来配置环境,也可以通过创建新的scheme image.png 之后,我们再将这个新创建的schemeconfiguration设置为DEV image.png image.png 通过上述两个步骤之后,我们就添加了user-defined value HOST_URL, 并且存放在plist中,后面就可以通过代码load plist文件,获取到HOST_URL的值

上面这个方式,就很容易来配置多环境,不会新产生target, 相较于第一种方法,这种方法相对简单一些, 但同时我还是会通过build setting来配置一些环境变量

xconfig file 配置

我们可以通过xconfig文件来配置环境 image.png 新建一个文件夹,new file -> configuration file, 命名规则是以当前文件夹的名字为开头,后面跟app名字,再跟环境,如下图所示 image.png 这个xconfig文件就是存放了一些key value, 我们创建了两个xconfig文件, 然后将选择为对应的configuration下的config file, 其中上面是对project的配置,下面是对target的配置 image.png 然后将在config文件中输入一下内容 image.png 同时也要配置下plist 文件 image.png 最终我们可以通过代码取出plist中的HOST_URL, 值就等于xconfig中定一个值

xconfig的本质就是控制build setting的选项,比如OTHER_LDFLAGS其实都是build setting 中的other link flags的缩写, 详见网站

我们在xconfig中自定义变量有可能会碰到如下情况, 比如一个url的//会被认为是注释,我们可以先定义一个变量A = /, 如下图所示 image.png

我们可以通过${A}或者$(A)去获取变量,这两种方式是等价的.

如果我们在配置任何的build setting选项,想让这个选项在某些环境下生效,我们可以采取如下代码形式来配置

OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*][arch=x86_64] = -framework "frameworkName"

上述代码的意思是只有在configDebugSDK是模拟器的时候,且执行架构是x86_64的情况下才会link这个frameworkName framework.