現象
Xcode8からXcode9に移行したときに、以下のようなビルドエラーが発生しました。
<unknown>:0: error: conditional compilation flags must be valid Swift identifiers (rather than '-D')
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc failed with exit code 1
Xcode8では問題なくビルドできるプロジェクトです。
原因
Build Settings のActive Compilation Conditions
に -D DEBUG
と書かれていた。
-Dを削除して、DEBUG
だけにしたらエラーが消えました。
説明
Active Compilation Conditions
は以下のようなマクロで分岐させるときに使うフラグ文字列です。
#if DEBUG
// デバッグビルド時のみの処理
#endif
Xcode8以降はデフォルトでDEBUG
が入っています。
Xcode7以前ではOther Swift Flags
の方に -D DEBUG
のように指定していましたが、Active Compilation Conditions
には-D
が必要ありません。同じノリでActive Compilation Conditions
に-D DEBUG
と指定すると、"-D"と"DEBUG"という2つの文字列を設定していると解釈されます。
Xcode8ではActive Compilation Conditions
に"-D"という文字列を設定していても別に怒られなかったのですが、Xcode9から1はハイフンから始まる文字列はコンパイル時に蹴るようになったようです。
因みに、Active Compilation Conditions
とOther Swift Flags
の-D指定はどちらかが優先ということではなく、共存できるようでした。
検証環境
- macOS Sierra Ver. 10.12.6
- Xcode8.3.3
- Xcode9.0
-
正確に言うとXcodeというよりもSwiftコンパイラのバージョンに依存するものと思われます ↩