Swift / SwiftUI で実装した iOS アプリ。ARKit + RealityKit で拡張現実を実現し、MVVM パターンで画面ロジックを管理する。
GenesisApp
└── TitleView(タイトル画面)
├── DriveView(AR 操作画面)
│ ├── ARViewContainer(ARKit ラッパー)
│ ├── Joystick(操作スティック)
│ ├── SpeedMeter(速度メーター)
│ └── SteeringIndicator(ステアリング表示)
├── CarSelectionView(車種選択画面)
└── SettingsView(設定画面)
ios/Genesis/
├── GenesisApp.swift # アプリエントリーポイント
├── AppSettings.swift # 設定管理(シングルトン)
├── CarModel.swift # 車モデルの定義
├── classicCar.usdz # 3D モデル(Blender 製 USDC を usdzip で再パッケージ)
├── Assets.xcassets/
│ ├── AppIcon.appiconset/
│ └── AR Resources.arresourcegroup/ # 画像認識用リファレンス画像
└── Screen/
├── Title/
│ ├── TitleView.swift
│ └── TitleViewModel.swift
├── Drive/
│ ├── DriveView.swift
│ ├── DriveViewModel.swift
│ ├── ARViewContainer.swift # UIViewRepresentable で ARView をラップ
│ ├── Joystick.swift
│ ├── SpeedMeter.swift
│ └── SteeringIndicator.swift
├── CarSelection/
│ └── CarSelectionView.swift
└── Settings/
└── SettingsView.swift
MVVM(Model - View - ViewModel)
| 役割 | クラス / ファイル |
|---|---|
| Model | CarModel, AppSettings |
| View | *View.swift, ARViewContainer.swift |
| ViewModel | TitleViewModel, DriveViewModel |
@Observable マクロを使用(Swift 5.9 以降)AppSettings は ObservableObject のシングルトンで設定を全体に共有UserDefaults で設定値を永続化AppSettings.shared)classicCar.usdz)UIViewRepresentable で ARView(RealityKit)を SwiftUI にブリッジARWorldTrackingConfiguration で水平面を検出-sin(rotation) を使用(モデルの前後に合わせた補正)| 項目 | 内容 |
|---|---|
| 言語 | Swift 5.9+ |
| UI フレームワーク | SwiftUI |
| AR フレームワーク | ARKit + RealityKit |
| 3D モデル形式 | USDZ |
| 設定永続化 | UserDefaults |
| 最小サポート OS | iOS 26.2(ARKit 必須のため実機のみ) |
| ビルド | Xcode(ios/Genesis.xcodeproj) |