Unity 2019.3 以降へのバージョンアップ TIPS
■Unity アップデート後に iOS でビルドは出来るが起動時にクラッシュする
症状
- アップデート前と同じように iOS ビルドはでき、実機へのインストールも可能
- インストールしたアプリを起動しようとすると黒い画面でフリーズのような挙動
- 一定時間その状態が続いたあとにアプリがクラッシュ
エラー内容
iOS のホーム画面を管理している SpringBoard がアプリの異常を検知してクラッシュしていた。
SpringBoard [application<com.yarukiman.appid>:9999] Watchdog termination request provided: <FBSProcessTerminationRequest: 0x000000000; label: "watchdog provision violated"; exceptionCode: "Watchdog Violation (0x00000000)"; reportType: CrashLog; explanation: "process-launch watchdog transgression: application<com.yarukiman.appid>:9999 exhausted real (wall clock) time allowance of 20.00 seconds">
■ここからが解決方法
UnityFramework の登場
Unity 2019.3 から UnityFramework が分離されるようになりました。
・UaaL(Unity as a Library)
forum.unity.com
Unity as a Library とは
簡単に説明すると、Unity のエンジン部分が切り離され、
ネイティブアプリに部分的に Unity を組み込めるようになる仕組みです。
この仕組みが導入されたことにより、iOS ビルドの Xcode 吐き出し時の挙動が大きく変わりました。
これまでは Xcode 上に Unity-iPhone というプロジェクトが作成され、その中に Unity エンジンが内包されていました。
Unity 2019.3 以降では Unity-iPhone と UnityFramework という2つのプロジェクトが作成され、
Unity エンジン関連はすべて UnityFramework 側に格納されるようになります。
そのため、PostProcess で PBXProject ファイルを操作する際のターゲットを変更する必要があります。
PostProcessBuild の処理を変更する
変更を加える点は以下の2点です。
1.設定するターゲットプロジェクトを Unity-iPhone から UnityFramework に変更
2.Unity-iPhone プロジェクトから UnityFramework を参照出来るようにフレームワーク参照を追加
実際の PostProcessBuil の処理はこんな感じに変更になります。
[PostProcessBuild] public static void OnPostProcessBuild(BuildTarget buildTarget, string path) { var pbxProjectPath = PBXProject.GetPBXProjectPath(path); var pbxProject = new PBXProject(); pbxProject.ReadFromString(File.ReadAllText(pbxProjectPath)); // これまで Unity-iPhone をターゲットにしていろいろ変更していたところを、 // UnityFramework をターゲットに変更する - var target = pbxProject.TargetGuidByName("Unity-iPhone"); + var target = pbxProject.GetUnityFrameworkTargetGuid(); // Unity 2019.3 以降の UnityFramework 分離対応(Unity-iPhone から UnityFramework を参照できるように追加) + pbxProject.AddFrameworkToProject(pbxProject.GetUnityMainTargetGuid(), "UnityFramework.framework", false); File.WriteAllText(pbxProjectPath, pbxProject.WriteToString()); }
■まとめ
知っていればなんてことのない変更ではありますが、これについての日本語の情報が極端に少なく
解決するまでにかなりの時間を費やしてしまったため、同じ境遇の方の助けに少しでもなれば幸いです。