Bedrud iOS アプリは SwiftUI で構築され、マルチインスタンスサポートと安全な認証情報保存を備えたネイティブビデオ会議エクスペリエンスを提供します。
テクノロジースタック
| テクノロジー | バージョン | 目的 |
|---|---|---|
| Swift | 5.9+ | 言語 |
| SwiftUI | Latest | UI フレームワーク |
| LiveKit Swift SDK | 2.0+ | WebRTC メディア |
| KeychainAccess | 4.2.2+ | 安全な認証情報保存 |
デプロイメントターゲット: iOS 18.0
プロジェクト設定
プロジェクトは XCodeGen を使用して project.yml からプロジェクトファイルを生成します。
- Bundle ID:
com.bedrud.ios - 生成コマンド:
xcodegen generate
ディレクトリ構造
apps/ios/Bedrud/
├── BedrudApp.swift # App entry point
├── Core/
│ ├── API/
│ │ └── APIClient.swift # URLSession-based REST client
│ ├── Auth/
│ │ └── AuthManager.swift # Token management, login/logout
│ ├── Instance/
│ │ ├── InstanceManager.swift # Central multi-instance orchestrator
│ │ └── InstanceStore.swift # Persistent instance storage (UserDefaults)
│ └── LiveKit/
│ └── RoomManager.swift # LiveKit room connection manager
├── Features/
│ ├── Auth/
│ │ ├── LoginView.swift # Login screen
│ │ └── RegisterView.swift # Registration screen
│ ├── Dashboard/
│ │ └── DashboardView.swift # Room list and management
│ ├── Meeting/
│ │ └── MeetingView.swift # Video call interface
│ ├── Profile/
│ │ └── ProfileView.swift # User profile
│ ├── Instance/
│ │ ├── AddInstanceView.swift # Add server instance
│ │ └── InstanceSwitcherView.swift # Switch between instances
│ ├── Settings/
│ │ └── SettingsView.swift # App settings
│ ├── JoinByURL/
│ │ └── JoinByURLView.swift # Deep link handling
│ └── Main/
│ └── MainTabView.swift # Tab navigation
├── Models/
│ ├── User.swift
│ ├── Room.swift
│ └── Instance.swift
└── Design/
└── Components/ # Reusable SwiftUI componentsマルチインスタンスアーキテクチャ
iOS アプリはマルチインスタンスサポートにおいて Android アーキテクチャと同じパターンを採用しています。
flowchart TB
subgraph InstanceManager [InstanceManager ObservableObject]
direction TB
instances["instances: [Instance]"]
activeInstance["activeInstance"]
authManager["authManager"]
apiClient["apiClient"]
roomManager["roomManager"]
others["..."]
instances --- activeInstance
activeInstance --- authManager
authManager --- apiClient
apiClient --- roomManager
roomManager --- others
end
style InstanceManager fill:#f0f0f0,stroke:#333主要なパターン
依存関係は ObservableObject である InstanceManager の @Published プロパティとして公開されます。ビューは @EnvironmentObject 経由で受け取ります。
struct DashboardView: View {
@EnvironmentObject var instanceManager: InstanceManager
var body: some View {
if let authManager = instanceManager.authManager {
// Render authenticated UI
}
}
}ナビゲーションフロー
flowchart LR
NoInstances["No instances"] --> AddInstanceView
HasInstancesNotLogged["Has instances,<br>not logged in"] --> LoginView
HasInstancesLogged["Has instances,<br>logged in"] --> DashboardView
DashboardView -. "toolbar sheet" .-> InstanceSwitcherView["InstanceSwitcherView"]インスタンススイッチャーは Dashboard ツールバーからトリガーされる .sheet として表示されます。
アプリのエントリーポイント
BedrudApp.swift はコアサービスを初期化し、SwiftUI 環境に注入します。
@main
struct BedrudApp: App {
@StateObject var instanceStore = InstanceStore()
@StateObject var instanceManager = InstanceManager()
@StateObject var settingsStore = SettingsStore()
var body: some Scene {
WindowGroup {
ContentView()
.environmentObject(instanceStore)
.environmentObject(instanceManager)
.environmentObject(settingsStore)
}
}
}機能
安全な保存
JWT トークンと機密性の高い認証情報を UserDefaults ではなく KeychainAccess で保存します。
ディープリンク
ルームへの直接参加やルームコード用の URL を処理します。
設定
ユーザー設定は SettingsStore を通じて UserDefaults に永続化されます。
ビルド
# Open in Xcode
make dev-ios
# Build archive (Release)
make build-ios
# Export IPA (requires ExportOptions.plist)
make export-ios
# Build for simulator (Debug)
make build-ios-sim必要条件
- Xcode(最新安定版)
- iOS 18.0 デプロイメントターゲット
- デバイスビルド:Apple Developer アカウントとプロビジョニングプロファイル