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-04-16中級

シミュレーターで動くのに実機でクラッシュ — Rork Max アプリの原因特定と修正ガイド

Rork Max で生成した SwiftUI アプリがシミュレーターでは正常動作するのに実機でクラッシュする問題を5つのパターン別に解説。クラッシュログの読み方から具体的な修正方法まで紹介します。

Rork Max229SwiftUI63デバッグ22クラッシュ4実機テスト13トラブルシューティング77iOS108

Rork Max でネイティブアプリを生成して「シミュレーターでは問題なく動くのに、実機に入れたとたんクラッシュする」という経験をされた方は多いのではないでしょうか。

これは iOS 開発の世界で昔から繰り返されるトラブルのひとつです。AI でコードが自動生成されるようになった今も、残念ながらこの問題は変わらず起きます。むしろ、生成コードが膨大になるぶん、原因の特定に時間がかかることもあります。

ここではRork Max 利用者が実際によく遭遇するクラッシュパターンを5つに絞り、それぞれの原因と修正方法を具体的にご紹介します。

なぜシミュレーターと実機で挙動が異なるのか

まずは前提として、この差異が生まれる理由をご理解いただくと、問題解決の筋道が立てやすくなります。

CPU アーキテクチャの違いがもっとも根本的な原因のひとつです。Mac 上のシミュレーターは x86_64(Intel Mac)または arm64(Apple Silicon Mac)で動作しますが、iOS 実機は arm64 のみです。ライブラリが特定アーキテクチャ向けにビルドされていると、シミュレーターでは動いても実機で動かないケースが出てきます。

メモリの扱いも大きく異なります。 シミュレーターは Mac のメモリを自由に使えるため、数 GB のメモリを消費するコードも平然と動きます。一方、実機は搭載メモリが限られており、iOS の jetsam(メモリ管理)が容赦なくプロセスをキルします。

パーミッションとサンドボックスも実機だけに厳しく適用されます。Info.plist に使用説明文を書いていないカメラや位置情報へのアクセスは、シミュレーターでは見逃されることがありますが、実機では即座にクラッシュします。

よくある5つのクラッシュパターンと修正方法

パターン1: Info.plist のプライバシー使用説明文が不足している

最も多いのがこのケースです。カメラ・マイク・位置情報・フォトライブラリなどにアクセスするコードを Rork Max が生成した場合、対応する NSXxxUsageDescription が Info.plist に入っていないとアプリは即クラッシュします。

// Rork Max が生成するカメラアクセスコード例
import AVFoundation
 
func requestCameraAccess() {
    AVCaptureDevice.requestAccess(for: .video) { granted in
        // この処理の前にInfo.plistの記述が必須
    }
}

修正は Rork Max のプロジェクト設定(Info.plist に相当する部分)に以下を追加することです。

NSCameraUsageDescription = "プロフィール写真の撮影に使用します"
NSPhotoLibraryUsageDescription = "写真の選択と保存に使用します"
NSMicrophoneUsageDescription = "動画撮影時の音声収録に使用します"
NSLocationWhenInUseUsageDescription = "近くのスポットを表示するために使用します"

Rork Max のプロンプトに「カメラを使う機能を追加する際は、Info.plist のプライバシー説明文も一緒に追加してください」と明示すると、生成時に含めてもらいやすくなります。

パターン2: EAS Build の Entitlement 不足

プッシュ通知・App Groups・Sign in with Apple・HealthKit などの機能は、Entitlements ファイルへの記述が必要です。シミュレーターでは Entitlements が無くても動作するため、実機テストで初めて発覚するケースが多いです。

Rork Max の EAS Build 設定(app.json)を確認してください。

{
  "expo": {
    "ios": {
      "bundleIdentifier": "com.yourname.yourapp",
      "entitlements": {
        "aps-environment": "production",
        "com.apple.developer.associated-domains": ["applinks:yourapp.com"]
      }
    }
  }
}

特に aps-environmentdevelopment(TestFlight 用)と production(App Store 用)で正しく切り替える必要があります。EAS Build のプロファイル設定を見直してみてください。

パターン3: サードパーティライブラリのアーキテクチャ問題

Rork Max が npm パッケージを介してネイティブモジュールを取り込んだ場合、そのモジュールが arm64 実機向けにビルドされていないと動きません。

クラッシュログに Termination Reason: Namespace DYLD, Code 1 Library missingimage not found が出ていたら、このパターンを疑ってください。

# EAS Build ログでアーキテクチャエラーを確認する
eas build --platform ios --profile preview --local
 
# ビルド済み .ipa の中のバイナリアーキテクチャを確認
lipo -archs YourApp.app/YourApp
# → arm64 のみ表示されるのが正常

このエラーが出た場合、問題のあるライブラリを最新バージョンに更新するか、Rork Max のプロンプトで「React Native 0.73 以降対応のライブラリを使ってください」と指定して再生成するのが有効です。

パターン4: メモリ不足による強制終了(jetsam kill)

画像処理・機械学習モデル・大量のデータ読み込みをシミュレーターで試すと余裕で動くのに、実機(特に古い iPhone)では強制終了されるケースです。

クラッシュログに EXC_RESOURCE RESOURCE_TYPE_MEMORYjetsam の文字が出ていれば確認です。

// 画像をメモリ上に全部展開してしまうコード(危険)
let images = urls.map { UIImage(contentsOfFile: $0.path) } // シミュレーターでは動く
 
// 推奨: 必要なときだけ読み込む
func loadImage(at url: URL) -> UIImage? {
    // ディスクから逐次読み込みにすることでメモリを節約
    return UIImage(contentsOfFile: url.path)
}

Rork Max に対して「メモリ効率を考慮して、画像は遅延読み込みにしてください」と指示すると、LazyVStackAsyncImage を使ったコードを生成してもらえます。

パターン5: CoreML モデルが実機の Neural Engine に対応していない

AI 機能を含むアプリで CoreML を使う場合、モデルが特定の計算ユニット(Neural Engine)向けにコンパイルされていないと、実機でのパフォーマンスが著しく低下したり、場合によってはクラッシュしたりします。

// CoreML モデルのロード時に計算ユニットを明示する
let config = MLModelConfiguration()
config.computeUnits = .all // CPU・GPU・Neural Engine を状況に応じて自動選択
 
do {
    let model = try MyMLModel(configuration: config)
    // モデル使用
} catch {
    // エラーハンドリングを必ず実装する
    print("モデルのロードに失敗しました: \(error.localizedDescription)")
}

Rork Max に CoreML を使う機能を生成させる際は、「CoreML のモデルロード時にエラーハンドリングと計算ユニット設定を含めてください」と明示するとよいでしょう。

クラッシュログの読み方 — 原因の素早い特定

実機でクラッシュが起きたとき、原因を特定する最短ルートはクラッシュログを読むことです。

TestFlight 経由のクラッシュ: App Store Connect の「TestFlight」→「クラッシュ」タブに自動収集されます。

Xcode Organizer: デバイスを繋いで Xcode の「Window」→「Organizer」→「Crashes」を開くと、接続した実機のクラッシュログが確認できます。

見るべき主なフィールドは以下の2つです。

Exception Type: EXC_BAD_ACCESS (SIGSEGV)  ← メモリ参照エラー
Exception Type: EXC_CRASH (SIGABRT)       ← アサーション・フォース終了

Thread 0 Crashed:
0  libswiftCore.dylib    0x... swift_unknownObjectRetain  ← Swiftのメモリ管理問題
1  YourApp               0x... ContentView.body.getter    ← クラッシュした箇所

スタックトレースの一番上から順番に読んでいくと、クラッシュが起きた箇所がわかります。YourApp から始まる行(自分のコード)に注目するのが基本です。

シミュレーター依存を断ち切るための実機テスト習慣

根本的な解決策として、TestFlight を開発の早い段階から使うことをお勧めします。機能が完成してからまとめて実機テストするのではなく、1画面作ったら TestFlight に入れるというサイクルにすると、問題の発見が早く修正コストも小さく済みます。

Rork Max での開発フローとしては、プロンプトで機能を追加するたびに EAS Build を走らせて TestFlight 配布するのが理想的です。詳しいビルド〜配布の流れはRork Max TestFlight ガイドをご覧ください。

また、実機特有のバグが多い場合は、Rork Max ビルドエラー完全解決ガイドも合わせて参考にしていただければ、より広い範囲のトラブルに対応できます。

最初にやること — クラッシュ直後のチェックリスト

実機でクラッシュが発生したときに最初に確認すべきことをまとめます。

  • Info.plist に必要なプライバシー使用説明文がすべて記述されているか
  • Entitlements に使用している機能(プッシュ通知・Associated Domains 等)が含まれているか
  • クラッシュログの Exception Type を確認して原因を絞り込む
  • TestFlight で配布して複数の実機(特に古めのデバイス)で検証する
  • メモリ使用量が異常に多い処理がないか Xcode Instruments で確認する

シミュレーターと実機の差異は「なぜか動かない」ではなく、必ず理由があります。クラッシュログを手がかりにひとつずつ確認していくと、ほとんどのケースで解決できます。まずはクラッシュログを開いてみてください。

シェア

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

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

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

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

関連記事

開発ツール2026-05-08
Rork Max の Cloud Compile が失敗する原因と、すぐに試せる対処法
Rork Max の Cloud Compile でビルドが失敗する時の原因を症状別に整理し、コード署名エラー・Swift バージョン不一致・タイムアウトなど、よくあるケースへの対処法を解説します。
開発ツール2026-07-06
Rork Max の SwiftUI を @Observable へ移す — ObservableObject で広がっていた再描画を絞り込む
Rork Max が生成する SwiftUI アプリは ObservableObject と @Published をよく使いますが、状態が一つ変わるだけで購読しているビュー全体が再評価されます。Observation フレームワークの @Observable へ移すことで、プロパティ単位に再描画を絞り込む手順と、Instruments で実測したビュー実行回数の変化を、個人開発の作業ログとしてまとめました。
開発ツール2026-06-30
Rork Max で StandBy モードに最適化したウィジェットを実装する
充電中の横向き表示で使われる StandBy モード向けに、WidgetKit ウィジェットを最適化する実装手順です。常時表示の調光・ナイトモード・コンテナ背景の扱いを、Rork Max が生成したコードへどう手で加えるかまで含めて解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →