호댕의 iOS 개발

[Crashlytics] 크래쉬가 발생하지 않았을 때에도 로그를 보내기 본문

Software Engineering/iOS

[Crashlytics] 크래쉬가 발생하지 않았을 때에도 로그를 보내기

호르댕댕댕 2023. 9. 9. 16:44

앱에서 예상하지 못했던 비정상 강제 종료되는 상황을 트래킹하기 위해 Firebase의 Crashlytics를 많이 사용하게 된다. 

 

사용자들에게 앱을 사용하다가 갑자기 앱이 종료되게 된다면 앱에 대한 신뢰도가 매우 떨어질 수 있기 때문에 이를 지속적으로 트래킹하고 문제의 원인이 된 부분을 해결해줘야 한다. 

 

Crashlytics는 Xcode의 dSYM 파일의 디버깅 정보를 이용해 어떤 코드에서 문제가 생겼는지에 대해 알려주게 된다. 

 

구체적으로 보자면,

  • dSYM 파일에는 앱의 바이너리 코드에서 사용하는 함수 / 변수 이름과 이에 대한 주소 정보가 포함한 Symbol Table이 존재하게 된다. 이를 매핑하여 어떤 함수에서 문제가 발생했는지 식별 가능
  • 소스 코드에서 라인 번호와 바이너리 코드의 주소 간의 매핑 정보도 포함된다. 이를 통해 어떤 코드에서 문제가 생겼는지 보다 정확하게 알 수 있게 된다. 
  • 사용되는 변수와 데이터 타입의 정보를 포함한다.

 

dSYM 관련 Xcode 빌드 셋팅

그렇다면 비정상 종료가 발생했을 때에만 Crashlytics를 사용할 수 있을까?

물론 이름은 Crashlytics로 크래쉬가 발생했을 때에 이를 분석하기 위한 툴인 것 같지만 임의로 로그를 보내서 문제 원인을 정확히 파악하는데 도움을 줄 수도 있다. 

 

방법은 간단하다. 

 

FirebaseCrashlytics 라이브러리를 import한 후 

Crashlytics.crashlytics().record(
    error: NSError(
        domain: String,
        code: Int,
        userInfo: [
            String: Any
        ]
    )
)

이렇게 Error를 보내주면 된다.

확인도 간단하다. 

기존 비정상 종료가 발생하여 찍히는 로그들은 전부 이벤트 유형이 '비정상 종료'로 되어 있다. 

이를 '심각하지 않음'으로 변경 후 보면 직접 찍은 Error들을 확인할 수 있다. 

Comments