Rork Max を使ってネイティブ iOS アプリを開発していると、SwiftUI コードが正しく生成されない、あるいはビルドエラーが出てしまうといった悩みに直面することがあります。このガイドでは、そうした問題の原因を整理し、確実に解決するための方法をお伝えします。
Rork Max の SwiftUI 生成が失敗する主なパターン
Rork Max でのSwiftUI生成に関する問題は、大きく3つのカテゴリに分類できます。
プランや機能の設定に関する問題: Rork Max のプラン内容を理解していなかったり、設定を正しく行っていなかったりするケースです。
プロンプトの書き方に関する問題: SwiftUI 生成に特化した効果的なプロンプトを書いていないため、期待と異なるコードが生成されてしまうパターンです。
技術的な競合や依存関係の問題: React Native とネイティブコードの混在、ライブラリのバージョン競合、あるいはXcodeのビルド設定に関わる問題です。
これら3つの原因を順番に確認し、対処することで、ほぼすべての SwiftUI 生成問題を解決できます。
原因①:Rork Max プランではない・機能が有効になっていない
最初に確認すべきはシンプルですが重要なことです。あなたが使用しているのが本当に Rork Max プラン であるかどうかを確認しましょう。
Rork には段階的なプランがあります。基本プランではネイティブ iOS 機能の生成が制限されていることがあります。Rork Max にアップグレードしてはじめて、フル機能の SwiftUI コード生成が有効になります。
あなたのプラン状況を確認するには:
- Rork のダッシュボードにログインします
- アカウント設定またはプランセクションを開きます
- 現在のプランが Rork Max または Pro 相当であることを確認します
もしそうでない場合は、SwiftUI 生成機能を有効にするためのアップグレードを検討してください。
さらに、Rork Max プランであっても、特定の機能をプロジェクト設定で有効にする必要があります。プロジェクト設定の「ネイティブ機能」セクションで、以下が有効になっているか確認してください:
- iOS ネイティブサポート: オン
- SwiftUI フレームワーク: 有効
- フルアクセスモード: 有効(あれば)
これらの設定がオフになっていると、Rork はネイティブコード生成を制限します。
原因②:プロンプトの書き方の問題
次に一般的な原因は プロンプトの書き方 です。SwiftUI の生成に最適化されたプロンプトと、そうでないプロンプトで、得られるコードの質には大きな差が出ます。
悪い例:曖昧で指示が不明確
"iOSアプリを作ってください"
このプロンプトの問題点:
- 実装方法が指定されていない(SwiftUI か UIKit か不明)
- UI の具体的な構造がない
- ユーザーインタラクションの詳細が不足している
良い例:SwiftUI に最適化した明確なプロンプト
"SwiftUI で以下の画面を作成してください:
- タイトルバーに「My Todos」
- リスト表示エリアは ScrollView + VStack で実装
- 各 Todo は HStack で、左にチェックボックス、右にテキストと削除ボタン
- 追加ボタンはフローティングアクションボタンとして画面下部に配置
- 色は AppleColor scheme (primary/secondary) を使用
- Core Data で Todo を永続化"
このプロンプトが良い理由:
- 明示的に「SwiftUI」と指定: UIKit ではなく SwiftUI を使うよう指示
- レイアウト構造を詳細に説明: ScrollView、VStack、HStack といった具体的な View コンテナを指定
- UI コンポーネントを明確化: チェックボックス、ボタン、テキストフィールドなど各部品の役割を定義
- デザイン方針を示唆: AppleColor Scheme を使用するなど、iOS の慣習に従った実装を促す
- データ永続化を明記: Core Data の使用を明示的に指示
SwiftUI 生成に最適な指示のポイント
効果的なプロンプトを書くためのチェックリスト:
- SwiftUI あるいは Xcode の機能名を明確に含める(UIKit を避ける指示を含める場合もある)
- レイアウトに使う View コンテナ(VStack、HStack、ZStack、ScrollView)を具体的に指定する
- ナビゲーション方法(NavigationStack、NavigationLink)を明記する
- 状態管理は @State、@StateObject、@ObservedObject のいずれを使うか指定する
- データベース層が必要な場合は Core Data か Realm か SwiftData か明示する
- Apple の標準色(Color.primary、Color.blue など)を使う方針を示す
原因③:依存ライブラリ・Expo SDK との競合
Rork で React Native をベースにしながら SwiftUI ネイティブコードを追加する場合、競合が発生することがあります。
React Native と SwiftUI の共存: React Native のプロジェクトに SwiftUI コンポーネントを統合しようとすると、ブリッジ(RCT で始まるネイティブモジュール)が必要になります。Rork Max はこの統合を自動化しますが、設定が不正確だと「生成されたコードがバラバラ」という状況になります。
対策としては、プロンプトで明確に指定することです:
"React Native アプリですが、この画面だけはネイティブ iOS の SwiftUI で実装してください。
その他の画面は引き続き React Native です。
SwiftUI パーツは RCTBridgeModule でラップして、
JavaScript 側から呼び出せるようにしてください。"
Expo SDK とネイティブコードの競合: Expo Go を使っている場合、ネイティブ SDK (例: CoreML、Vision、ARKit)は直接使用できません。そうした機能が必要な場合は、Expo を使わずにネイティブ iOS アプリとしてビルドするか、Expo EAS Build を使い、カスタムネイティブコードをサポートするよう設定する必要があります。
プロンプトで Expo/ネイティブの要件を明記します:
"このアプリは Expo を使わないネイティブ iOS アプリです。
CoreML で機械学習モデルを実行します。
Swift package Manager で mlmodel を管理してください。"
ビルドエラーへの対処
SwiftUI コードが正しく生成されても、Xcode でビルドするときにエラーが出ることがあります。
Xcode のビルドエラー:「型が見つからない」
error: Cannot find 'SomeModuleName' in scope
このエラーが出た場合:
- Import 文を確認: 生成されたコードに必要な import が含まれているか確認します
- フレームワークの追加: Xcode の Build Phases → Link Binary With Libraries で必要なフレームワーク(Foundation、UIKit、SwiftUI など)が追加されているか確認します
- Pod キャッシュをクリア: CocoaPods を使っている場合、
pod deintegrate && pod installを実行します
Signing エラー:「Provisioning Profile が見つからない」
error: Provisioning profile "..." doesn't support the "healthkit" capability.
このエラーの場合:
- Xcode で Signing & Capabilities タブを開きます
- Team を正しく設定します
- 自動署名(Automatically manage signing)をオンにします
- CapabilityPanelで、必要な機能(HealthKit、Push Notifications など)が Provisioning Profile でサポートされているか確認します
ビルド後の Runtime エラー:「Fatal error」
生成されたコードが実行時にクラッシュする場合、通常は不正な状態遷移か、nil への不正なアクセスです。
Xcode のコンソールを見て、エラーメッセージを確認し、該当するコード部分を修正します。その際、Rork に修正内容を説明するプロンプトで新しいコードを生成させるのが効率的です:
"上記コードの SafetyError で落ちています。
optionalBinding で nil チェックを入れてください。
colors? の代わりに guard let colors = colors else { ... } を使ってください。"
確実に動く SwiftUI 生成のベストプラクティス
最後に、SwiftUI 生成がスムーズに進むための予防的なアプローチをまとめます。
1. 段階的にコード生成を進める
一度に全画面を生成しようとするのではなく、1画面ずつ、さらには1コンポーネントずつ生成するアプローチが確実です。
"First step: Login 画面の UI だけを SwiftUI で生成してください。
入力フィールド2つ、ボタン1つのみ。状態管理はまだ不要です。"
その後、段階的に機能を追加します。
2. プロンプトに参考コードを含める
既に動いている部分があれば、それをプロンプトに貼り付けて、「このスタイルに合わせて新しいコンポーネントを生成してください」と指示する方法が効果的です。
3. エラーが出たら、エラーメッセージごと貼り付ける
Xcode のコンパイルエラーや Runtime エラーが出たら、そのメッセージをまるごと Rork のプロンプトに貼り付けて「このエラーを修正してください」と指示するだけで、ほぼ自動的に修正コードが返ってきます。
"以下のエラーが出ています。修正してください。
error: Cannot find 'ToDoItem' in scope at line 45"
4. Swift Concurrency(async/await)を明示的に指定
モダンな iOS 開発では async/await が標準です。プロンプトで明確に指定しましょう:
"データ取得は async/await で実装してください。
URLSession.shared.data(from:) と try/catch を組み合わせてください。"
5. テストコードも一緒に生成させる
コードの品質を確認するため、テストコードも一緒に生成させるのが良い習慣です:
"上記の Model をテストするファイルも作成してください。
XCTest を使って、初期化と validation をテストしてください。"
全体を振り返って
Rork Max で SwiftUI 生成が上手くいかないときは、以下の順で確認してください:
- Rork Max プランが有効か、ネイティブ機能が有効か確認
- プロンプトを SwiftUI 最適化の形に修正(具体的なレイアウト、View 名を含める)
- 依存ライブラリとの競合(React Native + SwiftUI)がないか確認
- ビルドエラーが出たら、エラーメッセージごと Rork に貼り付けて修正
- 最後に、段階的生成・参考コード貼り付け・テストコード生成などのベストプラクティスで、以後のミスを防止
これらのステップを踏むことで、SwiftUI ネイティブ開発のプロセスは格段にスムーズになります。