In Absence of Preprocessor Macros, How to Define Practical Scheme Specific Flags At Project Level in Xcode Project

In absence of preprocessor macros, is there a way to define practical scheme specific flags at project level in Xcode project

In Swift you can still use the "#if/#else/#endif" preprocessor macros (although more constrained), as per Apple docs. Here's an example:

#if DEBUG
let a = 2
#else
let a = 3
#endif

Now, you must set the "DEBUG" symbol elsewhere, though. Set it in the "Swift Compiler - Custom Flags" section, "Other Swift Flags" line. You add the DEBUG symbol with the -D DEBUG entry.

(Build Settings -> Swift Compiler - Custom Flags)
Sample Image

As usual, you can set a different value when in Debug or when in Release.

I tested it in real code; it doesn't seem to be recognized in a playground.

Conditional exclusion of code in Swift

The issue was about replicating the configuration in the Other Swift Flags file in the form

-D option

Apparently Swift ignores the flags in the preprocessor field. Now it accepts ||, && and ! without any problem with syntax:

#if option || !option2
......
#elseif option3
......
#endif

Xcode 8 and Preprocessor Macros

It was an actual bug in XCode 8. With XCode 9 (as of today, Sep 2017 beta 6), it is finally resolved.

Swift Xcode conditional precompilation

Your flag formatting is correct except that there shouldn't be a space between -D and FEATURE_A_ENABLED. It should be -DFEATURE_A_ENABLED.



Related Topics



Leave a reply



Submit