こんにちは。iOSエンジニアのキムです。今回はアプリのクラッシュに関する内容になります。
アプリが良い評価をされるためには動作の安定性が必要不可欠です。コンテンツの内容やデザインなども大事ですが、アプリの動作が不安定でよくクラッシュしたりすると、そのアプリは使われなくなリます。そのため、エンジニアたちはアプリの安定性をモニタリングし、安定性の向上のために絶えずに取り組みを行っています。
アプリの品質を低下させるクラッシュですが、クラッシュログを生のデータのままで解析するのはほぼ不可能です。そのため、dSYM(デバッグシンボル)ファイルというのが必要になります。dSYMファイルを用いてシンボル化(Symbolicate)することで、解析可能なスタックトレースへと復元することができるようになります。
クラッシュレポートツール(Firebase Crashlyticsなど)を使うと、dSYMファイルを自動的にアップロードしてくれるとかクラッシュしたデバイスの情報などの追跡もできるので、クラッシュの原因を調査する時間も節約できます。
背景
以前Firebase Crashlyticsでクラッシュログを調べる際に「Missing dSYM」というアラートが表示されて、クラッシュログが正常に表示されないことがありました。
調べると、アプリのBitcode設定を有効にしていたのが原因でした。アプリのBitcode設定を有効にしてAppleに送信すると、Appleによって特定のデバイスとアーキテクチャ向けに再コンパイルされ、dSYMファイルも新しく生成されるので、それをAppleから手動でダウンロードして、Firebase Crashlyticsにアップロードする必要がありました。
しかし、新しく生成されたdSYMファイルは数十個もありましたし、それを毎回アップロードするのはなかなか手間がかかる作業でした。
今回はそのdSYMファイルをfastlaneを利用して自動でアップロードする方法について紹介したいと思います。
*ちなみに、dSYMファイルはXcodeのOrganizerのDownload Debug Symbolsからもダウンロードできます。
準備
Firebase Crashlyticsやfastlaneについてある程度の知識があることを前提で話します。
処理内容
fastlaneでdSYMアップロード用のlaneを作ってみます。
lane : refresh_dsyms do |options| # バージョンの指定がなければ、最新バージョンのdSYMファイルをダウンロードする version = options[:version] || 'latest' download_dsyms( version: version ) # dSYMファイルをcrashlyticsにアップロードする upload_symbols_to_crashlytics # ローカルのdSYMファイルを削除する clean_build_artifacts end
利用方法
fastlane refresh_dsyms version:1.0.0
結果
上記のlaneを実行すると、dSYMファイルをAppleからダウンロードして、crashlyticsにアップロードしてくれます。
fastlaneのdocumentを見るともっと詳しい使い方が書いてあります。
最後に
これでクラッシュログも正常に表示されるようになりました。 これからはクラッシュログを解析して、どのクラッシュから解決するかの優先順位を決めて、一つずつ再現させながら対応するだけですね。