PreprocessorMacros、OtherSwiftFlags、ActiveCompilationConditionsの使い分け

2024/04/14に公開

よくプリプロセッサマクロと呼ばれていますが、Swiftでは設定方法が異なるため、便宜上まとめてCompilation Conditionと呼ぶことにします。

Compilation Condition(とConditional Compilation Blockを組み合わせるこで)でコードをコンパイルレベルで分岐することができます。例えば、下記コードであればデバッグ時にprint(”fuga”)はコンパイルされません。

#if DEBUG
    print("hoge")
#else
    print("fuga")
#endif

Compilation Conditionの3つの設定方法:PreprocessorMacrosOtherSwiftFlagsActiveCompilationConditionsの違いと設定方法を備忘録も兼ねてメモ。

Conditional Compilation Blockのドキュメント

結論

先に結論を書きます。

Objective-Cなど:Preprocessor Macrosを使用
Swift:Active Compilation Conditionsを使用

Preprocessor Macros

概要

Objective-Cなどで使用します。これを設定してもSwiftでは参照できず未定義扱いとなってしまうので注意が必要です。

昔のドキュメントにはgccコンパイラに-Dオプションで渡す、と書いてありました。なのでBuildSettingsに設定する際は-Dは不要です。

設定方法

最近のドキュメント

https://developer.apple.com/documentation/xcode/build-settings-reference#Preprocessor-Macros

Space-separated list of preprocessor macros of the form foo or foo=bar.

昔のドキュメント

https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html

Space-separated list of option specifications. Specifies preprocessor macros in the form foo (for a simple #define) or foo=1 (for a value definition). This list is passed to the compiler through the gcc -D option when compiling precompiled headers and implementation files.

Other Swift Flags

概要

Swift用です。逆にObjective-Cなどでは使用できません。

ドキュメントに明記されている箇所を見つけることができなかったですが、Swiftコンパイラにそのまま渡すのでBuildSettingsに設定する際は-D HOGEの形式で設定する必要があります。

設定方法

最近のドキュメント

https://developer.apple.com/documentation/xcode/build-settings-reference#Other-Swift-Flags

A list of additional flags to pass to the Swift compiler.

Active Compilation Conditions

概要

こちらも同じくSwift用です。Objective-Cなどでは使用できません。

Other Swift Flagsより後発でこちらは-Dをつける必要がないため、新規で設定するのであればOther Swift Flagsよりこちらを使用するのがいいかなと思います。

設定方法

最近のドキュメント

https://developer.apple.com/documentation/xcode/build-settings-reference#Active-Compilation-Conditions

A list of compilation conditions to enable for conditional compilation expressions.

太古のリリースノート

https://developer.apple.com/library/archive/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW78

Active Compilation Conditions is a new build setting for passing conditional compilation flags to the Swift compiler. Each element of the value of this setting passes to swiftc prefixed with -D, in the same way that elements of Preprocessor Macros pass to clang with the same prefix. (22457329)

Discussion