We have a hybrid Objective-C/Swift app. All of the new classes are written in Swift, but we still update the Objective-C code for bug fixes and feature enhancements. In our app, we define Preprocessor Macros and use it for build configuration specific logic e.g.
Recently, we had to add support an enterprise build in our app. An enterprise build is a build where the IPA is stored on the company's internal secure network and served from there. I added a new configuration, "Enterprise" to our app. I added the macro under "Apple Clang - Preprocessing" --> "PreProcessor Macros"
However, after making this change and adding the logic to our Swift code nothing happened. I spent hours trying to see if there was any issue with our logic. Was there any typos in the variable name? Had I set the macro in the wrong configuration? Was it a cache issue? The answer to all these questions were no. It turns out that the Swift compiler doesn't include a preprocessor. It takes advantage of compile-time attributes to accomplish the same functionality. We must define them under "Swift Compiler - Custom Flags" --> "Active Compilation Conditions".
After adding the the custom flags, my code worked as expected. One thing to keep in mind is that if you have both Objective-C and Swift classes relying on a macro, you will need to add it to both places.