这次实践的目的:
1.通过xconfig给不同scheme配置不同的base_URL
2.通过xconfig给不同scheme配置 build Setting设置
开始:
1.先新建一个工程
2.使用cocoaPods随便管理个第三方库
3.新增scheme,Debug、Beta 两个
4.打开scheme,选择Debug ->build Config->选择Debug,Beta 同理,XconfigDemo ->对应Release
这时候就可以看到build Setting 里面 多了一个beta了
beta的所有设置 暂时都跟Debug一样
5.
6.这时候 从新pod install 一下,Pods里面就多了一个beta的配置了,先编译一下 看看有没有问题
7.刚刚我们生成了3个环境的xconfig配置文件,但是还没有生效。
8.然后到这里去 指定对应的配置文件, 应该是配置的Pods的xconfig
9.当你修改后 就有个问题 pods的xconfig怎么办?
所以 我们需要在我们的xconfig文件里面引入 pods的xconfig,只需要指定文件路径就好
#include "Pods/Target Support Files/Pods-XconfigDemo/Pods-XconfigDemo.debug.xcconfig"
就是说 先获取到 Pods的xconfig文件的路径
10.然后将那个文件 直接拖到 我们的xconfig里面 就可以看到完整路径
我们只需要 项目名 后面的 那部分就好了,引入后 再定义一个 host地址
最下面那个路径 只是为了方便我们看的 用完了 就删了
11.定义一个 host地址,像我这样,beta 和 release同理
12.最好先按我这样写个IP,等会儿讲原因,弄好了后 切换scheme 跑一下 看看能不能 跑起来
13.这三个scheme都切换跑一下 看看行不行
14.这里顺便说一下 xconfig的原理,它其实 就是一种 key-Value的取,定义一个键 设置一个值,最后就按这个键进行取值,
既然xconfig 是通过键取值 那么 我们就需要通过一个 取值的办法 得到 我们定义的host,
到info.plist里面 添加一个host的键值对,
HOSR_URL 是项目取值用的键,
${Host_URL} 是在取xconfig里面的值
15.定义好了 到项目里 找个地方取值,然后跑一下项目 看看打印
NSString * path = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary * infoDic = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"Host:%@",infoDic[@"HOST_URL"]);
16,分别切换一下 scheme 看看打印啥模样?是对应刚才自定的host_ur
结束:
多环境配置不就实现了啊,然后我们看之前我说的 我们实践的目的
这次实践的目的:
1.通过xconfig给不同scheme配置不同的base_URL
2.通过xconfig给不同scheme配置 build Setting设置
惊喜:
第二个 build Setting里面 任意设置 都可以在xconfig里面 根据不同的scheme进行 键值对的设置,当然没这么简单
https://xcodebuildsettings.com/,这个地址是查 对应设置的 key的,
比如我们要设置 Header Search Path,在刚刚那个地址去搜索
HEADER_SEARCH_PATHS,得到key是这个,build Setting里面的 你以后需要了慢慢玩
问题+坑:
第一 :假设我们的xconfig里面定义了一个key,Pods的xconfig也定义了怎么办?
我们看看Pods里面 这个关键字,就是 继承的意思,继承别人的定义
第二: 我们release环境 一般不会是个IP吧 你试试用个正式点的地址看看
比如: https://www.baidu.com,你注意看你定义的位置,//后面的变色了,//表示注释
结果:Host_URL = https:/$()/www.baidu.com,特殊定义符,记得转义一下哦
结尾:
还是验证一下配置是 build setting,我在Debug.xcconfig里面 配置了 Header Search Path
以后build Setting 里面有任何配置 只需要在xcconfig里面配置就行了 这样 到底配置了些啥 一目了然