Add a macOS Alias for the OSX Platform Configuration Test
01 何が問題だったのか
WWDC 2016 で、Apple は Mac 向けのオペレーティングシステムの名称を「OS X」から「macOS」へ改めました。しかし Swift では、プラットフォームを条件付きコンパイルで判別する #if os(...) において、Mac を表す名前が OSX のままでした。
#if os(OSX)
// Mac 向けのコード
#endif
この OSX という名前は、Sierra 以降の正式名称である「macOS」と一致していません。一方で、単純に OSX を macOS に置き換えてしまうと、Yosemite や El Capitan など Sierra より前の環境を含めて、すでに #if os(OSX) を使って書かれた既存コードすべてに書き換えを強いることになります。Swift で Mac アプリケーションを開発している開発者にとっては、これは過大な負担です。
そのため、新名称への追従と既存コードへの影響の最小化を両立させる方法が必要でした。
02 どのように解決されるのか
#if os(OSX) を置き換えるのではなく、別名(alias)として #if os(macOS) を追加 します。これにより、既存の OSX を使ったコードはそのまま動作しつつ、新しいコードでは Apple の公式な名称である macOS を使って書けるようになります。
使い方は従来と同じで、os() に macOS を渡すだけです。
#if os(macOS)
// macOS(および OS X)向けのコード
#endif
コンパイラ側では、ターゲットが Mac のオペレーティングシステムの場合、os プラットフォーム条件として OSX と macOS の両方を成立させます。したがって、#if os(OSX) と #if os(macOS) はどちらも同じ条件を表し、同じブランチが選択されます。
この変更は純粋に追加のみで、既存コードに破壊的な影響を与えることはありません。os() 以外でプラットフォーム名が現れる @available や #available の属性・式については本 Proposal のスコープ外で、別途対応が検討されます(本 Proposal 時点では OSX / OSXApplicationExtension の表記が残ります)。