前言
在代码中,我们可以通过#ifdef DEBUG
宏定义来针对不同环境做不同设置,但是对于 info.plist 中的属性,我们又该如何针对不同环境(DEBUG vs RELEASE)做不同配置呢?
前两天,在适配 HTTPS 时,由于我们的测试环境服务器没有启用 HTTPS,只有正式环境的服务器启用了 HTTPS ,所以在项目中需要针对不同环境做不同的 ATS 配置处理。这个配置也涉及到 info.plist 中 ATS 相关属性的修改,这也就引出了 info.plist 是否可以动态配置的问题了。
一开始,我想 info.plist 本质上是一个 XML 文件,那么 XML文件中可不可以通过 #ifdef DEBUG
宏定义来动态配置呢?然后我就尝试了一下这种做法,结果编译不通过。实践证明此方法不可行。
然后,我又想 build setting 中不是可以分别设置 debug 和 release 模式下的一些参数么,于是到 build setting 中搜索了一下 info.plist,没想到还真有这个模块,release 和 debug 模式的默认值都是 info.plist。
接下来,我自己也复制了一个 info.plist,并改名 infoDebug.plist,然后修改了一些针对 debug 模式的参数,最后回到 build setting 中,将对应的选项值改为 infoDebug.plist,Command+B 编译一下之后,大功告成!
除此之外,如果我们如果需要动态配置开发或者生产网络环境, 以及在多项目和运行中切换环境,可以借助 Xcode 配置文件 xcconfig 来实现。
参考资料:
1.Xcconfig变量设置说明: http://www.jianshu.com/p/44c82630bd50
2.iOS开发必备 - 环境变量配置(Debug & Release): http://blog.startry.com/2015/07/24/iOS_EnvWithXcconfig/