Jiwift

[iOS/Swift] Firebase Crashlytics 에러 로그 수집 본문

라이브러리/Firebase

[iOS/Swift] Firebase Crashlytics 에러 로그 수집

지위프트 2023. 11. 8. 00:33
반응형

[iOS/Swift] Firebase Crashlytics 에러 로그 수집

 

Apple, Android, Flutter, Unity를 위한 강력한 비정상 종료 보고 솔루션으로 앱 문제에 대한 명확하고 활용 가능한 분석 정보를 확인해 보세요.

 

 

 구글 Firebase 상품 안에는 Crashlytics라는 에러 로그 수집 서비스가 있습니다. 가벼운 실시간 비정상 종료 보고 도구로 앱 품질을 저하하는 안정성 문제를 추적하고 우선순위를 지정하고 문제를 해결하는 데 도움이 됩니다

 

 이미 구글 문서도 잘 되어 있지만 사진과 함께 설치와 사용법을 알아보도록 하겠습니다. 우선 파이어베이스와 앱을 연동하지 않은 분들은 앞에 글을 읽어주시기 바랍니다. 

 

글 순서

1. 설정

2. 사용법

3. 안될 때

 

SPM

SPM을 사용해서 설치하도록 하겠습니다. 다운로드 주소는 "https://github.com/firebase/firebase-ios-sdk.git"입니다. 

 

설치

 SPM을 통해서 Firebase를 받다 보면 필요한 것만 선택 설치를 할 수 있는데, Crashlytics가 제대로 설치되어 있는지를 확인합니다. 다른 필요 없는 것들은 타겟을 해제해 주세요. 그리고 Add Package를 통해서 설치합니다. (저는 귀찮아서 일단 모두 설치)

 

import FirebaseCore

 

 AppDelegate로 이동하여 FirebaseCoreimport 해줍니다.

 

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    FirebaseApp.configure()

    return true
}

 그리고 didFinishLaunchingWithOptionsFirebaseApp.configure()를 작성합니다. 

 

 이제 프로젝트타겟으로 이동하여 Build Phases 화면으로 이동합니다.

 

 

 그리고 작은 '+' 버튼을 눌러서 New Run Script Phase를 선택해 주세요. 

 

생성 모습
이름 변경

New Run Script Phase를 누르면 새로운 Script가 생성됩니다. 이름을 더블 클릭하면 원하는 이름으로 변경할 수 있습니다. 저는 이름을 Run Script에서 알아보기 쉽게 Google Crashlytics로 수정하였습니다.

 

구글 설명

생성한 Script는 항상 맨 아래 있어야 합니다! Script를 누른 상태로 마우스로 드래그하면 이동합니다.

"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"

 이제 생성한 Script를 펼치면 다양한 설정들이 나옵니다. 제일 먼저 위 스크립트를 사진처럼 입력해 주세요. 붙여 넣기 하시는 게 편할 겁니다. 

 

# Type a script or drag a script file from your workspace to insert its path.

 

추가전 모습

 그리고 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)

 한 줄마다 하나씩 추가해서 총 5개를 추가해 주면 됩니다. 보시면 경로들이 나와있기 때문에 파이어베이스가 동작 안 할 땐 이런 설정들을 한 번씩 확인해 주세요.

 

그리고 이제 다시 프로젝트 - 타겟 - Build Settings - 'debug information format' 검색을 해주세요. 

(검색하실 땐 All이 선택되어 있는지 확인해 주세요.)

 

 그럼 검색 내용으로 이런 결과가 나옵니다. 

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

 

 이제 준비는 모두 끝났습니다. 테스트 코드를 통해서 실험을 진행합니다. 

 

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // 버튼 생성
        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]
    }
}

테스트 코는 이렇게 간단하게 작성합니다. 버튼을 하나 생성하고 버튼을 누르면 에러를 발생시키는 코드입니다. 이제 앱을 실행합니다. 

 

 앱을 실행하고 파이어베이스가 잘 연결되어 있다면 '앱이 감지되었으며 비정상 종료를 기다리는 중입니다.'라는 메시지가 출력됩니다. 

 

 위에 설명대로 앱을 빌드하고 Xcode와 연결을 끊어 주세요. 그래야 기록이 된다고 합니다. 

 

만약 안된다면??

1. Xcode로 빌드하고 앱을 껐다 켜던 선을 뽑던 하세요. Build 후 첫 상태에서는 기록이 되지 않습니다.

2. 앱이 크래시 나고 다음에 실행될 때 기록이 됩니다. 크래시 나자마자 되는 건 아닙니다. 

3. GoogleService-Info.plist가 우리가 input Files에서 설정한 위치에 있는지 확인해 주세요. 

4. GoogleService-Info.plist의 이름을 다르게 변경하신 건지 확인해 주세요.

5. 구글 서비스가 제대로 동작하고 있는지 확인하세요. 가끔 서버가 문제가 생기는 경우가 있습니다.

 

 

결과

Crashlytics 대시보드

종합적인 에러 발생과 리스트가 표시됩니다. 

Crashlytics 에러를 선택했을 때 

에러 내용을 좀 더 상세하게 확인할 수 있습니다.

반응형