[iOS] Crashlytics 적용
비정상 종료(앱 충돌)를 추적하기 위한 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