質問: 質問のタイトルが正しいかどうか分からないので、もし、問題があれば、ご指摘いただければと思います。 Swiftでアプリの作成を行っていて、METALを利用したパフォーマンスの向上を図りました。 それ自体は、うまく行っているのですが、一方、METALが使えないデバイスに対する 対応が困っています。 もともと、METALを使わないものを作成していたので、 METALが使える場合と、使えない場合で、 対応を分ければよいと思うのですが、その対応のやり方が分かりません。 例えば、シミュレーター(METAL非対応)で動かそうとすると、 ``` import Metal ``` のところで、コンパイラーエラーが発生します。 コンパイラーエラーだからだと思うのですが、実際にインポートを行うファイルが実行 されるかどうかに関係なく、エラーが発生し止まります。 一方、METAL非対応の実機で動かそうとした場合は、実際にインポートを行うファイルが 実行されないようにしておけば、エラーは発生しません。 せめて、実機で対応できればと思うので、実機でのMETAL対応を確認して、 METALフレームワークの読み込み(など)を制御できればよいのではないかと 想像しているのですが、どのようにすれば、それが可能かが分かりません。 よい方法があれば、お教えいただければと思います。 よろしくお願いいたします。
回答: ビルドターゲットのアーキテクチャ毎にマクロを利用してコードを分岐する方法が利用できると思います。 ``` #if !(arch(i386) || arch(x86_64)) //code device import Metal #endif ``` 実際には`import`だけではなく、APIを利用している部分についてもビルドターゲットがシミュレータの場合はビルドされないようにする必要があるので注意してください。