Table of Contents
UnityのプロジェクトをiOS用にビルドし、Xcodeで実行しようとした際に以下のようなエラーメッセージが表示され、アプリが起動しない現象に遭遇しました。
MTLDebugValidateDeferredStoreActionOnDevice:3935: failed assertion `Deferred Store Action Validation storeAction unsupported for Memoryless attachment. ' dyld4 config: DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib:/usr/lib/libMTLCapture.dylib _MTLDebugValidateDeferredStoreActionOnDevice:3935: failed assertion `Deferred Store Action Validation storeAction unsupported for Memoryless attachment. '
原因を調べてみてわかったことを記載しておきます。
原因はMetal
Xcodeが停止した際の箇所を見ると、どうやら Metal 関連のようでした。
UpdateSurfaceStateFromStoreAction at RenderSurfaceMetal.mm:605:9
ビルドしたプロジェクトは Unity 側のプロジェクト設定で Metal API の検証機能の使用(Metal API Validation)をオフにしています。
Xcode側のアプリのScheme設定を見てみると、この検証機能がデフォルトでオンになっています。この Metal API Validation を無効(Disabled)にしてみたところ、無事にアプリが起動するようになりました。
つまり Metal API Validation の設定を Unity 上のものと Xcode の上のそれで一致させる必要があり、これは自動では行われないようです。
この機能は Metal 自体の使用とは関係ない検証機能ですので OFF にしてもゲームの動作には影響しないと思われます。
Metal 自体の仕様設定はメニューの Edit > Project Settings > Player > Metal Editor Support で設定します。
以上、UnityでビルドしたアプリがiOSで動作しない現象とその対策についてでした。