콘솔로 이동

iOS에서 오류 보고

Firebase 오류 보고는 앱의 오류에 대한 상세 보고서를 만듭니다. 스택 추적의 유사성에 따라 오류를 문제로 그룹화하고, 사용자가 체감하는 영향의 심각도에 따라서 분류합니다. 자동으로 수신되는 보고서 이외에도 맞춤 이벤트를 기록하여 오류의 발생 원인을 단계별로 포착할 수 있습니다.

오류 보고 설정

앱에 오류 보고를 설정하는 방법은 다음과 같습니다.

  1. Firebase SDK를 설치합니다.
  2. Firebase 콘솔에서 Firebase 프로젝트에 앱을 추가합니다.
  3. Podfile에 Firebase 오류 보고에 대한 종속 항목을 추가합니다.
    pod 'Firebase/Crash'
  4. UIApplicationDelegate에서 Firebase 모듈을 가져옵니다.

    Swift

    import Firebase

    Objective-C

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

    Swift

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

    Objective-C

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

기호 파일 업로드

오류 보고서를 사람이 읽을 수 있는 형태로 조회하려면 매 빌드 후에 기호 파일을 업로드해야 합니다. 다음 단계에 따라 Xcode에 실행 스크립트를 추가하면 이 작업을 자동화할 수 있습니다.

  1. 업로드를 인증하는 서비스 계정 키를 다운로드합니다. Firebase Console에서 프로젝트를 선택한 다음 새 비공개 키 생성을 클릭합니다.
  2. Xcode에서 애플리케이션 타겟을 클릭하고 빌드 단계를 선택한 다음 '+'를 클릭하여 단계를 추가합니다.
  3. 스크립트 실행을 선택하고 다음 콘텐츠를 추가합니다. 여기에서 서비스 계정 경로GOOGLE_APP_ID를 적절한 값으로 설정해야 합니다.
    # Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
    GOOGLE_APP_ID=1:my:app:id
    
    # Replace the /Path/To/ServiceAccount.json with the path to the key you just downloaded
    "${PODS_ROOT}"/FirebaseCrash/upload-sym "/Path/To/ServiceAccount.json"
        

첫 번째 오류 만들기

첫 번째 오류를 만들려면 AppDelegate의 didFinishLaunchingWithOptions 메소드에 어설션을 추가하여 앱이 실행될 때 Firebase 초기화를 호출한 즉시 비정상으로 종료되게 합니다.

Swift

fatalError()

Objective-C

assert(false);

이제 어설션을 추가했으므로 다음을 수행하여 오류를 만들 수 있습니다.

  1. Xcode에서 앱을 실행합니다.
  2. Xcode에서 Stop(정지)을 클릭하여 디버거를 분리합니다.
  3. 기기 또는 에뮬레이터의 홈 화면에서 앱을 직접 실행합니다.
  4. 앱이 다운될 때까지 기다립니다.
  5. 앱이 성공적으로 시작되도록 오류 줄을 삭제합니다.
  6. 빠른 시작을 Xcode에서 다시 실행합니다. 15초 이내에 보고서가 성공적으로 업로드되었다는 로그 메시지가 표시됩니다.
  7. Firebase 콘솔의 오류 보고 섹션에서 오류를 확인합니다. 여기에 오류가 표시될 때까지 1~2분이 걸립니다.

맞춤 로그 만들기

FIRCrashLog()를 사용하여 오류 보고서에 포함되는 맞춤 로그 메시지를 만들 수 있습니다. 다음 예에서는 로그 메시지를 만드는 방법을 보여 줍니다.

Swift

FirebaseCrashMessage("Cause Crash button clicked")
fatalError()

Objective-C

FIRCrashLog(@"Cause Crash button clicked");
assert(NO);

비트코드 지원

비트코드를 사용 설정한 경우 오류 보고에서 수집한 스택 추적을 읽으려면 다음을 수행하여 앱을 기호화해야 합니다.

  1. 앱의 디버그 기호(.dSYM) 파일을 다운로드합니다. 이 파일을 다운로드하는 방법은 기기 창에서 비정상 종료 확인 및 가져오기를 참조하세요.

  2. 모든 .dSYM 파일이 .xcarchive로 다운로드되었으면 편리한 위치에 .dSYM 파일의 압축을 풉니다.

  3. 일괄 업로드 스크립트를 사용하여 기호화해야 하는 앱 버전의 .dSYM 파일을 업로드합니다. Spotlight에서 색인을 업데이트하여 이 파일을 포함하는 데 1분 정도 걸릴 수 있습니다.

    ./Pods/FirebaseCrash/batch-upload -i "Path/To/Info.plist" -p "Path/To/GoogleService-Info.plist" "Path/To/ServiceAccount.json" "UUID-OF-DSYM"
    

알려진 문제

  • 현재 Firebase SDK는 Xcode 시뮬레이터에서 NSException 클래스 사용을 지원하지 않습니다. 이 클래스를 사용하면 Firebase 콘솔에서 스택 추적이 잘못된 형식으로 나타납니다. 이 문제를 해결하려면 실제 기기를 사용하거나 assert 등의 다른 예외 유형으로 테스트하세요.

  • 오류 보고에서는 고유 ID를 사용하여 각 사용자를 식별합니다. Xcode 8.1의 알려진 버그로 인해 iOS 10 시뮬레이터에서는 이 ID를 만들지 못하여 오류 보고를 업로드할 수 없습니다. Xcode 8.1에서 이 문제를 해결하려면 기기에서 테스트를 실행하거나 앱 설정의 Capabilities(기능) 섹션에서 Keychain Sharing(키체인 공유)을 켜세요. Xcode 8.2 베타 릴리스에서는 이 버그가 해결되었습니다.

다음 단계