【入門編】【iOS向け】CrashlyticsのdSYMファイル自動アップロード設定とよくある落とし穴 – 運用監視・オブザーバビリティ活用バイブル

こんにちは。オブザーバビリティの世界へようこそ。

アプリをリリースした直後、ユーザーの端末で「プツン」とアプリが落ちる。開発者にとって、これほど胃が痛くなる瞬間はありません。そんな時、Crashlyticsが送ってくる「意味不明な16進数の羅列」を見て絶望したことはありませんか?

あれは、「暗号化された設計図」です。それを解読するための鍵がdSYM(debug symbols)。今日は、この「鍵」を自動で管理し、障害の真相を一瞬で突き止めるための極意を伝授します。

—

1. なぜ「dSYM」が必要なのか?(本質を知る)

Xcodeでビルドされたバイナリは、アプリのサイズを小さくし、リバースエンジニアリングを防ぐために「最適化」されます。その結果、コード内の関数名や変数名は機械的な符号に置き換えられます。

Crashlyticsは、そのままでは「どこで落ちたか」を特定できません。そこで、「この符号は、ソースコードのこの行を指している」という対応表が必要になります。それがdSYMファイルです。

これを手動でアップロードするのは、現代のエンジニアがやるべき仕事ではありません。自動化しましょう。

—

2. 【必須】自動アップロードのセットアップ

Firebase Crashlyticsを導入したら、Xcodeの「Build Phases」に魔法のスクリプトを仕込みます。

手順:Run Scriptを追加する

1. Xcodeのプロジェクト設定を開く。
2. Build Phases タブを選択。
3. 左上の「+」ボタンから [New Run Script Phase] を追加。
4. 名前を「Crashlytics dSYM Upload」などに変更し、以下のスクリプトを貼り付けます。

FirebaseのdSYMアップロードスクリプト
${DWARF_DSYM_FOLDER_PATH} に生成されたdSYMをFirebaseへ送る役割を担う
“${BUILD_DIR%/Build/}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run”

※ここが重要:
プロジェクトの構成によってはパスが異なる場合があります。最も確実なのは、Firebase公式が提供している `run` スクリプトを直接プロジェクトのルートに配置し、そこから呼び出す方法です。

—

3. 「Bitcode廃止」という時代の転換点

かつて、iOS開発には「Bitcode」という仕組みがありました。これはAppleのサーバー側で最適化を再コンパイルする仕組みで、これにより「dSYMを自分でアップロードしなくてもAppleがやってくれる」という時代がありました。

しかし、現在はBitcodeが廃止されています。
つまり、「dSYMのアップロードは完全に自分たちの責任」になったということです。この変更により、自動アップロード設定が漏れていると、エラーレポートが「Unknown」の山になり、何が起きているか全くわからなくなります。今すぐ設定を確認してください。

—

4. よくある落とし穴とトラブルシューティング

「設定したのにアップロードされない」という時に見るべきチェックリストです。

  • Build Settingsの確認:
  • `Debug Information Format` が `DWARF with dSYM File` になっているか?(これがないとそもそもdSYMが生成されません)
  • Build Phasesの順序:
  • このスクリプトは、コンパイルが終わった後の「最後」に実行される必要があります。Build Phasesのリストの一番下に配置しましょう。
  • 権限の壁:
  • CI/CD(GitHub ActionsやBitriseなど)環境で動かす場合、Firebaseの認証トークンが必要です。`FIREBASE_TOKEN` 環境変数をシークレットに設定することを忘れないでください。

—

5. 精度高い「HelloWorld」的動作確認

設定が正しく機能しているか確認するには、「わざとアプリをクラッシュさせる」のが一番です。

// ボタンタップ時などに実行してみてください
fatalError(“Crashlyticsのテスト用クラッシュ”)

1. アプリを実機で起動し、上記を実行してクラッシュさせる。
2. 再度アプリを立ち上げ、Crashlyticsがログを送信するのを待つ。
3. Firebaseコンソールで、「メソッド名」まで表示されているか確認する。

もし、メソッド名が表示されず「Address 0x000…」のようにしか出ていないなら、dSYMが届いていません。その場合は、XcodeのOrganizerからdSYMを手動でダウンロードし、Firebaseコンソールへドラッグ&ドロップして補完してください。

—

先輩からのアドバイス

オブザーバビリティとは、「システムの中身がどうなっているか」を常に透かして見ることです。Crashlyticsを単なる「エラー通知ツール」として使うのはもったいない。

dSYMを自動化し、障害発生から数分で「原因コードの行番号」まで特定できる環境を整える。それができれば、あなたは「障害に怯えるエンジニア」から「障害を即座に鎮圧するアーキテクト」に進化できます。

毎日の「なぜ落ちたんだ…」という謎解きから解放され、もっと創造的なコードを書くことに集中しましょう。応援していますよ。

タイトルとURLをコピーしました