Previously, declaring conditional compilation flags was done in the OTHER_SWIFT_FLAGS{:swift} build setting. The tricky part when adding a flag was remembering to prepend -D{:swift} like -DBETA{:swift}. Forgetting the flag could lead to unexpected results or time wasted to debugging.

Other Swift Flags in Xcode

Enter Active Compilation Conditions.

#Active Compilation Conditions

As of Xcode 8, we have the new SWIFT_ACTIVE_COMPILATION_CONDITIONS{:swift} build setting which allows us to define our flags without the need to prefix them. Under the hood, each element is passed to swiftc{:bash} prefixed with -D{:swift} ๐Ÿ‘๐Ÿฝ! This matches the behavior we had with Objective-C and Preprocessor Macros.

Active Compilation Conditions in Xcode

#Usage

Regardless of which setting you choose to add it to, using the flag in your Swift project is the same:

#if BETA
  let backgroundQueue = "com.company.appname.background.beta"
#else
  let backgroundQueue = "com.company.appname.background"
#endif