[Flutter] Crashlytics : Error recording on-demand exception
파이어베이스 Crashlytics iOS 적용간 발생한 에러를 포스팅하고자합니다~
https://pub.dev/packages/firebase_crashlytics
firebase_crashlytics | Flutter package
Flutter plugin for Firebase Crashlytics. It reports uncaught errors to the Firebase console.
pub.dev
문서대로 완료 후 Crashlytics 에러 전송이 정상적으로 이루어지는 확인했습니다
문제는 iOS에서 5분이 지나도 에러 리포트 생성이 되지 않는것이였습니다 (Android는 정상적으로 전송됨)
비정상종료 테스트를 실시했습니다
- Xcode에서 Product(제품) > Scheme(스키마) > Edit scheme(스키마 수정)을 선택합니다.
- 왼쪽 메뉴에서 Run(실행)을 선택한 다음 Arguments(인수) 탭을 선택합니다.
- Arguments Passed on Launch(실행 시 인수 전달) 섹션에 -FIRDebugEnabled를 추가합니다.
위 설정을 완료하고 의도적으로 Crash를 생성했습니다
11.15.0 - [FirebaseCrashlytics][I-CLS000000] Error recording on-demand exception
원인을 몰라도 exception으로 인해 전송이 안되는것을 파악했습니다
결과부터 공유드리자면, Crashlytics 디렉토리에 로그를 쌓고 그것을 전송하는 방식인데,
디렉토리를 지우는 코드때문에 발생한 것이였습니다.
main함수에서 실행한 코드를 수정해서 완료했습니다.
var cacheDir = await getTemporaryDirectory();
if (cacheDir.existsSync()) {
cacheDir.deleteSync(recursive: true);
}
<이전>
if (await cacheDir.exists()) {
await for (var entity in cacheDir.list(recursive: false)) {
// Crashlytics 폴더는 건너뜀
if (entity.path.contains('com.crashlytics')) continue;
await entity.delete(recursive: true);
}
}
<이후>
Crashlytics 디렉토리는 삭제되지 않도록 처리를 했으며, 정상적으로 로그가 전송되었습니다
Error recording on-demand exception가 발생한 경우에는 디렉토리가 생성되지 않았거나 제거된 것이 아닌지 파악이 필요해 보입니다!
이외에 dSYM 누락이나, Crashlytics 버전, googleservice-info.plist 파일 등을 전반적으로 확인하면서 시간을 버리긴 했지만
다른분들은 포스팅을 읽고 시간을 절약하셨으면 좋겠습니다!