현재 진행 중인 프로젝트 Pochak에 Firebase Crashlytics를 적용하려 한다. 배포가 됐기 때문에 애플 개발자 계정에서 분석을 통해 크래시를 볼 수 있지만, 자세한 이유는 볼 수 없기 때문에 꼭 넣어야겠다고 생각했다!
이건 이미 했다고 치고...!
파이어베이스 가입하면서 받은 plist를 프로젝트에 넣어줍니다. 이 파일은 공개되지 않는게 좋기 때문에 추가한 뒤 .gitignore에 파일을 추가해서 깃에 올라가지 않게 해줬다. 파일은 팀 노션에 추가해둬서 팀원들이 각자 본인 로컬에서 올려놓을 수 있도록 했다! (배포할 때 어케 해야하지? ㅎ)
처음 연동할 당시에는 잘 모르고 Podfile에 Anaylitics만 추가해뒀었다. Podfile을 사용한다면, Podfile에 Crashlytics도 추가해준다.
target 'pochak' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
..생략..
# firebase
pod 'FirebaseAnalytics'
pod 'FirebaseCrashlytics' # 추가한 부분
# Pods for pochak
..생략..
end
Podfile 수정 후 pod install --repo-update 로 추가된 부분에 대한 의존성을 불러올 수 있다. (이미 podfile이 존재하는 경우만)
AppDelegate에서 Firebase 를 실행해준다. (처음 Firebase 연동하는 경우)
import FirebaseCore
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// 앱이 시작될 때 Firebase 연동
FirebaseApp.configure()
}
dSYM이란 debug symbol file의 약자로, 해당 앱의 디버그 기호, 정보를 저장한다. 크래시가 발견했을 때 이 파일을 파이어베이스로 보내주기 위해 설정을 변경해야 한다.
좌측의 내비게이터에서 프로젝트 파일 선택
TARGETS에서 기본 빌드 대상 선택(프로젝트명으로만 된 빌드)
Build Settings 선택 → All → Build Options 메뉴의 'debug information format'
아래처럼 DWARF with dSYM File로 설정

그 다음, Build Settings 옆에 있는 Build Phases로 이동
+ 버튼 → 'New Run Script Phase' 클릭 → 'Run Script' 생성됨
펼친 다음에 다음과 같이 적기

Shell에는
"${PODS_ROOT}/FirebaseCrashlytics/run"
위 스크립트는 dSYM 파일을 처리하고, Crashlytics에 파일을 업로드하는 역할을 한다.
Input Files에는 (한 줄씩)
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
첫번째 줄은 프로젝트의 dSYM파일에 경로를 추가하고 Crashlytics에서 대용량 앱의 dSYM을 더 빠르게 처리할 수 있게 해주는 역할을 한다고 한다.
두번째 줄을 통해 Info.plist 파일에 경로를 추가하고, Crashlytics에서 앱 버전을 dSYM과 연결할 수 있다고 한다.
(뭐.. 좋은게 좋은거니까 ㅎ)
제일 상단 바에서 Product > Scheme > Edit Scheme 선택

Run > Arguments > 'Arguments Passed On Launch'에 '-FIRDebugEnabled' 를 추가해준다.

이는 Firebase Debug 모드를 활성화하는 설정이라는데.. 언제 쓸지는 잘 모르겠다. 일단 추가해두면 나중에 필요한 때가 오지 않을까? ㅎㅎ
강제로 크래시를 내서 잘 작동하는지 테스트해 볼 수 있다.
Firebase Crashlytics 시작하기
위 링크에서 Firebase 공식 페이지에서 제공하는 강제 크래시 내는 코드를 작성해도 되고, 이미 있는 코드에서 크래시를 내도 된다.
나 같은 경우는 앱이 실행되고 처음 나오는 탭이 컬렉션뷰인데, 셀을 클릭했을 때 크래시가 나도록 didSelectItemAt에서 fatalError()를 첫번째 줄에 써주었다.
강제 크래시 내는 코드를 작성하고, Xcode를 실행해서 크래시를 낸 후, 다시 시뮬레이터에서 앱을 실행시켜서(Xcode 실행 아님!!) 크래시 내는 동작을 해준다. 그 다음, 다시 Xcode를 실행시켜야 dSYM 파일이 Crashlytics로 업로드된다!!!!! (업로드 되는 데에 시간이 좀 걸림)
이걸 몰라서.. 아니 크래시 냈는데 왜 안돼?!?!?!?! 하고 crashlytics 페이지만 무한 새로고침했다......,,,, 아오
초기 세팅 때는 이렇게 해주어야 하는 것 같다.

그럼 이렇게 크래시 리포트를 받을 수 있다!!!!!! 아싸리~
iOS-Firebase-Crashlytics-설정하기
앱에 Firebase Crashlytics 추가(Swift)