[Firebase][iOS] Firebase CrashlyticsにdSYMをアップロードしたい!
こんにちは。きんくまです。
今回はFirebase版のCrashlyticsにdSYMをアップロードします。(Fabric版ではないです)
CrashlyticsといえばdSYMです。これがうまく連携されていないと、管理画面でうまくエラーが表示されなかったりします。
なので、ハマりどころをチェックしながらアップロードできるようにします。
Debug Information FormatをDWARF with dSYM Fileにする
XcodeのBuild Settings > Build Options > Debug Information Formatを DWARF with dSYM File
にします。
Configurationごとに別の設定の場合もあると思います。
開発用は DWARF
だとしても、AdHocやEnterprise、App Store Connect用の書き出しは DWARF with dSYM File
になるようにします。
アプリ書き出し時の注意
Ad HocやEnterpriseをFirebase App Distributionなどのアプリ配信サービスで使う場合
Archiveしてから書き出し時にbitcodeをオフにします。最初結構ハマりました、、。
bitcodeをオフにして書き出せばdSYMが同梱されたままipaが書き出されます。そのため、これをFirebase App Distributionなどにアップロードすれば、あとは何もしなくても、Crashlytics管理画面でエラーが表示できるようになります。
App Store Connect(アプリ申請時)用
アプリ申請時にはbitcodeをオンにします。
この状態で、バイナリをApp Store Connectにアップロードします。
App Store ConnectのときのdSYMのアップロード
dSYMのダウンロード
前の手順で書いたように、bitcodeをオンにしてストアにアップロードまでします。
ストアのProcessingが終わると、dSYMをダウンロードできるようになっています。
Activity > All Builds > Version
ダウンロードリンクがあります。
dSYMのzipファイルをダウンロードします。
upload-symbolsコマンドでアップロード
コマンドの場所
CocoaPodsの場合
Pods/FirebaseCrashlytics/upload-symbols
Carthageの場合
Carthage版は直接コマンドのバイナリファイルをダウンロードします。
以下のページの中に upload-symbols のリンクがあります。
https://github.com/firebase/firebase-ios-sdk/blob/master/Carthage.md
以下は直リンクなので、パスが変わることもあると思われ。
upload-symbols
スクリプトファイル作った
あとは、upload-symbolsを使ってアップロードすれば大丈夫です。
毎回コマンドを入力するのが面倒なので、スクリプトを作りました。良かったら使ってみてください。
全てフルパスで指定してください
upload_dsyms.sh
#!/bin/sh # CrashlyticsにdSYMsをアップロードする # upload-symbolsの場所 UPLOAD_SYMBOLS="/path/to/upload-symbols" # GoogleService-Infoファイルを指定する(ファイル名はなんでもOK。ここでは本番用に設定したファイル名にしてます) GOOGLE_SERVICE_INFO_PLIST="/path/to/GoogleService-Info-PRD.plist" # App Store ConnectからDownloadしたdSYMフォルダのパスを指定する。(zipファイルから解凍するとappDsymsフォルダができる) DSYMS="/path/to/appDsyms" "$UPLOAD_SYMBOLS" -gsp "$GOOGLE_SERVICE_INFO_PLIST" -p ios "$DSYMS"
うまくアップロードできれば、Crashlyticsの管理画面で確認できるようになっていると思います。
ではでは。
余談
bitcodeをオンにすると、中間ファイルが作成されます。
その状態でApp Store Connectにアップロードされると、ストアで各デバイスごとに最適化されたバイナリが改めて書き出されます。
その書き出し時に、dSYMも書き出される。
FirebaseApp Distributionなどの配信サービス用にbitcodeをオフにした場合は、中間ファイルが生成されないので、そのままdSYMつきのバイナリができるということかなと思ってマス。
LLVM bitcode基礎知識
CPUがARMに変わればアプリも変わる -- 「もうひとつのユニバーサル」について考える