◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SONNET 4.5 — Claude API での提供終了は 11/30、残り27日。API 連携を足したアプリは移行先の確認を●SDK 58 — React Native 0.88 に更新されました。Android のリリース版で R8 が既定オンになり、iOS は SceneDelegate を生成します●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-06-18上級

Rorkアプリの本番クラッシュを「読める」レポートに変える — dSYM復元と文脈ログ、段階配布の実装メモ

Crashlyticsを入れたのにスタックトレースが読めない——dSYM/mapping復元、文脈を持たせるログ設計、App DistributionとGitHub Actionsの段階配布までを実装メモとしてまとめます。

Crashlytics14Firebase10dSYM3GitHub Actions5クラッシュ解析3App DistributionReact Native242運用10

✦ プレミアム記事

Crashlytics を導入した翌週、最初の本番クラッシュが届きました。意気込んでコンソールを開いたのですが、並んでいたのは __hermes_internal と <unknown> ばかりのスタックトレースで、どの画面のどの行で落ちたのかまったく分かりませんでした。ツールは正しく動いているのに、得られる情報がゼロに近い——この状態は、クラッシュ監視を入れたつもりで実は何も見えていない、いちばん危ない状態です。

開発ビルドでは普通に読めるのに、リリースビルドだけ読めなくなる。ここには明確な理由があります。やりたいことは三つです。まず「クラッシュレポートが読めない」を解消し、さらに一歩進んで「落ちる前に何が起きていたか」まで分かるレポートに変え、そして問題のあるビルドをテスターより広い層へ流さないための段階配布を組む。Rork で生成したアプリを前提に、実際に手を動かした順序で実装メモとして残します。

なぜリリースビルドのトレースは読めなくなるのか

原因は最適化です。リリースビルドでは、関数名や変数名が短い記号へ置き換えられ(ミニファイ)、ネイティブ側はシンボル情報がバイナリから剥がされます。Crashlytics が受け取るのは最適化後のアドレスだけなので、人間が読める名前へ戻す「シンボリケーション」のための地図ファイルが別途必要になります。

地図ファイルは三層に分かれています。JavaScript 層は Metro が出力するソースマップ、iOS のネイティブ層は dSYM、Android のネイティブ層と R8 による難読化は mapping ファイル。Rork が生成するのは React Native アプリなので、Hermes エンジンを使う場合は Hermes のソースマップも絡みます。どれか一つでも欠けると、その層のトレースが <unknown> になります。読めないクラッシュの大半は、この地図がアップロードされていないことが原因です。

iOS:dSYM を取りこぼさずアップロードする

EAS Build で生成した .ipa には dSYM が含まれますが、ビルドが終わっただけでは Crashlytics には届きません。アップロードを明示的に行う必要があります。Bitcode を無効化(現在は既定で無効)した上で、ビルド後に upload-symbols を走らせるのが確実です。

# Firebase の upload-symbols を取得(@react-native-firebase/crashlytics に同梱)
SYMBOLS="node_modules/@react-native-firebase/crashlytics/ios/upload-symbols"
 
# EAS のアーティファクトから dSYM を展開してアップロード
unzip -o build.ipa -d ./ipa_extracted
"$SYMBOLS" -gsp ./GoogleService-Info.plist -p ios \
  "$(find ./ipa_extracted -name '*.dSYM' -print -quit)"

Hermes を使っている場合、JS のスタックは Hermes バイトコードのアドレスとして現れます。これは dSYM ではなく compose-source-maps で結合したソースマップが必要です。react-native-xcode.sh がリリースビルド時に main.jsbundle.map を出力しているので、それを Crashlytics 用のソースマップアップローダに渡します。ここを忘れると、ネイティブは読めるのに JS 行だけ不明、という中途半端な状態になります。私自身、最初はここで半日溶かしました。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦リリースビルドのスタックトレースが <unknown> になる原因と、dSYM/R8 mapping を確実にアップロードする手順
✦クラッシュに「直前に何をしていたか」を持たせる custom keys・breadcrumb・非致命エラー記録の実装
✦crash-free レートをしきい値にした App Distribution × GitHub Actions の段階配布パイプライン
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 開発ツール2026-05-16
Rork Max 製 iOS アプリの Firebase CocoaPods を Swift Package Manager へ移行した実録——2026年10月の配信停止を前に対応した手順と3つの落とし穴
Firebase は2026年10月に Apple SDK の新バージョンを CocoaPods へ公開しなくなります(12 が最後のメジャー)。Rork Max 製 iOS アプリ4本を Swift Package Manager へ移行した実体験をもとに、手順・落とし穴・Dropbox競合コピー問題の解決策を詳細に解説します。
⬡ 開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
⬡ 開発ツール2026-05-19
Firebase App Check を Rork に段階的に enforcement する — AdMob 不正検知と Crashlytics を壊さない実運用設計
Firebase App Check を本番投入したいが Crashlytics や AdMob を壊したくない、という個人開発者向けに、Rork から DeviceCheck と Play Integrity を段階的に有効化する設計とロールバック手順をまとめます。