RORK LABEN
EVENT — 本日9月9日、Apple が「Surprise and Shine」と題したイベントを開きます。日本時間では9月10日の未明2時からですEXPECT — iPhone 18 Pro と Pro Max、折りたたみ機、2nm プロセスの A20 Pro チップ、そして iOS 27 以下の配信日発表が見込まれていますWAIT — この記事を書いている時点ではまだ開催前です。噂の段階で書いたものと発表後に書いたものが混ざると、読む側には区別がつきませんMAX — Rork Max がネイティブ Swift を生成する以上、Apple の動きは他人事ではありません。標準の Rork は React Native、という線引きは繰り返し確認したいところですSIMULATOR — Rork Max はクラウド上の Mac でコンパイルし、ブラウザ内で動くストリーミングの iOS シミュレータで確認できます。Xcode も Mac の実機も要りませんSEASON — OS が新しくなる時期は、自動生成の足場がいちばん揺れます。便利さを謳う記事ほど、この揺れに触れないと不誠実になると感じていますEVENT — 本日9月9日、Apple が「Surprise and Shine」と題したイベントを開きます。日本時間では9月10日の未明2時からですEXPECT — iPhone 18 Pro と Pro Max、折りたたみ機、2nm プロセスの A20 Pro チップ、そして iOS 27 以下の配信日発表が見込まれていますWAIT — この記事を書いている時点ではまだ開催前です。噂の段階で書いたものと発表後に書いたものが混ざると、読む側には区別がつきませんMAX — Rork Max がネイティブ Swift を生成する以上、Apple の動きは他人事ではありません。標準の Rork は React Native、という線引きは繰り返し確認したいところですSIMULATOR — Rork Max はクラウド上の Mac でコンパイルし、ブラウザ内で動くストリーミングの iOS シミュレータで確認できます。Xcode も Mac の実機も要りませんSEASON — OS が新しくなる時期は、自動生成の足場がいちばん揺れます。便利さを謳う記事ほど、この揺れに触れないと不誠実になると感じています
記事一覧/開発ツール
開発ツール/2026-06-18上級

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

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

Crashlytics13Firebase10dSYM3GitHub Actions5クラッシュ解析3App DistributionReact Native236運用9

プレミアム記事

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/月 または ¥2,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-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます