OC高级强化01:多环境配置
多环境配置
- Project : 包含了项目所有的代码、资源文件和所有信息。
- Target : 对指定代码和资源文件的具体构建方式。
- Scheme : 对指定的Target的环境配置
在实际开发中,我们必须要进行网络请求(内网和外网
),而网络请求则就要针对不同的环境(开发
、测试
、生产
)有不同的的主机名称(URL_HOST)
,那么我们如何获取某个环境下的URL_HOST
,那么在这个过程中,我们需要进行配置,而配置的方式有三种:
- Target 配置
- Scheme 配置
- xcconfig 配置
Target 配置
1、新建Dev的Target
选中
Target
下LoginApp
-> 右键选中Duplicate
复制 -> 生成新的LoginApp copy
-> 将其改名为LoginApp-Dev
修改
Bundle Identifier
名为com.srsf.LoginApp-Dev
修改新生成的
LoginApp copy-info
名为LoginApp-Dev-info
,plist名称改变同时需要在Build Settings
->Packaging
->info.list File
下 -> 将LoginApp copy-info
改成LoginApp-Dev-info
。
如下图:
注:到目前为止,你运行 LoginApp
和 LoginApp-Dev
会生成两个 App
。
2、添加自定义宏 macros
- 选中
LoginApp-Dev
->Builds Settings
->all
-> 搜索macros
->Apple Clang - Preprocessing
-> 选中Debug
右键空白双击 -> 弹出添加 DEV=1;同理,Release 设置 DEV=0
- 此时,自定义的宏已经生效了,此时可以在任意地方调用下面的方式进行判断使用
1 | #if DEV |
当你切换不同的Scheme
时,打印不同的URL_HOST
3、总结
Target
配置这种方式,每创建一个 target
都会产生新的 info.plist
,每一个都需要去配置 macros
,配置比较乱,不推荐
使用。
Scheme 配置
1、首先我们要了解到 Scheme
默认是有两种环境变量 Debug
和 Release
,可以在 Edit Scheme
-> Run
-> info
-> Build Configuration
下查看。
2、其次,与之对应的环境配置在 Project
-> LoginApp
-> Configurations
下也可以看到
3、在 Project
-> Configurations
下,我们可以创建一个自己的配置环境 Beta
,现在我们有 了 三
种配置方式,对应的在 Edit Scheme
-> Run
-> info
-> Build Configuration
下也有三种,同时在 Target
-> Build Settings
-> Build Active Architecture Only
下也有对应的三种配置方式,说明这是一个 全局
的配置,如下图:
3、新建 Scheme
- 点击
LoginApp
-> manager Schemes -> 点击 + 号 -> 添加 Debug 和 Beta 两种,加上 LoginApp 本身Release就是三种,对应上面 三种 配置
)
- 点击
Edit Scheme
切换Scheme
,并指定Configurations
,如下图
4、自定义主机名URL_HOST
Target
->Build Settings
-> 点击 + 号 ->Add User-Defined Settings
->URL_HOST
,此时我们发现其对应的配置也是三个,分别设值如下:
5、将 URL_HOST
添加到 info.plist
文件中,Build Settings
中的 配置可以通过 info.plist
暴露出来,可以直接读出来
6、在项目中使用
1 | NSString * path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"]; |
切换 Scheme
,打印如下
1 | Debug:http://137.0.0.2 |
7、同理配置图标的也一样
xcconfig 配置
1、在实际项目中,我们可能会有多个主机名称HOST_URL,因此,我们还是需要去配置多个Configurations,下面还是以三个为准
- 在
Project
->LoginApp
->Configurations
下,我们可以创建一个自己的配置环境Beta
,现在我们有 了三
种配置方式,对应的在Edit Scheme
->Run
->info
->Build Configuration
下也有三种,同时在Target
->Build Settings
->Build Active Architecture Only
下也有对应的三种配置方式,说明这是一个全局
的配置,如下图:
2、在主项目下,创建 Congifg
文件,并在下面创建三个对应环境的 .xxconfig
文件
- 在Config文件夹下 -> command + N -> 搜索config
- 输入对应的名称 -> 点击create
- 创建成功之后,如下图
2、选择对应Target的进行配置
3、在 xxconfig 文件中写入 HOST_URL
- Debug 下
1 | A = / |
- Beta
1 | A = / |
- Release :
1 | A = / |
4、同样,我们需要在 info.plist
文件中暴露,在项目中取出
5、项目中代码取出
1 | NSString * path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"]; |
切换不同的 scheme 的打印结果
1 | Debug:http://127.0.0.1 |
除了上面三种配置实现,其实还有一种实现,就是pch实现
- 到 Target -> Build Settings -> 设值不同的DEBUG值
- 具体是现代吗
1 | #if (DEBUG == 1) |
xxconfig 其他功能
- xxconfig 全名是 xcodeConfig,它不仅仅是一个文件,它的本质是控制
Build Settings
里面的选项(比如配置动态库、静态库等)
1 | // ld 配置到链接器上 |
- 在Debug配置下运行,报错
ld: framework not found AFNetworking
,然后我们找到Other Linker Flags
,可以看到如下
他的原理与
cocoapods
的原理相同想查找
Build Settings
中选项的缩写,这里有一个网站可以去查看 Build Settings 缩写网站
比如搜索一个 header search path
,找到其缩写 HEADER_SEARCH_PATHS
1 | HEADER_SEARCH_PATHS = \user\zjbboy |
你会在 build settings
找到
- Post title:OC高级强化01:多环境配置
- Post author:张建
- Create time:2022-01-04 16:24:40
- Post link:https://redefine.ohevan.com/2022/01/04/OC底层原理/OC高级强化01:多环境配置/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.