Debug宏应该在哪里定义?
iOS系统本身就区分了Configurations选项让开发者去修改对应的开发环境配置, 但是因为很多开发者却又在同一个Configuration环境中自定义了开发环境配置的开发, 使得iOS系统本身的配置成为了摆设, 仅仅用于区分打包方式选项和证书配置。
网络环境切换是每一个互联网App开发者都会频繁用到的功能, 那么大家都是用什么样的方式在切换环境的呢?我本人接触的项目中最多的就是在预编译头文件里面写一行宏定义, 然后根据宏定义去判断当前的环境。
最典型的例子
是在预编译头pch文件中添加一行代码#define DEBUG 1。然后通过这个DEBUG参数去判断当前环境是否处于开发网络或者生产网络环境。
使用DEBUG宏去判断判断开发环境还是生产环境没有任何问题, 关键的问题是我们在什么时候去定义这个宏和怎么去动态配置这个宏。
开发环境的切换在代码中最实用的还是宏定义, 那么我们怎么样才能够让宏定义动态可配置呢?
其中一种办法就是使用GCC预编译头参数GCC_PREPROCESSOR_DEFINITIONS。
- 添加Build Configuration
打开项目进入Xcode的主界面。选择project->info,找到Configuration,点击下方的“+”。
从图中可以看到两个已经添加好的Configuration:Debug和Release。
选择“duplicate debug configuration”,添加一个新的configuration,命名为Test。
- 在Project文件下的Build Settings对预编译宏定义进行默认赋值。在Xcode9下的路径为Build Settings->Apple LLVM 6.x Preprocessing->Preprocessor Macros
这里添加的
DEBUG
、Test
就会对应在项目里生成宏定义。
- 新建并配置xcconfig文件
common + "n", 选择 iOS -> Other -> Configuration settings file
新建4个xxconfig文件,我采用一下命名:
commonConfig中放入通用的配置,另外三个Config放入各自对应的配置。
然后在PCH文件中根据判断Debug、Test、Release来引人需要的头文件
#if Test
#import "ReleaseTestConfig.xcconfig"
#elseif DEBUG
#import "DebugConfig.xcconfig"
#else
#import "ReleaseConfig.xcconfig"
#endif