「dSYM の欠損」に対応する | iOS | Flutter 3.29.0 | Crashlytics | Firebase

セルフプレジャー(自慰行為)を記録&管理するアプリ『アイナーノ』の Ver.7.0.0 で「Firebase Crashlytics」に対応したのですが、リリース直後に「dSYM の欠損」というメールが Google (Firebase) から届きました。

内容は以下の通りで「不足している dSYM」「バージョン 7.0.0 (42) で不足している dSYM が Crashlytics で検出されました」と記載されています。

そして、メール内の「dSYM をアップロード」ボタンをクリックして表示された画面には、以下が掲載されています。

リリースしたアプリに問題が?

実は「Firebase Crashlytics」に対応した際、その全容を理解していませんでした。

結論…「dSYM の欠損」は、リリースしたアプリには影響がなく、何らかの不具合が発生している、という警告ではありません。アプリを利用するユーザには関係がありません。

これは、アプリ内で何らかのエラーが発生して、それが Crashlytics に登録された際に、その詳細を解析できない・把握できない、という警告です。

アプリを運営していく上でエラー解析は必須なので、無視できません。要対応です。 

「dSYM」とは?

dSYM は「Debug Symbol File」の略です。

このファイルは、iOS アプリのデバッグやクラッシュ レポートの解析に使用されます。アプリをビルドする際に生成されるもので、シンボル情報(関数名、行番号、変数名など)を保持しています。

これを処理して、難読なクラッシュログを人間が理解できる形式に変換します。

「dSYM」はどこ?

ビルド時に生成された dSYM が何処に格納されているのか分からないので「dSYM ファイルが見つからない場合 方法」を参照します。以下のページが表示されます。

Crashlytics ダッシュボードで読み取り可能なクラッシュ レポートを取得する
https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?hl=ja&platform=ios

まず、冒頭で気になった記載があります。

通常、この動作はアプリの Crashlytics の初期設定時に構成します。具体的には、アプリのビルドフェーズで dSYM ファイルを自動的にアップロードする実行スクリプトを追加して構成します。

つまり、初期 Crashlytics 導入時に、dSYM 自動アップロードのスクリプトを Xcode に組み込む必要があったのです。

はい…そうしていないのは仕方がないので、今は既に生成された dSYM を探します。

ローカルマシン上で dSYM を見つける
https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?hl=ja&platform=ios#locate

上記参照では、コマンドを実行して dSYM を検索する方法が紹介されていますが、後述されている Xcode 上からダウンロードする方法が直感的で分かりやすく簡単です。

ただ、迷った操作があるので、以下に少し補足します。

  1. Xcode で [Organizer] ウィンドウを開いて、リストからアプリを選択します。Xcode に、プロジェクトのアーカイブのリストが表示されます。
    (補足)Xcode の [Window] に [Organizer] があります。
  2. Ctrl キーを押しながらアーカイブをクリックして、Finder に表示します。もう一度 Ctrl キーを押しながらクリックし、[Show Package Contents] をクリックします。
    (補足)Runner ~ .xcarchive ファイルに対して [パッケージの内容を表示] を選択します。
  3. .xcarchive 内にある dSYMs ディレクトリには、Xcode のアーカイブ プロセスの一環として生成された dSYM が格納されています。
    (補足)dSYMs という名前のディレクトリを丸ごと ZIP 圧縮します。

こうして得た dSYM .zip ファイルを、Firebase 画面でアップロードします。

これで完了です。

以下のように「アップロード済み」になって、クラッシュ レポートが読めるようになりました。

所感

ChatGPTDeepSeek に本件を尋ねてみると、概ね正しい対処方法を教えてくれたので、Firebase の公式ドキュメントと併せて確認すると理解が早いと思います。

コメント