へくれすブログ

UnityとC#中心の備忘録です

【Unity】XcodeでのSimulatorビルドがクラッシュする問題について

以下のエラーメッセージに悩まされている方向けの記事です。
[UnityAppController renderingAPI] called before [UnityAppController selectRenderingApi]

f:id:hecres:20180316192302j:plain

現象

Target SDKをSimulator SDKに設定し、
Xcodeでシミュレーター向けのビルドを行うと

Uncaught exception: NSInternalInconsistencyException:
[UnityAppController renderingAPI] called before [UnityAppController selectRenderingApi]

とエラーが発生してクラッシュします。

実機ビルドやストア用のビルドでは正常に動作します。

原因と解決方法

Player Settings内のGraphics APIsにMetalのみ設定していることが原因のようです。
Graphics APIsにOpenGL ES 3などを追加するとシミュレーターモードでも動作します。

f:id:hecres:20180316190808j:plain

Metalのみ設定している場合にクラッシュするのは、調べた限りでは
XcodeのシミュレータがMetalをサポートしていないためのようです。

サポートしていない理由についてはAppleのデベロッパーフォーラムに
「シミュレータはエミュレータではなく、i386用に構築されたスタックを実行している」
という書き込みがありました。

つまりシミュレーターは32bitプロセッサ向けであり、
Metalは64bitプロセッサ用のグラフィックAPIなので対応できない?

iOS11で32bitアプリのサポートが終了したことですし、
シミュレーターも64bit向けに変わっていくのを期待したいところです。

参考/関連

answers.unity.com
forums.developer.apple.com

この記事でのバージョン

Version
Unity 2017.3.0p4
Unity/PlayerSettings/Scripting Runtime Version Experimental (.NET 4.6 Equivalent)