コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】iOS においてアプリがクラッシュした時の情報を取得できるクラス「CrashReport」紹介

使用例

取得可能なクラッシュレポートをすべて表示するサンプル

using UnityEngine;

public class Example : MonoBehaviour
{
    private void OnGUI()
    {
        var reports = CrashReport.reports;

        GUILayout.Label( "Crash reports:" );
        foreach ( var r in reports )
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label( "Crash: " + r.time );
            if ( GUILayout.Button( "Log" ) )
            {
                Debug.Log( r.text );
            }
            if ( GUILayout.Button( "Remove" ) )
            {
                r.Remove();
            }
            GUILayout.EndHorizontal();
        }
    }
}

最新のクラッシュレポートを表示するサンプル

using UnityEngine;

public class Example : MonoBehaviour
{
    private void OnGUI()
    {
        var lastReport = CrashReport.lastReport;

        GUILayout.Label( "Crash last report:" );

        if ( lastReport == null ) return;

        GUILayout.BeginHorizontal();
        GUILayout.Label( "Crash: " + lastReport.time );
        if ( GUILayout.Button( "Log" ) )
        {
            Debug.Log( lastReport.text );
        }
        if ( GUILayout.Button( "Remove" ) )
        {
            lastReport.Remove();
        }
        GUILayout.EndHorizontal();
    }
}

解説(公式のドキュメントの引用)

CrashReport クラスを使用することで、
iOS においてアプリがクラッシュした際に、アプリの次回起動時に、
クラッシュレポートを表示することができます(データを取得できた場合のみ)

クラッシュレポートのデータ取得を有効にするには下記の設定を行う必要があります

  • Unity の iOS の PlayerSettings で
    「Script Call Optimization」を「Fast but no Exceptions」に変更し、
    「Enable CrashReport API」にチェックを入れる
  • Xcode プロジェクトの「Classes/CrashReporter.h」で定義されている
    「ENABLE_CUSTOM_CRASH_REPORTER」を「0」から「1」に変更する

f:id:baba_s:20171221082514p:plain

f:id:baba_s:20171221082506p:plain

参考サイト様

関連記事