LoginSignup
0
0

【iOS】Crashlyticsに自作Frameworkのログも出したい

Posted at

やりたいこと

Firebase Crashlyticsを使えば、アプリのどこでクラッシュしたかは一目瞭然。
しかし、アプリの中のFrameworkの中でクラッシュした場合は、その限りではなくなる。

通常のCrashlytics

image.png
ViewControllerの23行目で落ちてる事がわかる

FrameworkでクラッシュしたCrashlytics

image.png
TestFrameworkのsample()でクラッシュしてることはなんとなく読み取れるが、よくわからない

どうしたらいいか

Frameworkのスタックトレースを見る場合は、FrameworkのdSYMファイルもアップロードする必要がある。
【参考】
https://firebase.google.com/docs/ios/installation-methods?hl=ja

手順

1. FrameworkのBuildSettingsからDebug Information Formatを探し、任意のビルドタイプで「DWARF with dSYM File」に変更する

image.png

2. 設定変更後、FrameworkをビルドするとdSYMファイルも同時にできるので、できたFrameworkとdSYMをアプリ側プロジェクトの任意の場所に設置する

image.png
image.png

3. Build Phasesに新しいRun Scriptを登録する

※ SPMの手順だが、CocoapodsやCarthageでもupload-symbolsのパスさえ分かれば同様にできる

run.sh
"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/upload-symbols" 
-gsp "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleService-Info.plist" 
-p ios "${SRCROOT}/${PROJECT}/Test1Framework.framework.dSYM(フレームワークのdSYMファイルパス)"

4. Input Filesに以下の4件を追加

$(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
$(SRCROOT)/$(PROJECT)/Test1Framework.framework.dSYM(フレームワークのdSYMファイルパス)
$(SRCROOT)/$(PROJECT)/Test1Framework.framework.dSYM(フレームワークのdSYMファイルパス)/Contents/Info.plist
$(SRCROOT)/$(PROJECT)/Test1Framework.framework.dSYM(フレームワークのdSYMファイルパス)/Contents/Resources/DWARF/Test1Framework(フレームワーク名)

5. クラッシュさせてみる

image.png

image.png
クラッシュさせて確認するとFramework内のどこで発生したか追うことができる

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0