개발 라이브러리 & 툴/유니티

Unity iOS 크래시 그리고 Exception

하늘흐늘 2022. 1. 11. 21:49
반응형

iOS 빌드와 같은 경우 설정에 따라서 Unity 코드 상에서 Exception을 잡지 않는 경우 설정에 따라 크래시가 발생하여 프로그램이 종료하게 됩니다.

코드에서 잡지 않은 Exception으로 크래시가 일어나서 프로그램이 종료하게되는 옵션은 Player Settings -> iOS -> Other Settings -> Optimization -> Script Call Optimization입니다. 이 세팅이 유니티에서 기본으로 "Fast but no Exceptions"으로 설정되어 있습니다. 이 옵션 설정으로 인하여 유니티로 만든 게임에서 Exception이 발생할 때 iOS에서 크래시가 발생하게 됩니다. 이 옵션을 "Slow and Safe"로 설정하게 되면 다른 플랫폼처럼 Exception이 발생하여도 크래시가 발생하지 않습니다. 코드 상의 모든 Exception을 처리하였다면 기본 설정처럼 "Fast but no Exception"을 하는 것이 좋겠지만 그렇지 않다면 최악의 상황에서 프로그램 비정상 종료(크래시)를 막기 위하여 "Slow and Safe"로 설정할 것을 추천합니다.

코드상에 잡지 않는 Exception은 아래와 같은 코드로 로그로 남기는 것이 가능합니다.

static bool exceptionHandleSetUp = false;

public static void SetUpExceptionHandle()
{
    if (!exceptionHandleSetUp)
    {
        exceptionHandleSetUp = true;
        Application.logMessageReceived += HandleException;
    }    
}

static void HandleException(string cond, string stackTrace, LogType type)
{
    if (type == LogType.Exception)
    {
        Debug.Log(cond + "\n" + stackTrace);
    }
}

물론 프로그램 상에서 SetUpExceptionHandle()을 호출하여 주어야 합니다. 
위의 iOS 크래시 상황에서도 해당 코드의 로그는 남습니다.

참고: What's a good global exception handling strategy for Unity3D? 

 

반응형