تطبيق بدرود لنظام iOS مبني بـ SwiftUI، يوفر تجربة اجتماعات فيديو أصلية مع دعم تعدد المثيلات وتخزين آمن لبيانات الاعتماد.
حزمة التقنيات
| التقنية | الإصدار | الغرض |
|---|---|---|
| Swift | 5.9+ | اللغة |
| SwiftUI | Latest | إطار عمل واجهة المستخدم |
| LiveKit Swift SDK | 2.0+ | وسائط WebRTC |
| KeychainAccess | 4.2.2+ | تخزين آمن لبيانات الاعتماد |
هدف النشر: iOS 18.0
تهيئة المشروع
يستخدم المشروع XCodeGen لتوليد المشروع من project.yml:
- معرّف الحزمة:
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 يُنشَط من شريط أدوات لوحة التحكم.
نقطة دخول التطبيق
يُهيئ 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.
الروابط العميقة
يتولى معالجة الروابط للانضمام المباشر للغرف ورموز الغرف.
الإعدادات
تُحفَظ تفضيلات المستخدم عبر 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 وملف التزويد