본문 바로가기
iOS

[Swift] Firebase Crashlytics 적용하기

by 워뇨옹2 2024. 9. 4.
728x90
반응형

도입이유

이번에 앱 업데이트를 하면서 총 12번의 리젝을 먹은 경험이 생겼다.

이유는 2.1 Performance - App Crash

 

내가 뭐 대충 빌드번호만 바꿔가면서 요청을 한것도 아니고, 디버그 하나씩 다 하면서, 기기도 돌려가면서, 지인 및 팀원 핸드폰 뺏어가면서 다 시험해보고 리뷰를 요청했는데도 12번의 리젝을 먹은거다.

 

그리고 11번째 이대로는 평생 못고치겠다 생각을 했고 리뷰 할 때 앱 크래쉬가 어떻게 발생하는지 알아봐야겠다 생각했고(참 일찍도 생각한다) Firebase Crashlytics를 적용해서 로그를 확인해보기로 했다.

Firebase Crashlytics

개요

일단 간단한 설명을 먼저 덧붙이자면, 앱 충돌이 발생하여 강제종료(Crash)가 발생했을 때, 에러 로그를 파이어베이스에서 확인할 수 있게 해주는 툴이다. 

Xcode 디버그 툴에서 볼 수 있는 Stack Trace(Thread별로)를 표시해주고, 어느 파일 어느 라인에서 문제가 발생했는지까지 볼 수 있다.

 

본문에서는 파이어베이스 설정은 모두 마쳤다는 가정하에 Crashlytics 설정 방법만 포스팅하도록 하겠다.

설정

기본적으로 파이어베이스 패키지를 추가하면 Crashlytics가 작동한다. 하지만 dSYM이라는 파일이 없으면 작동만 할 뿐 파이어베이스에서 에러 로그를 확인할 수 없다. 고로 우리는 dSYM 파일을 자동 업로드하기 위해 Xcode에서 간단한 설정을 해줘야한다.

 

먼저 프로젝트 타겟 파일로 들어가 Build Settings 탭에 들어가보자. 그리고 필터에 'Debug Information Format'을 검색하면 다음과 같은 화면이 나올텐데, 모든 설정이 하단 이미지와 같은지 확인후 다른게 있다면 올바르게 설정해주자.

 

다음으로 Build Phases탭으로 이동 후 +버튼을 눌러 New Run Script Phase를 선택해 새로운 Run Script를 추가해주자.

페이지를 펼친 뒤 다음과 같이 입력해주자.

스크립트(복사용)
"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"

Input Files에 들어갈 텍스트 2개(복사용)
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

여기서 잠깐!

현재 적어둔 설정은 SPM으로 firebase-ios-sdk를 추가했을 경우에 사용하는 스크립트이다.

만약 Pod으로 추가했을 경우 run script를 다음과 같이 적어주자.

Cocoa Pod인 경우 스크립트(복사용)
"${PODS_ROOT}/FirebaseCrashlytics/run"

 

마지막으로 디버깅 로깅을 설정해주면 모든 설정이 마무리 된다.

Product -> Scheme -> Edit Scheme을 클릭해 창을 열어주자.

위 이미지처럼 창을 열고 Arguments Passed On Launch에 -FIRDebugEnabled를 추가해주면 된다.

결론

이거 아니었으면 최소한 8번 이상 더 리젝을 먹었을지도 모른다. 또 한 번 설정해놓으니 어떤 종류의 크래시가 발생하더라도 파이어베이스에서 확인이 가능하니 가능한 모든 충돌 및 버그에 대응할 수 있는 자신감이 생긴다 (뿌듯)

 

여태까지 내 기기에서 나만 볼 수 있는 디버깅으로 모든 에러를 핸들링 하려고 했는데, 너무 무모한 생각이었다는 생각도 든다.

728x90
반응형

'iOS' 카테고리의 다른 글

[SwiftUI] GridView 만들기  (1) 2024.09.10
[SwiftUI] SafeArea height 구하기  (0) 2024.09.09
[Swift] String Localization  (0) 2024.07.09
[Xcode] iCloud Storage 사용하기  (0) 2024.06.26
[Xcode] entitlement 파일 만들기  (0) 2024.05.21