3.1.2 xcconfig文件的关联
创建好了配置文件,接下来就是将其和项目环境关联起来
点击工程 -> Project -> Info -> Configuration
1.png
3.1.3 xcconfig文件的编辑以及代码中对其内容的使用
这里还是以不同运行环境下服务器地址不同为例:
- DEBUG环境对应的Config.xcconfig文件内容如下:
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) Base_Url='$(Base_Url)'
Base_Url = @"我是测试版本地址"
- PreRelease环境对应的Config2.xcconfig文件内容如下:
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) Base_Url='$(Base_Url)'
Base_Url = @"我是预测试版本地址"
- 两个配置文件我都定义了一个Base_Url. 第一行 GCC_PREPROCESSOR_DEFINITIONS 是固定写法,其作用是将文件里面定义的字段变成预编译的宏,这样我们在代码中就可以直接访问配置文件里面字段对应的值.
- 代码中使用如下:
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"%@", Base_Url);
}
- 直接访问即可,编译器会根据当前的运行环境获取到其对应的值.妈妈再也不担心我们需要写环境判断的代码了.所以这里不同的运行环境,log打印出的base_url的值是不一样的.
3.2 如果你是swift项目
前面的所有步骤同OC项目无异.也最后一步有差异.
2.png
- 同上.新建了2个配置文件并关联对应的运行环境后,内容分别如下:
// DebugConfig.xcconfig
Base_url = 我是测试地址
// PreReleaseConfig.xcconfig
Base_url = 我是预发布地址
- 你会发现我并没有添加 GCC_PREPROCESSOR_DEFINITIONS, 因为swift是不支持宏编译的.所以加了也不会有效果.也就是说我们在xcconfig中添加的字段,并不能通过代码直接获取.
- 这里我采取的是借用了系统Info.plist来访问的,如果你有更好的方法,还请不吝赐教.
-
我在plist里面添加了一个类型为Dictionary的Config字段,如下图:
3.png -
然后将配置文件中的字段迁移到Config中: 格式为 key = 字段名, value = ${字段名}, 如下图:
4.png - 最后我们就能够通过代码来读取config中的内容了,代码如下:
if let info = Bundle.main.infoDictionary, let config = info["Config"] as? Dictionary<String, Any>
{
let base_url = config["Base_url"]
print("\(base_url!)")
}
- 这样就能过根据不同的运行环境获取到不同的base_url.同OC项目效果一样,不需要再添加手动判断的代码了.当然实际项目中读取config的这一部分逻辑可以封装一下,方便在项目中使用和查看.这里不做示范.
至此,文章over !!
网友评论