RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-05-16中級

Rork Max SwiftUI アプリのクラッシュログが読めない:dSYM アップロード設定の落とし穴

Rork Max で生成した SwiftUI アプリの Crashlytics でクラッシュが Unsymbolicated になる問題を解決します。dSYM ファイルの正しいアップロード設定と、個人開発アプリの改善実例を紹介します。

Crashlytics13dSYM3SwiftUI63Rork Max229Firebase10クラッシュ調査デバッグ22

Relaxing Healing の iOS アップデートを準備していたとき、Firebase Crashlytics のダッシュボードを見て困惑しました。クラッシュレポートが全て「Unsymbolicated」になっていて、関数名の代わりに 0x0000000100234a40 のような16進数アドレスが並んでいました。エラーが出ているのは分かる。でも何が起きているのかが、全く読めない状態です。

累計5,000万DL超のアプリ群を個人で運営してきた中で、クラッシュ調査のつまずきポイントはいくつかパターンがあります。その中でも「ログは届いているのに読めない」というこの状態は、Rork Max で SwiftUI 開発を始めたばかりの方が特に陥りやすいと感じています。

Unsymbolicated クラッシュとは何か

アプリが本番環境でクラッシュすると、iOS はスタックトレース(どの処理順でエラーが起きたか)を記録します。ただし、その記録は元々「機械が読む形式」 — つまり関数名ではなくメモリアドレスで書かれています。

この生のアドレスを人間が読める関数名に変換する処理を「Symbolication(シンボリケーション)」といいます。この変換に必要なのが dSYM ファイルです。dSYM ファイルにはアドレスと関数名のマッピングが格納されており、Crashlytics がこれを使ってログを翻訳してくれます。

dSYM が Crashlytics に届いていないと、ログは届いても読めない状態になります。

原因:ビルド設定とアップロードスクリプトの抜け

Rork Max で生成したプロジェクトは、Xcode のビルド設定がデフォルトのままになっていることがあります。この状態だと以下の2点が機能しておらず、dSYM が生成・アップロードされません。

問題1: Debug Information Format の設定不足

Xcode の Release ビルドで DWARF が選択されていると、dSYM ファイル自体が生成されません。DWARF with dSYM File に変更する必要があります。

問題2: dSYM アップロードスクリプトが未設定

Firebase Crashlytics SDK は、ビルド完了時に自動で dSYM ファイルを Crashlytics のサーバーにアップロードするスクリプトを提供しています。このスクリプトがビルドフェーズに追加されていないと、dSYM は生成されても届きません。

修正手順:Xcode の Debug Information Format を変更する

まず Xcode でプロジェクトを開き、ターゲットの Build Settings を確認します。

  1. プロジェクトナビゲーターでターゲット名を選択
  2. 「Build Settings」タブを開く
  3. 検索欄に「Debug Information Format」と入力
  4. Release の値が DWARF になっていたら、DWARF with dSYM File に変更
// 変更前(dSYMが生成されない)
Debug Information Format (Release): DWARF

// 変更後(dSYMが正しく生成される)
Debug Information Format (Release): DWARF with dSYM File

Debug ビルドは DWARF のままで問題ありません。Release のみを変更します。

修正手順:dSYM アップロードスクリプトを Build Phase に追加する

次に、Crashlytics への自動アップロードスクリプトを設定します。

  1. Xcode でターゲットの「Build Phases」タブを開く
  2. 左上の「+」ボタンをクリックし「New Run Script Phase」を選択
  3. 以下のスクリプトを貼り付ける

CocoaPods を使っている場合:

# Firebase Crashlytics dSYM 自動アップロード
"${PODS_ROOT}/FirebaseCrashlytics/run"

Swift Package Manager(SPM)を使っている場合:

# SPM 経由の場合(パスが異なる)
"${BUILD_DIR%Build/*}SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"

Input Files に以下を追加することも推奨されています(アップロードの確実性が上がります):

${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)

スクリプトを「Link Binary with Libraries」フェーズの後に配置することを確認してください。

Rork Max プロジェクト特有の注意点

Rork Max が生成したプロジェクトでは、Firebase を追加する際に CocoaPods と SPM のどちらを使うかで対応が変わります。2026年以降は CocoaPods の配信が停止される予定のため、SPM での設定を推奨します。

2026年5月時点で私が Relaxing Healing に対して実施した手順は SPM 版です。CocoaPods を使っているプロジェクトでは、まず SPM 移行を行ってからスクリプトのパスを更新するとスムーズです。

また、Rork Max が生成するコードには Xcode Cloud や EAS Build など CI/CD 経由でのビルドが前提になっているケースもあります。CI 環境でもこのスクリプトが実行されるよう、ビルド構成が Release になっているかを確認してください。

# EAS Build 設定の確認ポイント
# eas.json の production プロファイルが release ビルドであることを確認
{
  "build": {
    "production": {
      "ios": {
        "buildConfiguration": "Release"  // ここが Release であること
      }
    }
  }
}

効果の確認方法

設定後に本番ビルドをリリースしたら、Crashlytics ダッシュボードでシンボリケーションが有効になっているか確認します。

確認の流れ:

  1. Firebase Console → Crashlytics → 対象アプリを選択
  2. 「Issues」リストでクラッシュを開く
  3. スタックトレースに関数名(例: ContentView.body.getter)が表示されていれば成功

アドレスがそのまま表示されている場合は、まだ dSYM が届いていない状態です。ビルドの Release 設定と Run Script フェーズを再確認してください。

なお、過去の古いビルドのクラッシュはさかのぼってシンボリケーションできません。設定後の新しいビルドから有効になります。


設定作業は一度だけ行えばよく、以降は自動でアップロードされます。Rork Max で生成したプロジェクトを App Store に出す前に、この設定を必ず確認しておくことを個人的に推奨しています。同じアプリを長く運用するほど、クラッシュ調査のスピードが収益に直結してきます。

よくある追加の問題:Bitcode と dSYM

Rork Max プロジェクトで Enable Bitcode がオンになっている場合、Xcode がビットコードを再コンパイルするタイミングで App Store Connect 上に新しい dSYM が生成されます。この場合、Crashlytics に届く dSYM はビルド時のものとは別になるため、手動でダウンロードしてアップロードする手順が必要になります。

確認方法は以下の通りです。

  1. App Store Connect にログイン
  2. 該当アプリ → 「アクティビティ」タブ → ビルドを選択
  3. 「...」ボタンから「dSYM をダウンロード」が表示されていれば Bitcode が有効
  4. ダウンロードした dSYM は Firebase Console の「アプリ設定」→「dSYM を手動アップロード」から送信

最近のプロジェクトでは Bitcode が廃止される方向にあり(Apple が Xcode 14 以降でデフォルト無効にしました)、新規の Rork Max プロジェクトなら基本的に手動アップロードは不要です。ただし古いプロジェクトを引き継いでいる場合は念のため確認することをお勧めします。

実際のクラッシュ調査で役立ったこと

私がアプリ群のクラッシュ調査を行う際に実感するのは、クラッシュレートが下がる前にまず「読める環境を作る」ことが先決だということです。dSYM の設定を後回しにすると、何十件のレポートが届いていても手がかりが一切つかめない状態が続きます。

Crashlytics が正常に機能するようになってから分かるのは、「全体の80%は同一のクラッシュ」という現実です。シンボリケーションが通った状態で見ると、スタックトレースの上位2〜3行を見ただけで原因が特定できることがほとんどです。逆に言えば、それまでの期間は問題の所在すら分からなかったことになります。

今回の設定は10分もあれば完了します。Rork Max で SwiftUI アプリをビルドしたら、リリース前にまずこの設定を確認する習慣をつけると、後の調査作業が格段に楽になります。お読みいただきありがとうございました。

シェア

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

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

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

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

開発ツール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-18
Rorkアプリの本番クラッシュを「読める」レポートに変える — dSYM復元と文脈ログ、段階配布の実装メモ
Crashlyticsを入れたのにスタックトレースが読めない——dSYM/mapping復元、文脈を持たせるログ設計、App DistributionとGitHub Actionsの段階配布までを実装メモとしてまとめます。
開発ツール2026-04-16
シミュレーターで動くのに実機でクラッシュ — Rork Max アプリの原因特定と修正ガイド
Rork Max で生成した SwiftUI アプリがシミュレーターでは正常動作するのに実機でクラッシュする問題を5つのパターン別に解説。クラッシュログの読み方から具体的な修正方法まで紹介します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →