摘要
在我们实际开发中,后台服务器一般都会有几套地址,如:测试,预生产,生产。这时,我们项目打不同环境包时,如果通过注释代码或修改域名也是可以达到目的。但是这样比较烦锁还容易出错。像我们公司,还有一套性能测试环境,所有的第三方接口处理都需要屏蔽,如果还这样来修改,熟悉代码还好,几分钟可以注释好,但是对于一个不熟悉的同事,那么就会显得举步最艰难了,于是这篇文章讲述下,只通过修改Xcode中scheme的configaration配置项,选择你要的环境,一步切换环境,简单实用且不会出错。
使用场景
针对不对的域名或环境,实现打包或运行的代码不一致。
步骤
-
一、创建一个configuration
如上图,一般我们都是直接Duplicate Debug,因为release模型是不支持断点调试的。
-
二、然后我们就可以在scheme中看到我们新添加的
这里我添加了2个环境,一个Pre为预生产,一个Test为性能测试。分别实现两套不同的环境。
-
三、修改build settings下的Preprocessor Macros下对应的值
注意:经测试,这一步完全可以省略,也是可能实现功能的。 -
四、各个配置下添加自定义标签other swift flags,如下图
这一步才是重点,我们代码中就是通过判断flags来实现。
注意:Debug下,默认是有一个DEBUG标签,代码中尽量不要用,而是用自己自定义的XYJDEBUG,不然选择其它配置也会跑到DEBUG环境下的代码。
测试
-
配置选择,如图,在run模型下,build configuration选择不同的配置,然后运行程序,会执行对应的代码,如果打包,在archive模型下,去选择build configuration即可。
- 测试示例代码
#if XYJDEBUG // 测试环境
let baseUrl = "https://test.baidu.com/"
#elseif Pre // 预生产
let baseUrl = "https://pre.baidu.com/"
#elseif Test // 性能测试
let baseUrl = "https://functionTest.baidu.com/"
#else // 生产
let baseUrl = "https://app.baidu.com/"
#endif
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 测试代码
testPrint()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func testPrint() -> Void {
//打印地址
print("请求的基址为:\(baseUrl)")
#if XYJDEBUG
print("测试环境")
#elseif Pre
print("Pre环境")
#elseif Test
print("Test性能测试环境")
#else // 生产
print("生产环境")
#endif
}
}
cocoapods报错
-
如果项目中使用了cocoapods管理第三方,那么选择你新创建出来的项目build时,会报找不到第三方库错误。解决办法如下:
写在最后
很多功能都可以通过这个实现多套环境(通过修改build settings里的一般都可以),如:appicon,appName,bundleId,info.plist等。