Bedrud Belgeler

Bedrud iOS uygulaması SwiftUI ile oluşturulmuş olup, çoklu örnek desteği ve güvenli kimlik bilgisi depolama ile yerel bir video toplantısı deneyimi sunar.

Teknoloji Yığını

TeknolojiSürümAmaç
Swift5.9+Dil
SwiftUIEn sonUI çerçevesi
LiveKit Swift SDK2.0+WebRTC medya
KeychainAccess4.2.2+Güvenli kimlik bilgisi depolama

Dağıtım hedefi: iOS 18.0

Proje Yapılandırması

Proje project.yml dosyasından proje üretimi için XCodeGen kullanır:

  • Bundle ID: com.bedrud.ios
  • Üretim komutu: xcodegen generate

Dizin Yapısı

apps/ios/Bedrud/
├── BedrudApp.swift                # Uygulama giriş noktası
├── Core/
│   ├── API/
│   │   └── APIClient.swift        # URLSession tabanlı REST istemcisi
│   ├── Auth/
│   │   └── AuthManager.swift      # Token yönetimi, giriş/çıkış
│   ├── Instance/
│   │   ├── InstanceManager.swift  # Merkezi çoklu örnek düzenleyici
│   │   └── InstanceStore.swift    # Kalıcı örnek depolama (UserDefaults)
│   └── LiveKit/
│       └── RoomManager.swift      # LiveKit oda bağlantı yöneticisi
├── Features/
│   ├── Auth/
│   │   ├── LoginView.swift        # Giriş ekranı
│   │   └── RegisterView.swift     # Kayıt ekranı
│   ├── Dashboard/
│   │   └── DashboardView.swift    # Oda listesi ve yönetimi
│   ├── Meeting/
│   │   └── MeetingView.swift      # Görüntülü arama arayüzü
│   ├── Profile/
│   │   └── ProfileView.swift      # Kullanıcı profili
│   ├── Instance/
│   │   ├── AddInstanceView.swift  # Sunucu örneği ekleme
│   │   └── InstanceSwitcherView.swift  # Örnekler arasında geçiş
│   ├── Settings/
│   │   └── SettingsView.swift     # Uygulama ayarları
│   ├── JoinByURL/
│   │   └── JoinByURLView.swift    # Derin bağlantı işleme
│   └── Main/
│       └── MainTabView.swift      # Sekme gezintisi
├── Models/
│   ├── User.swift
│   ├── Room.swift
│   └── Instance.swift
└── Design/
    └── Components/                # Yeniden kullanılabilir SwiftUI bileşenleri

Çoklu Örnek Mimarisi

iOS uygulaması çoklu örnek desteği için Android mimarisini yansıtır.

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

Temel Örüntü

Bağımlılıklar bir ObservableObject olan InstanceManager üzerinde @Published özellikleridir. Görünümler bunları @EnvironmentObject ile alır:

struct DashboardView: View {
    @EnvironmentObject var instanceManager: InstanceManager
 
    var body: some View {
        if let authManager = instanceManager.authManager {
            // Render authenticated UI
        }
    }
}

Gezinti Akışı

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"]

Örnek değiştirici Dashboard araç çubuğundan tetiklenen bir .sheet olarak görünür.

Uygulama Giriş Noktası

BedrudApp.swift çekirdek servisleri başlatır ve bunları SwiftUI ortamına enjekte eder:

@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)
        }
    }
}

Özellikler

Güvenli Depolama

JWT tokenları ve hassas kimlik bilgileri UserDefaults yerine KeychainAccess ile saklanır.

Derin Bağlantı

Doğrudan odaya katılma ve oda kodları için URL’leri işler.

Ayarlar

Kullanıcı tercihleri SettingsStore üzerinden UserDefaults kullanılarak kalıcı olarak saklanır.

Derleme

# Xcode'da aç
make dev-ios
 
# Arşiv derle (Sürüm)
make build-ios
 
# IPA dışa aktar (ExportOptions.plist gerektirir)
make export-ios
 
# Simülatör için derle (Hata Ayıklama)
make build-ios-sim

Gereksinimler

  • Xcode (en son kararlı sürüm)
  • iOS 18.0 dağıtım hedefi
  • Cihaz derlemeleri için: Apple Developer hesabı ve sağlama profili