多环境配置
首先我们了解下下面三个概念
Project: 包含了项目所有的代码,资源文件,所有信息Target: 对指定代码和资源文件的具体构建方式Scheme: 对指定target的环境配置 在我们实际开发的过程中,我们一个project可能需要生成多个target,在不同的配置下, 那么接下来就是怎么配置多环境
三种配置多环境的方法
多个target的方式
具体流程如下
当我们
copy一个target之后,这个copy的target会保持跟被copy的target同样的配置. 改变LoginApp copy为LoginApp-Dev,为了保持一致,我们需要对工程如下地方需要做修正
那么我们为了区分这两套环境的不同,我们就需要预先定义宏, 可以看到在
Debug环境下,已经预先定义了DEBUG这个宏,我们也可以在里面加入自定义的宏
如下是
swift添加宏的方式
在
swiftc编译器中,需要添加一个-D的option, 查看swiftc的help,-D代表将条件编译标志标记为true.
在代码里面就可以通过新加的宏来做控制了。
上述方法总体来说是比较繁琐的,会生成多个plist文件,并且配置比较多
scheme 配置
通过上述方式我们添加一个
configuration, 当我们edit scheme的时候,会发现我们多了一种configuration
可以在run的时候改动
configuration来配置环境,也可以通过创建新的scheme
之后,我们再将这个新创建的
scheme的configuration设置为DEV
通过上述两个步骤之后,我们就添加了
user-defined value HOST_URL, 并且存放在plist中,后面就可以通过代码load plist文件,获取到HOST_URL的值
上面这个方式,就很容易来配置多环境,不会新产生target, 相较于第一种方法,这种方法相对简单一些, 但同时我还是会通过build setting来配置一些环境变量
xconfig file 配置
我们可以通过xconfig文件来配置环境
新建一个文件夹,
new file -> configuration file, 命名规则是以当前文件夹的名字为开头,后面跟app名字,再跟环境,如下图所示
这个
xconfig文件就是存放了一些key value, 我们创建了两个xconfig文件, 然后将选择为对应的configuration下的config file, 其中上面是对project的配置,下面是对target的配置
然后将在config文件中输入一下内容
同时也要配置下plist 文件
最终我们可以通过代码取出
plist中的HOST_URL, 值就等于xconfig中定一个值
xconfig的本质就是控制build setting的选项,比如OTHER_LDFLAGS其实都是build setting 中的other link flags的缩写, 详见网站
我们在xconfig中自定义变量有可能会碰到如下情况, 比如一个url的//会被认为是注释,我们可以先定义一个变量A = /, 如下图所示
我们可以通过${A}或者$(A)去获取变量,这两种方式是等价的.
如果我们在配置任何的build setting选项,想让这个选项在某些环境下生效,我们可以采取如下代码形式来配置
OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*][arch=x86_64] = -framework "frameworkName"
上述代码的意思是只有在config为Debug,SDK是模拟器的时候,且执行架构是x86_64的情况下才会link这个frameworkName framework.