Bedrud التوثيق

تطبيق بدرود لنظام iOS مبني بـ SwiftUI، يوفر تجربة اجتماعات فيديو أصلية مع دعم تعدد المثيلات وتخزين آمن لبيانات الاعتماد.

حزمة التقنيات

التقنيةالإصدارالغرض
Swift5.9+اللغة
SwiftUILatestإطار عمل واجهة المستخدم
LiveKit Swift SDK2.0+وسائط WebRTC
KeychainAccess4.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 وملف التزويد