본문 바로가기
iOS

[iOS] Crashlytics 적용

by thoonk: 2023. 1. 3.
반응형

비정상 종료(앱 충돌)를 추적하기 위한 Firebase Crashlytics 적용하는 방법을 기록합니다.

 

1. Firebase Console

- 파이어베이스 콘솔에서 프로젝트 추가 및 다운로드 받은 GoogleService-info.plist 파일 프로젝트에 추가

 

2. 프로젝트 CocoaPod 설치 및 Crashlytics 추가

- 프로젝트 폴더 경로에서 Pod 생성

pod init

 

- Podfile에 아래 코드 추가

pod 'Firebase/Analytics'
pod 'Firebase/Crashlytics'

 

- Pod 설치

pod install

 

3. Firebase Configure

- AppDelegate 파일에 아래 코드처럼 추가

import FirebaseCore

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
	func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

		FirebaseApp.configure()
		return true
	}
}

 

4. dYSM 파일 업로드를 위한 빌드 설정

- 프로젝트 파일 선택 후 TARGETS 목록에서 빌드 선택 후 Build Settings 탭 선택

- 아래 이미지와 같이 DWARF with dSYM File 으로 변경

 

5. Build Phases 설정

- Build Settings 옆 Build Phases 탭 선택 → + 버튼 선택 후 New Run Script Phrase 선택 → 아래 코드 복붙

"${PODS_ROOT}/FirebaseCrashlytics/run"
    "${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist -p ios ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}

 

- 타겟을 여러 개로 생성하여 사용하거나 Debug, Statging, Release 등 구분해서(Build Variants) Google-Service-Info.plist 파일을 사용해야 할 때,

    1) plist 파일의 이름을 변경하여 프로젝트에 추가한다. (Google-Service-Info-Debug(Release).plist)

    2) TARGETS → Build Phases의 New Run Script Phrase 선택 (google service plist 환경설정용) 후 아래 코드 복붙

case "${CONFIGURATION}" in
    "Debug" )
    cp -r "$SRCROOT/${PROJECT_NAME}/App/Firebase/GoogleService-Info-Dev.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
    "Release" )
    cp -r "$SRCROOT/${PROJECT_NAME}/App/Firebase/GoogleService-Info-Release.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist" ;;
*)
;;
esac

    3) TARGETS → Build Phases의 New Run Script Phrase 선택 (Crasyhlytics 설정용) 후 아래 코드 복붙

"${PODS_ROOT}/FirebaseCrashlytics/run"
"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist -p ios ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}

 

6. Firebase 디버그 로깅 설정

- Product → Scheme → Edit Scheme 선택

- Run → Arguments에 ‘-FIRDebugEnabled’ 추가

 

7. 비정상 종료 테스트

- 아래 코드 작성 및 실행 → Firebase Console Crashlytics 확인 (5분 정도 소요될 수 있음.)

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]
  }
}

 

부족한 점 피드백해주시면 감사합니다 :)

 

Ref.

https://firebase.google.com/docs/crashlytics/get-started?hl=ko&authuser=0&platform=ios

https://hanulyun.medium.com/google-service-info-plist-파일-여러개-사용하기-ca6c67a7a9d2

https://ios-development.tistory.com/261

https://stackoverflow.com/questions/57006663/could-not-get-google-app-id-in-google-services-file-from-build-environment

 

반응형

'iOS' 카테고리의 다른 글

[iOS] Developer Mode  (0) 2024.03.12
[iOS] Carthage  (0) 2023.01.12
[iOS] Tag을 활용한 UIButton Action 처리  (0) 2022.10.28
[iOS] Custom Navigation Controller Pop Gesture Swift  (0) 2022.09.22
[iOS] 버튼 이미지가 표시되지 않는 이슈  (0) 2022.07.11

댓글