Differentiate between two Xcode targets with Swift Differentiate between two Xcode targets with Swift ios ios

Differentiate between two Xcode targets with Swift


In Xcode, go into the build configuration for a target. Find the section called Swift Compiler - Custom Flags, which contains a setting called Other Swift Flags.

Add a command-line flag for the compiler to add a flag, pretty much just like you’d do with the C compiler.

Swift Compiler Flags

Now you’ve got -D Something being passed to the Swift compiler. In your Swift code, you can now do this:

#if Something    let foo = "bar"#endif

It looks a lot like the C preprocessor, but unlike C, all code in all conditional sections has to be syntactically correct or the program won’t compile. So, you can set a flag on each target in the build settings and use them in your code.


Since Xcode 8 you can set the compilation conditions in the Build Settings for each target under Active Compilation Conditions.

Active Compilation Conditions Screenshot

With those set you can use:

#if FREE   //do something#endif

For more details see the i40west answer and comments.


One way is to add Flags to target and use preprocessor. But the other way I think would be to use something like this

if Bundle.appTarget == "" { } else { }extension Bundle {    public static var appVersion: String? {        return Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String    }    public static var appBuild: String? {        return Bundle.main.object(forInfoDictionaryKey: kCFBundleVersionKey as String) as? String    }    public static func _version() -> String {        let dictionary = Bundle.main.infoDictionary!        let version = dictionary["CFBundleShortVersionString"] as! String        let build = dictionary["CFBundleVersion"] as! String        return "\(version) build \(build)"    }    public static var appTarget: String? {        if let targetName = Bundle.main.object(forInfoDictionaryKey: "CFBundleExecutable") as? String {            return targetName        }        return nil    }}