Firebase Crashlytics 시작하기


이 빠른 시작에서는 Firebase Crashlytics SDK를 사용해 앱에 Firebase Crashlytics를 설정하여 Firebase Console에서 포괄적인 비정상 종료 보고서를 확인하는 방법을 설명합니다.

Crashlytics를 설정하려면 Firebase Console과 IDE 모두에서 태스크를 수행해야 합니다(예: Firebase 구성 파일 및 Crashlytics SDK 추가). 설정을 완료하려면 테스트 비정상 종료를 강제로 적용하여 첫 번째 비정상 종료 보고서를 Firebase로 전송해야 합니다.

시작하기 전에

  1. 아직 추가하지 않았다면 Apple 프로젝트에 Firebase를 추가합니다. Apple 앱이 없다면 샘플 앱을 다운로드하면 됩니다.

  2. 권장: 비정상 종료, 심각하지 않은 문제 또는 ANR 이벤트로 이어지는 사용자 작업을 파악하기 위해 탐색경로 로그를 자동으로 가져오려면 Firebase 프로젝트에서 Google Analytics를 사용 설정해야 합니다.

    • 기존 Firebase 프로젝트에 Google Analytics가 사용 설정되어 있지 않은 경우 Firebase Console의 > 프로젝트 설정에 있는 통합에서 Google Analytics를 사용 설정할 수 있습니다.

    • 새 Firebase 프로젝트를 만드는 경우 프로젝트 생성 워크플로에서 Google Analytics를 사용 설정합니다.

    Crashlytics에서 지원하는 모든 Apple 플랫폼(watchOS 제외)에서 탐색경로 로그를 사용할 수 있습니다.

1단계: 앱에 Crashlytics SDK 추가

Swift Package Manager를 사용해 Firebase 종속 항목을 설치하고 관리하세요.

  1. 앱 프로젝트를 연 상태로 Xcode에서 File(파일) > Add Packages(패키지 추가)로 이동합니다.
  2. 메시지가 표시되면 Firebase Apple 플랫폼 SDK 저장소를 추가합니다.
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Crashlytics 라이브러리를 선택합니다.
  5. 탐색경로 로그를 활용하려면 Google Analytics용 Firebase SDK도 앱에 추가합니다. Firebase 프로젝트에서 Google 애널리틱스가 사용 설정되어 있는지 확인합니다.
  6. 타겟 빌드 설정의 Other Linker Flags(기타 링커 플래그) 섹션에 -ObjC 플래그를 추가합니다.
  7. (macOS만 해당) Info.plist에서 NSApplicationCrashOnExceptions 키를 추가하고 YES로 설정합니다.
  8. 완료되면 Xcode가 백그라운드에서 자동으로 종속 항목을 확인하고 다운로드하기 시작합니다.

그런 다음 Firebase 모듈을 구성합니다.

  1. App 구조체 또는 UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. 일반적으로 앱의 application(_:didFinishLaunchingWithOptions:) 메서드에서 FirebaseApp 공유 인스턴스를 구성합니다.

    Swift

    // Use the Firebase library to configure APIs.
    FirebaseApp.configure()
    

    Objective-C

    // Use the Firebase library to configure APIs.
    [FIRApp configure];
    

2단계: Xcode를 설정하여 dSYM 파일 자동 업로드

사람이 읽을 수 있는 비정상 종료 보고서를 생성하려면 Crashlytics에 프로젝트의 디버그 기호(dSYM) 파일이 필요합니다. 다음 단계에서는 dSYM을 자동으로 생성하고 처리한 후 앱을 빌드할 때마다 파일을 업로드하도록 Xcode를 구성하는 방법을 설명합니다.

  1. 프로젝트의 Xcode 작업공간을 열고 왼쪽 탐색기에서 프로젝트 파일을 선택합니다.

  2. TARGETS(대상) 목록에서 기본 빌드 대상을 선택합니다.

  3. Build Settings(빌드 설정) 탭을 클릭한 후 다음 단계를 완료하여 Xcode에서 빌드에 사용할 dSYM을 생성하도록 합니다.

    1. All(모두)을 클릭한 후 debug information format을 검색합니다.

    2. 모든 빌드 유형의 Debug Information Format(디버그 정보 형식)DWARF with dSYM File로 설정합니다.

  4. Build Phases(빌드 단계) 탭을 클릭한 후 다음 단계를 완료하여 Xcode에서 dSYM을 처리하고 파일을 업로드할 수 있도록 합니다.

    1. > New Run Script Phase(새 실행 스크립트 단계)를 클릭합니다.

      이 새로운 Run Script(실행 스크립트) 단계가 프로젝트의 마지막 빌드 단계인지 확인합니다. 그렇지 않으면 Crashlytics가 dSYM을 제대로 처리할 수 없습니다.

    2. 새로운 Run Script(실행 스크립트) 섹션을 펼칩니다.

    3. Shell(셸) 라벨 아래에 있는 스크립트 필드에서 실행 스크립트를 추가합니다.

      이 스크립트는 프로젝트의 dSYM 파일을 처리하고 파일을 Crashlytics에 업로드합니다.

      "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
    4. Input Files(입력 파일) 섹션에서 다음 파일 위치의 경로를 추가합니다.

      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
      ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
      $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
      $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)

dSYM 파일을 수동으로 업로드하는 방법을 비롯해 dSYM 파일 및 Crashlytics에 관한 자세한 내용은 가독화된 비정상 종료 보고서 받기를 참조하세요.

3단계: 테스트 비정상 종료를 강제로 적용하여 설정 완료

Crashlytics 설정을 완료하고 Firebase Console의 Crashlytics 대시보드에 초기 데이터를 표시하려면 테스트 비정상 종료를 강제로 적용해야 합니다.

  1. 테스트 비정상 종료를 강제로 적용하는 데 사용할 수 있는 코드를 앱에 추가합니다.

    다음 코드를 사용하여 누르면 비정상 종료를 일으키는 버튼을 앱에 추가할 수 있습니다. 버튼에 'Test Crash'라는 라벨이 지정되어 있습니다.

    SwiftUI

    Button("Crash") {
      fatalError("Crash was triggered")
    }
    

    UIKit

    Swift

    import UIKit
    
    class ViewController: UIViewController {
      override func viewDidLoad() {
          super.viewDidLoad()
    
          // Do any additional setup after loading the view, typically from a nib.
    
          let button = UIButton(type: .roundedRect)
          button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
          button.setTitle("Test Crash", for: [])
          button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
          view.addSubview(button)
      }
    
      @IBAction func crashButtonTapped(_ sender: AnyObject) {
          let numbers = [0]
          let _ = numbers[1]
      }
    }
    

    Objective-C

    #import "ViewController.h"
    
    @implementation ViewController
    ‐ (void)viewDidLoad {
        [super viewDidLoad];
    
        // Do any additional setup after loading the view, typically from a nib.
    
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(20, 50, 100, 30);
        [button setTitle:@"Test Crash" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(crashButtonTapped:)
            forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];
    }
    
    ‐ (IBAction)crashButtonTapped:(id)sender {
        @[][1];
    }
    
    @end
    
  2. Xcode 디버거 연결을 해제한 상태로 Xcode에서 앱을 빌드하고 실행합니다.

    1. Build and then run the current scheme(현재 스키마 빌드 후 실행)을 클릭하여 테스트 기기 또는 시뮬레이터에서 앱을 빌드합니다.

    2. 앱이 실행될 때까지 기다린 다음 Stop running the scheme or action(스키마 또는 작업 실행 중지)을 클릭하여 앱의 최초 인스턴스를 종료합니다. 이 최초 인스턴스는 Crashlytics를 방해하는 디버거를 포함합니다.

  3. 앱의 첫 번째 비정상 종료 보고서를 전송하려면 테스트 비정상 종료를 강제로 적용합니다.

    1. 테스트 기기 또는 시뮬레이터의 홈 화면에서 앱을 엽니다.

    2. 앱에서 위 코드를 사용하여 추가한 'Test Crash' 버튼을 누릅니다.

    3. 앱이 비정상 종료된 후에는 Xcode에서 앱을 다시 실행하여 앱에서 비정상 종료 보고서를 Firebase에 전송할 수 있도록 합니다.

  4. Firebase Console의 Crashlytics 대시보드로 이동하여 테스트 비정상 종료를 확인합니다.

    Console을 새로고침하고 5분 후에도 테스트 비정상 종료가 표시되지 않으면 디버그 로깅을 사용 설정하여 앱에서 비정상 종료 보고서를 전송하는지 확인합니다.


이제 모든 작업이 완료되었습니다. 이제 Crashlytics에서 앱의 비정상 종료를 모니터링합니다. 모든 보고서와 통계를 확인하고 조사하려면 Crashlytics 대시보드로 이동하세요.

다음 단계