Приложение 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Ключевой паттерн
Зависимости - это @Published-свойства на InstanceManager, который является ObservableObject. Представления получают его через @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"]Переключатель экземпляров отображается как .sheet, вызываемый из панели инструментов Dashboard.
Точка входа приложения
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)
}
}
}Возможности
Безопасное хранилище
Использует KeychainAccess для хранения JWT-токенов и конфиденциальных учётных данных вместо UserDefaults.
Глубокие ссылки
Обрабатывает 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 и профиль обеспечения