## 多环境配置 多环境配置的3种方式: - 多 target 配置 - Scheme 多 target 进行环境配置 - xconfig 文件配置 QA:Target、Scheme 的关系是什么? - Project:包含了项目所有的代码、资源文件,所有信息 - Scheme:对于指定 Target 的环境配置 - Target:对于指定代码和资源文件的具体构建方式 ## 多环境配置的不同方式 ### 多 Target 的方式 针对需要多配置的项目,在 Xcode 中,对其进行复制,存在多个 Target。搭配不同的宏定义,来实现控制逻辑的效果。 注意:duplicate 之后,target 虽然多了一份,但是代码和资源不变,所以 - OC:Build Settings -> Preprocessor Macros 里面的 Debug/Release 模式下添加自定义宏。比如在 debug 模式下 `IsOCDebug = 1` - Swift:Build Settings -> Other Swift Flags 里的 Debug/Release 模式下添加自宏定义。注意命名有格式要求:`-D + 宏名称` ​ 当对某个 Target “Duplicate” 之后,会产生一份新的 plist 文件 思考:该方式还是存在的问题:多个 info.plist、配置比较乱 ### 多 Scheme 的方式 针对一个 Target 可以添加多个 Scheme,步骤如下 这样的创建好之后,该 Target 存在3个 Scheme 了。有了 Scheme 有什么作用呢?设置宏定义的时候可以针对不同的 Scheme 进行设置。 针对 OC、Swift 分别设置了很多宏定义,接下去需要跑 Beta 配置的代码,怎么办? 点击 Edit Scheme,在 Run 里面选择对应的 Scheme。 但这样好像蛮烦的,每次运行不同配置的代码,都需要手动切换 Scheme。有没有什么办法解决切换问题呢。 创建实体 Scheme 创建 Scheme 步骤:Xcode -> New Scheme,再弹出的方框内,选择对应的 Target,然后输入需要创建的 Scheme 名称。此次我们创建了:Debug、Beta 2个新的 Scheme。 创建好之后,可以看到实体 Scheme 和虚拟 Scheme 存在多对多的关系。但我们可以基于此,选择实体的 Scheme,然后在 Run 里面 “Build Configuration” 里面选择对应的 Scheme 与之对应。 创建之后就可以根据 Scheme 设置值,在 `Build Settings -> User-Defined` 下添加自定义的字段,同时可以根据 Scheme 设置不同的值。 设置后的值怎么使用?将自定义的变量用 plist 存储。之后读取再使用。 完整如下图: 切换不同的 Scheme,可以运行不同的效果,当前 case 下,选择 Debug Scheme,输出不同结果 `HOST_URL: http://www.debug.baidu.com` 思考:目前的方案已经优雅不少,但是还是存在,自定义宏的时候需要选择不同的 Scheme,过程繁琐。 ### Xcconfig Xcode 自带的 Configuration Settings File 可以支持自定义一些宏,还可以修改 Build Settings 里面的选项。 创建步骤如下: 文件命名为:`文件夹名称-项目名称.scheme名称.xcconfig`,比如 `Config-Xcconfig.debug.xcconfig` 几个 Scheme 就创建几个对应的 Xcconfig 文件。 修改和完善创建的 Xcconfig 配置文件里的内容。之后在 Xcode 的 Project 选项下,找到 Configurations,选择对应的 Scheme,然后选择右边对应的 Xcconfig 文件。如下图 我们只在 `Config-Xcconfig.debug.xcconfig` 文件中添加了 `OTHER_LDFLAGS = -framework "AFNetworking"`,Xcode 切换到 debug scheme 下,然后 Command + B 编译。 验证结果: - 编译前切换到 Build Settings 后,查看 ”Other Linker Flags“ 的 Debug 项为空 - 编译后切换到 Build Settings 后,查看 ”Other Linker Flags“ 的 Debug 项为 `-framework ”AFNetworking“` 因为 Xcconfig 文件,具有操作和修改 Build Settings 的能力,所以用好 Xcconfig 文件,不只可以实现替代宏定义和切换繁琐的问题,还可以实现很多其他手动修改 Build Settings 的问题。 说明:在 Xcode Build Settings 手动配置的信息,和通过 Xcconfig 方式编写的信息,不会冲突。 对于 xcconfig 文件,我们其实并不陌生、因为在使用 Cocoapods 的时候就已经在使用这个文件了,只是很多人不知道其中变量的含义。