環境
macOS Sierra バージョン 10.12.6
Unity 5.4.3f1
Xcode Version 9.0 (9A235)
iOS 11.0.3(iPhone 7 Plus)
現象
表題のとおり、iOS11の実機デバッグで起動直後に以下エラーが出て落ちる。
UnityGfxDeviceWorker (19): signal SIGABRT
iOS10では発生せず、iOS11でもUnity Cloud Buildやアプリインストール後にXcodeを介さず起動した際は問題なく動作する。XcodeでRunした時だけ落ちるのでコンソールでのログ出力確認等が出来ない。
クラッシュ時のコンソールには「テクスチャには指定されていない使用法があります」的なことが書かれていた。
validateRenderPassDescriptor:487: failed assertion `Texture at colorAttachment[0] has usage (0x01) which doesn't specify MTLTextureUsageRenderTarget (0x04)'
Unity初心者なのでちょっとよくわからなかった。
対応
ググってみるとUnityのiOS Player Settingsで「Auto Graphics API」を切って、MetalのかわりにOpenGLES2の優先度を上げれば回避できるとの情報を見かけた。
Automatic Graphics API どのグラフィック API を使用するか選択するためのオプションです。チェックを付けた場合、Unity は Metal の使用を試み、デバイスが Metal に対応していない場合は GLES2 を使用します。チェックを付けていない場合、手動でグラフィック API の選択や使用優先度の変更ができます。手動でAPIを1つ選択するとアプリの info.plist の内容は変更され、App Store の規約に適切なものになります。
グラフィック設定が変わるためエフェクト表示などに影響が出る可能性もあるので、そのあたりは別途検証の必要がありそう。
今回はAPIレスポンスの速度計測のため起動時のログを出したいだけだったので、暫定対応としてこの方法で解決した。
Xcode上でも Product -> Scheme -> Edit Scheme... から、RunのOptionsで Metal API Validation を Disable にできる模様。
根本的にはコンソールログにあるとおりテクスチャ設定をしくていく必要ありそうだけど、アプリ内で使用している画像があまりにも多過ぎるので、ひとつひとつ設定していくのは現実的ではない。
使用しているUnityのバージョンが古いのでバージョンを上げれば解消されるのかな?
Unity 2017.1.1f1でも発生しているとの情報もあったので、バージョンアップ後にまた見てみる予定。
http://forum.china.unity3d.com/thread-28258-1-1.html
色々調べてみたけどXcodeのバグなのかiOSのバグなのかUnityのバグなのか俺のバグなのか、具体的な原因がわからなかった。
本件に関して正しい対応方法があればご教示いただきたいです。