RORK LABEN
MAX — Rork Maxはネイティブ Swiftアプリを生成。iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDAR・Metalによる3D・ウィジェット・Dynamic Island・Live Activities・Siri Intents・HealthKitなど、ネイティブ機能を引き出せますRN — 標準のRorkはReact Native(Expo)でクロスプラットフォーム。素早く形にするならこちらが向いていますCHOICE — 手早さならReact Native版、Appleのハード/OS統合を活かすならRork Maxという棲み分けが現実的ですPRICE — Rorkは無料で開始でき有料は月$25から、Rork Maxは月$200ですFLOW — 作りたいアプリを平易な言葉で説明すると、ストアに配信できる動くコードが生成されますMAX — Rork Maxはネイティブ Swiftアプリを生成。iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDAR・Metalによる3D・ウィジェット・Dynamic Island・Live Activities・Siri Intents・HealthKitなど、ネイティブ機能を引き出せますRN — 標準のRorkはReact Native(Expo)でクロスプラットフォーム。素早く形にするならこちらが向いていますCHOICE — 手早さならReact Native版、Appleのハード/OS統合を活かすならRork Maxという棲み分けが現実的ですPRICE — Rorkは無料で開始でき有料は月$25から、Rork Maxは月$200ですFLOW — 作りたいアプリを平易な言葉で説明すると、ストアに配信できる動くコードが生成されます
記事一覧/開発ツール
開発ツール/2026-06-18上級

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

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

Crashlytics13Firebase10dSYM3GitHub Actions5クラッシュ解析2App DistributionReact Native162運用6

プレミアム記事

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 SwiftUI アプリのクラッシュログが読めない:dSYM アップロード設定の落とし穴
Rork Max で生成した SwiftUI アプリの Crashlytics でクラッシュが Unsymbolicated になる問題を解決します。dSYM ファイルの正しいアップロード設定と、個人開発アプリの改善実例を紹介します。
開発ツール2026-05-16
Rork Max 製 iOS アプリの Firebase CocoaPods を Swift Package Manager へ移行した実録——2026年10月の廃止前に対応した手順と3つの落とし穴
Firebase Apple SDK の CocoaPods 配信が2026年10月に停止します。Rork Max 製 iOS アプリ4本を Swift Package Manager へ移行した実体験をもとに、手順・落とし穴・Dropbox競合コピー問題の解決策を詳細に解説します。
開発ツール2026-06-01
Android Vitals の ANR 率が上がったとき — メインスレッドを止めない React Native 設計ノート
Rork で書き出した React Native アプリで Android Vitals の ANR 率がしきい値を超えたときの原因切り分けと、メインスレッドを塞がない実装・運用の記録です。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →