一、概述
现在项目根据URL的不同至少需要测试和开发环境,一开始是直接在项目里通过#ifdef DEBUG来区分的,直接用系统提供的debug和release模式分别做测试和开发模式。
#ifdef DEBUG
NSString *const MGDomain = @"www.baidu.com";
#else
NSString *const MGDomain = @"www.google.com";
#endif
这样就导致正式环境没法进行DEBUG调试,还有就是测试人员要求手机可以同时安装正式环境和测试环境的APP,如果再增加一个预发布环境就更麻烦了,通过手动来更改会很麻烦甚至出错。
二、中心思想
1.Release和Debug的区别是,Release是不能调试程序,因为默认是屏蔽了可调试的一些参数,具体可以看BuildSetting里面的区别,而且Release编译时有做编译优化,会比用Debug打包出来的体积更小一点。所以这两个是一个编译选择
2、我们需要使每一个环境(开发,测试、预发布)都可已选择使用debug还是release
3、通过新建Scheme来和每一种环境一一对应
三、实践操作
1、新建Scheme
我这里分为测试和生产环境需要创建两个Scheme,名字分别在后面加上.test和.product
2、新建Build Configuration
我们有两个环境对应两个Scheme,每一个scheme都可以debug和release,所以需要四个Configuration。
在project的info设置里可以找到Configulations可以看到系统已经为我们配置了debug和release,我们可以把他们做生产环境的一对配置。
然后,分别复制debug和release创建两个新Configuration,做测试环境的一对配置
项目通过cocopods管理的,会自动配置,我们需要执行pod install
3.edit scheme
打开edit scheme选项,run模式下对应选择debug,Archive模式下选择release
4.通过User-Defined Setting 来设置项目名字和bundleID
在project的build Setting里点击加号
对应四个配置debug和release,debug.test和release.test分别设置
然后回到工程info.plist处,在Bundle identifier和Bundle display name处获取自定义设置
5、Preprocessor Macros设置
还是通过设置宏来区分不同的环境
在测试环境的两个debug.test和release.test增加MEIGUO=1这个宏,正式环境debug和release增加MEIGUO=0这个宏
在工程中我们就还可以通过MEIGUO=1来分别是不是测试环境URL了
#if MEIGUO == 1
NSString *const MGDomain = @"www.baidu.com";
#else
NSString *const MGDomain = @"www.google.com";
#endif
同时每个环境对应的APP信息可以在User-Defined Setting 里设置
参考