Crashlytics 문제 해결 및 FAQ


이 페이지에서는 Crashlytics 사용과 관련된 자주 묻는 질문(FAQ)에 대한 답변과 문제 해결 도움말을 제공합니다. 원하는 내용을 찾을 수 없거나 추가 지원이 필요하면 Firebase 지원팀에 문의하세요.

일반적인 문제 해결 및 FAQ

Firebase Console의 문제 표에 두 가지 다른 문제 형식이 표시될 수 있습니다. 또한 일부 문제에는 '변형'이라는 특징이 있을 수 있습니다. 이유는 다음과 같습니다.

2023년 초, Google에서는 이벤트 그룹화를 위한 향상된 분석 엔진, 업데이트된 디자인, 새로운 문제(예: 변형)에 대한 일부 고급 기능을 출시했습니다. 자세한 내용은 최근 블로그 게시물을 참조하세요. 아래에서 주요 내용을 확인할 수 있습니다.

Crashlytics는 앱의 모든 이벤트(예: 비정상 종료, 심각하지 않은 문제, ANR)를 분석하고 문제라는 이벤트 그룹을 만듭니다. 한 문제의 모든 이벤트에는 공통적인 장애점이 있습니다.

이벤트를 이러한 문제로 그룹화하기 위해 이제 향상된 분석 엔진이 스택 트레이스의 프레임, 예외 메시지, 오류 코드, 기타 플랫폼 또는 오류 유형 특성 등 이벤트의 여러 측면을 살펴봅니다.

그러나 이 이벤트 그룹 내에서 장애로 이어지는 스택 트레이스가 다를 수 있습니다. 스택 트레이스가 다르면 근본 원인이 달라질 수 있습니다. 문제 내에서 발생할 수 있는 이러한 차이를 나타내기 위해 이제 문제 내에 변형을 만듭니다. 각 변형은 문제에서 동일한 장애점 유사한 스택 트레이스가 있는 이벤트의 하위 그룹입니다. 변형을 사용하면 문제 내에서 가장 일반적인 스택 트레이스를 디버깅하고 서로 다른 근본 원인으로 인해 장애가 발생했는지 파악할 수 있습니다.

개선된 기능은 다음과 같습니다.

  • 문제 행에 개선된 메타데이터 표시
    이제 앱의 문제를 더 쉽게 파악하고 분류할 수 있습니다.

  • 중복 문제 감소
    줄 번호를 변경해도 새 문제가 발생하지 않습니다.

  • 다양한 근본 원인이 있는 복잡한 문제를 더 손쉽게 디버깅
    변형을 사용하여 문제 내에서 가장 일반적인 스택 트레이스를 디버깅합니다.

  • 더 의미 있는 알림과 신호
    새로운 문제가 실제로는 새로운 버그를 나타냅니다.

  • 더욱 강력한 검색
    각 문제에 예외 유형 및 패키지 이름과 같이 검색 가능성이 더 높은 메타데이터가 포함됩니다.

개선된 기능이 적용되는 방식은 다음과 같습니다.

  • 앱에서 새로운 이벤트가 수신되면 기존 문제와 일치하는지 확인합니다.

  • 일치하는 항목이 없으면 이벤트에 더 스마트한 이벤트 그룹화 알고리즘을 자동으로 적용하고 개선된 메타데이터 설계로 새로운 문제를 만듭니다.

Google에서 진행 중인 이벤트 그룹화에 대한 첫 번째 대규모 업데이트입니다. 의견이 있거나 문제가 발생하면 신고를 제출하여 알려주시기 바랍니다.

비정상 종료가 발생하지 않은 측정항목(예: 비정상 종료가 발생하지 않은 사용자 및 세션)이나 신속 알림이 표시되지 않으면 다음을 사용 중인지 확인하세요. Crashlytics SDK v10.8.0 이상

탐색경로 로그가 표시되지 않는 경우 Google Analytics의 앱 구성을 확인하는 것이 좋습니다. 다음 요건을 충족해야 합니다.

프로젝트의 dSYM을 업로드하고 상세 출력을 얻으려면 다음을 확인하세요.

  1. 프로젝트의 빌드 단계에 Xcode가 빌드 시 프로젝트의 dSYM을 업로드하도록 허용하는 Crashlytics 실행 스크립트가 포함되어 있는지 확인합니다. 스크립트 추가 방법은 Crashlytics 초기화를 참조하세요. 프로젝트를 업데이트한 후 강제 비정상 종료를 통해 비정상 종료가 Crashlytics 대시보드에 표시되는지 확인합니다.

  2. Firebase Console에 'dSYM 누락' 알림이 표시되면 Xcode를 확인하여 빌드에 대해 dSYM이 제대로 생성되는지 확인합니다.

  3. Xcode가 dSYM을 제대로 생성하는데 여전히 dSYM이 누락된 것으로 나타난다면 dSYM을 업로드하는 동안 실행 스크립트 도구가 중단될 수 있습니다. 이 경우 다음을 각각 시도해 보세요.

    • 사용 중인 Crashlytics가 최신 버전인지 확인합니다.

    • 누락된 dSYM 파일을 수동으로 업로드합니다.

      • 옵션 1: dSYMs에서 콘솔 기반 '드래그 앤 드롭' 옵션을 사용하여 누락된 dSYM 파일이 담긴 ZIP 파일을 업로드합니다.
      • 옵션 2: upload-symbols 스크립트를 사용하여 dSYMs 탭에서 제공된 UUID에 대해 누락된 dSYM 파일을 업로드합니다.
  4. dSYM이 계속 누락된 것으로 나타나거나 업로드에 실패하면 Firebase 지원팀에 문의하세요. 이때 로그를 함께 제공합니다.

스택 트레이스가 잘못 기호화된 것 같다면 다음을 확인하세요.

  • 앱 라이브러리의 프레임에 앱 코드에 대한 참조가 없는 경우 -fomit-frame-pointer가 컴파일 플래그로 설정되지 않았는지 확인합니다.

  • 앱 라이브러리에 (Missing) 프레임이 여러 개 표시된다면 Firebase Console의 Crashlytics dSYMs에 선택사항인 dSYM이 (영향을 받는 앱 버전에) 누락된 것으로 나열되어 있는지 확인합니다. 누락되었다면 이 FAQ 페이지의 dSYM이 누락되거나 업로드되지 않습니다.에서 'dSYM 누락 알림' 문제 해결 단계를 따르세요. 이러한 dSYM을 업로드해도 이미 발생한 비정상 종료는 기호화되지 않지만 이렇게 하면 이후의 비정상 종료를 기호화하는 데 도움이 됩니다.

프로젝트 구성원은 메모를 통해 질문, 상태 업데이트 등의 특정 문제에 대한 의견을 남길 수 있습니다.

프로젝트 구성원이 메모를 게시하면 Google 계정의 이메일로 라벨이 지정됩니다. 이 이메일 주소는 메모를 확인할 권한이 있는 모든 프로젝트 구성원에게 메모와 함께 표시됩니다.

다음은 메모를 보고 작성하고 삭제하는 데 필요한 액세스 권한입니다.

비정상 종료가 발생하지 않은 측정항목 이해하기를 참조하세요.

프로젝트 구성원은 메모를 통해 질문, 상태 업데이트 등의 특정 문제에 대한 의견을 남길 수 있습니다.

프로젝트 구성원이 메모를 게시하면 Google 계정의 이메일로 라벨이 지정됩니다. 이 이메일 주소는 메모를 확인할 권한이 있는 모든 프로젝트 구성원에게 메모와 함께 표시됩니다.

다음은 메모를 보고 작성하고 삭제하는 데 필요한 액세스 권한입니다.

통합

프로젝트에서 Google Mobile Ads SDK와 함께 Crashlytics를 사용하는 경우 예외 핸들러를 등록할 때 비정상 종료 보고 도구가 간섭할 가능성이 있습니다. 이 문제를 해결하려면 disableSDKCrashReporting을 호출하여 Mobile Ads SDK에서 비정상 종료 보고를 사용 중지하세요.

Crashlytics를 BigQuery에 연결하면 Firebase 프로젝트의 위치에 관계없이, 생성한 새 데이터 세트가 자동으로 미국에 위치합니다.

플랫폼 지원

예. macOS 및 tvOS 프로젝트에 Crashlytics를 구현할 수 있습니다. 비정상 종료가 Google Analytics에서 수집한 측정항목(비정상 종료가 발생하지 않은 사용자, 최신 출시 버전, 신속 알림, 탐색경로 로그)에 액세스할 수 있도록 v8.9.0 이상의 Google Analytics용 Firebase SDK를 포함하도록 하세요.

이제 서로 다른 Apple 플랫폼(예: iOS, tvOS, Mac Catalyst)을 위해 앱을 개발했더라도 단일 Firebase 프로젝트에서 여러 앱의 비정상 종료를 보고할 수 있습니다. 이전에는 동일한 번들 ID가 포함된 앱을 개별 Firebase 프로젝트로 분리해야 했습니다.

회귀된 문제

이전에 문제를 종료했지만 Crashlytics에서 해당 문제가 다시 발생했다는 새로운 보고를 받으면 문제가 회귀된 것입니다. 앱에 맞게 문제를 해결할 수 있도록 Crashlytics에서 이러한 회귀된 문제를 자동으로 다시 엽니다.

다음은 Crashlytics에서 문제를 회귀로 분류하는 방식을 설명하는 예시 시나리오입니다.

  1. Crashlytics에서 처음으로 비정상 종료 'A'에 관한 비정상 종료 보고서를 받습니다. Crashlytics에서 이 비정상 종료에 해당하는 문제(문제 'A')를 엽니다.
  2. 개발자가 이 버그를 신속하게 수정하고 문제 'A'를 종료한 후 앱의 새 버전을 출시합니다.
  3. 개발자가 문제를 종료한 후 Crashlytics에서 문제 'A'에 관한 다른 보고서를 받습니다.
    • 문제가 종료되었을 때 Crashlytics에서 알고 있는 앱 버전에서 보고서를 보낸 경우(즉, 해당 버전에서 모든 비정상 종료에 대해 비정상 종료 보고서를 보낸 경우) Crashlytics에서는 문제가 회귀된 것으로 간주하지 않습니다. 문제가 종료된 상태로 유지됩니다.
    • 문제가 종료되었을 때 Crashlytics에서 모르는 앱 버전에서 보고서를 보낸 경우(즉, 해당 버전에서 비정상 종료에 대해 어떠한 비정상 종료 보고서도 보내지 않은 경우) Crashlytics에서 문제가 회귀된 것으로 간주하고 문제를 다시 엽니다.

문제가 회귀되면 Crashlytics에서 문제를 다시 열었음을 알 수 있도록 회귀 감지 알림이 전송되고 문제에 회귀 신호가 추가됩니다. 회귀 알고리즘으로 인해 문제가 다시 열리지 않도록 하려면 문제를 종료하는 대신 '숨기세요'.

문제가 종료되었을 때 비정상 종료 보고서를 보낸 적이 없는 이전 앱 버전에서 보고서를 보내면 Crashlytics에서 문제가 회귀된 것으로 간주하고 문제를 다시 엽니다.

이러한 상황은 다음과 같은 경우에 발생할 수 있습니다. 개발자가 버그를 수정하고 앱의 새 버전을 출시했지만 버그가 수정되지 않은 이전 버전에 아직 사용자가 있습니다. 만약 문제가 종료되었을 때 이전 버전 중 하나에서 비정상 종료 보고서를 보낸 적이 없는 경우 해당 사용자에게 버그가 발생하기 시작하면 비정상 종료 보고서가 회귀된 문제를 트리거합니다.

회귀 알고리즘으로 인해 문제가 다시 열리지 않도록 하려면 문제를 종료하는 대신 '숨기세요'.