mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-24 20:00:37 +00:00
142 lines
5.8 KiB
Markdown
142 lines
5.8 KiB
Markdown
|
||
|
||
## 多环境配置
|
||
多环境配置的3种方式:
|
||
- 多 target 配置
|
||
- Scheme 多 target 进行环境配置
|
||
- xconfig 文件配置
|
||
|
||
QA:Target、Scheme 的关系是什么?
|
||
- Project:包含了项目所有的代码、资源文件,所有信息
|
||
- Scheme:对于指定 Target 的环境配置
|
||
- Target:对于指定代码和资源文件的具体构建方式
|
||
|
||
|
||
|
||
## 多环境配置的不同方式
|
||
|
||
### 多 Target 的方式
|
||
|
||
针对需要多配置的项目,在 Xcode 中,对其进行复制,存在多个 Target。搭配不同的宏定义,来实现控制逻辑的效果。
|
||
|
||
注意:duplicate 之后,target 虽然多了一份,但是代码和资源不变,所以
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/MultipleTargetProjectConfig.png" style="zoom:30%" />
|
||
|
||
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeMacroSupportedWithOCAndSwift.png" style="zoom:30%" />
|
||
|
||
|
||
|
||
- OC:Build Settings -> Preprocessor Macros 里面的 Debug/Release 模式下添加自定义宏。比如在 debug 模式下 `IsOCDebug = 1`
|
||
- Swift:Build Settings -> Other Swift Flags 里的 Debug/Release 模式下添加自宏定义。注意命名有格式要求:`-D + 宏名称`
|
||
|
||
|
||
|
||
|
||
|
||
当对某个 Target “Duplicate” 之后,会产生一份新的 plist 文件
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/MultiplePListAfterDuplicateTarget.png" style="zoom:30%" />
|
||
|
||
|
||
|
||
|
||
|
||
思考:该方式还是存在的问题:多个 info.plist、配置比较乱
|
||
|
||
|
||
|
||
### 多 Scheme 的方式
|
||
|
||
针对一个 Target 可以添加多个 Scheme,步骤如下
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeAddScheme.png" style="zoom:30%" />
|
||
|
||
|
||
|
||
这样的创建好之后,该 Target 存在3个 Scheme 了。有了 Scheme 有什么作用呢?设置宏定义的时候可以针对不同的 Scheme 进行设置。
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/AddMacroForDifferentScheme.png" style="zoom:30%" />
|
||
|
||
|
||
|
||
针对 OC、Swift 分别设置了很多宏定义,接下去需要跑 Beta 配置的代码,怎么办?
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeSwitchSchemeManually.png" style="zoom:30%" />
|
||
|
||
点击 Edit Scheme,在 Run 里面选择对应的 Scheme。
|
||
|
||
但这样好像蛮烦的,每次运行不同配置的代码,都需要手动切换 Scheme。有没有什么办法解决切换问题呢。
|
||
|
||
|
||
|
||
创建实体 Scheme
|
||
|
||
创建 Scheme 步骤:Xcode -> New Scheme,再弹出的方框内,选择对应的 Target,然后输入需要创建的 Scheme 名称。此次我们创建了:Debug、Beta 2个新的 Scheme。
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeCreateScheme.png" style="zoom:40%" />
|
||
|
||
|
||
|
||
创建好之后,可以看到实体 Scheme 和虚拟 Scheme 存在多对多的关系。但我们可以基于此,选择实体的 Scheme,然后在 Run 里面 “Build Configuration” 里面选择对应的 Scheme 与之对应。
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeSchemeMatchWithConfigScheme.png" style="zoom:40%" />
|
||
|
||
|
||
|
||
创建之后就可以根据 Scheme 设置值,在 `Build Settings -> User-Defined` 下添加自定义的字段,同时可以根据 Scheme 设置不同的值。
|
||
|
||
设置后的值怎么使用?将自定义的变量用 plist 存储。之后读取再使用。
|
||
|
||
完整如下图:
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/SetValueUseDifferentSchemeAndUseViaPlist.png" style="zoom:40%" />
|
||
|
||
|
||
|
||
切换不同的 Scheme,可以运行不同的效果,当前 case 下,选择 Debug Scheme,输出不同结果 `HOST_URL: http://www.debug.baidu.com`
|
||
|
||
|
||
|
||
思考:目前的方案已经优雅不少,但是还是存在,自定义宏的时候需要选择不同的 Scheme,过程繁琐。
|
||
|
||
|
||
|
||
### Xcconfig
|
||
|
||
Xcode 自带的 Configuration Settings File 可以支持自定义一些宏,还可以修改 Build Settings 里面的选项。
|
||
|
||
创建步骤如下:
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeCreateXCConfig.png" style="zoom:30%" />
|
||
|
||
文件命名为:`文件夹名称-项目名称.scheme名称.xcconfig`,比如 `Config-Xcconfig.debug.xcconfig`
|
||
|
||
几个 Scheme 就创建几个对应的 Xcconfig 文件。
|
||
|
||
|
||
|
||
修改和完善创建的 Xcconfig 配置文件里的内容。之后在 Xcode 的 Project 选项下,找到 Configurations,选择对应的 Scheme,然后选择右边对应的 Xcconfig 文件。如下图
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeSpecifySchemeWithConfig.png" style="zoom:30%" />
|
||
|
||
|
||
|
||
我们只在 `Config-Xcconfig.debug.xcconfig` 文件中添加了 `OTHER_LDFLAGS = -framework "AFNetworking"`,Xcode 切换到 debug scheme 下,然后 Command + B 编译。
|
||
|
||
<img src="https://raw.githubusercontent.com/FantasticLBP/knowledge-kit/master/assets/XcodeDebugXcconfigSpecifyLDLinkFlags.png" style="zoom:30%" />
|
||
|
||
验证结果:
|
||
|
||
- 编译前切换到 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 的时候就已经在使用这个文件了,只是很多人不知道其中变量的含义。 |