관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Firebase Crashlytics 로그 사용 방법, Crashlytics.crashlytics().log(format:arguments:) 본문

iOS 응용 (swift)

[iOS - swift] Firebase Crashlytics 로그 사용 방법, Crashlytics.crashlytics().log(format:arguments:)

jake-kim 2023. 4. 24. 01:37

Crashlytics 로그란?

  • Firebase에서 크래시 전송 설정을 하면 (Firebase Crashlytics와 dsym 파일 전송), 크래시가 발생한 경우 크래시를 정보를 파이어 베이스에 전송
  • 기본적인 크래시 정보를 Crashlytics에 보내지만, 크래시가 발생하기 전의 특정한 정보를 알고싶은 경우 로그 전송이 가능

Crashlytics 설정

  • 기본적인 Crashlytics 설정은 이전 포스팅 글 참고
  • dsymbol은 Release환경에서만 보내도록 설정했으므로 테스트를 위해 Xcode 스킴에서 Build Configuration을 Release로 변경하고 Debug executable 체크를 해제

  • 아래와 같은 코드를 준비하고 크래시를 발생시켰을때 파이어베이스에 crash 정보가 나왔으면 준비 완료
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("Crash", for: [])
        button.addTarget(self, action: #selector(crashButtonTapped(_:)), for: .touchUpInside)
        view.addSubview(button)
    }

    @IBAction func crashButtonTapped(_ sender: AnyObject) {
        let numbers = [0]
        let _ = numbers[1]
    }

}

크래시 정보 확인

Crashlytics 로그 사용 방법

  • 따로 크래시 로그를 보내지 않으면 아래처럼 스택 추적만 확인이 가능

  • 크래시 로그는 위 사진에서 스택추적 오른쪽 탭에 로그부분에 정보를 넘기는 것

  • 로그를 전송하려면 Crashlytics.crashlytics().log(format:arguments:)를 사용 
    • 주의할점: arguments타입도 CustomStringConvertible 속성을 따르지 않으면 런타임 시점에 크래시가 발생 (debug모드에서는 크래시 발생하지 않으므로 매우 주의)

  • String은 CustomStringConvertible을 준수하고 있으므로 인덱스 정보를 String 타입으로 변환하여 전송
@IBAction func crashButtonTapped(_ sender: AnyObject) {
    let ind1 = 0
    let ind2 = 1
    
    // arguments 타입
    Crashlytics.crashlytics().log(format: "index1: %@, index2: %@", arguments: getVaList([ind1, ind2].map(String.init)))
    
    let numbers = [0]
    let _ = numbers[1]
}
  • 다시 크래시를 발생시키고 콘솔을 확인해보면 전송한 인덱스 관련 로그도 확인이 가능

* 전체 코드: https://github.com/JK0369/ExCrashLog

* 참고

https://firebase.google.com/docs/crashlytics/customize-crash-reports?hl=ko&platform=ios 

 

Comments