Swift项目中使用条件编译与建立多个Scheme方便开发使用

###在Objective-C项目中,经常会这样使用

1
2
3
4
5
#ifndef DEBUG
#define ABC abc
#else
#define XYZ xyz
#endif

这样在Debug模式下就会定义第一个宏,非Debug模式下就定义第二个宏

###在Swift项目中条件编译的方法

  • PROJECT这样设置

PROJECT中的设置

把红框中的Configuration的名字改成你需要的名字就行了,主要是用作区分

  • TARGET这样设置
    TARGET中的设置

PROJECT中设置的新Configuration名字在这边就会对应显示了

1.在Debug模式下,需要定义Debug这个宏,双击红框区域然后输入 -DDebug,选择编译模式为Debug时,系统就会提供这个宏

2.同样,在新建的Configuration上面输入 -D+宏名。我选择建立了一个Staging的宏

建立新Scheme

  • 菜单中选择 Product -> Scheme -> EditScheme
  • 当前默认为名称为与工程名称的Scheme,点击Duplicate Scheme,将当前Scheme复制2次得到2个新Scheme

  • Manage Scheme中把3个Scheme名称改成你想要的,例如可以改成这样
    Scheme改名示例

  • EditScheme中如下设置Build Configuration选项

  • 设置Scheme

    点开左边箭头的选项,每一个选项顺序选择相应顺序的Build Configuration

这样就完成了设置,我选择MVVM -Debug这个Scheme,编译时系统会定义Debug这个宏

同样我选择MVVM -Debug -Staging的时候,就有DebugStaging这2个宏了

  • Build的时候在这里选择不同的Scheme

选择不同的Scheme

条件编译的代码

设置Debug宏,为了只在Debug模式下才打印输出log

设置Staging,为了在Debug模式下区分服务器正式服和测试服地址

  • 在Log中设置
1
2
3
4
5
func DLog(logMessage: Any, file: String = __FILE__, function: String = __FUNCTION__, line: Int = __LINE__) {
#if Debug
println("\(file.lastPathComponent):\(function):\(line) >>> \(logMessage)");
#endif
}
  • 在服务器地址定义中设置
1
2
3
4
5
#if Staging 
let API_HOST = //测试服
#else
let API_HOST = //正式服
#endif

使用

按以上顺序选择不同Scheme来Build,会得到以下效果:

1.Debug模式下使用测试服务器

2.Debug模式下使用正式服务器

3.Release模式,不输出Log信息,使用正式服务器

参考文章

参考了这篇,还有这篇文章