Files
remmina-mac/docs/ARCHITECTURE.md
T

1.7 KiB

Architektur

Sources/RemminaMac/
  RemminaMacApp.swift          # @main, WindowGroup, lädt ProfileStore
  Models/ConnectionProfile.swift  # ProtocolType + ConnectionProfile + StoredSSHKey (Codable)
  Stores/ProfileStore.swift    # ObservableObject, JSON-Persistenz, Filter/Suche/Gruppen
  Security/KeychainHelper.swift# SecItemAdd/Copy/Delete Wrapper
  Services/ConnectionServices.swift # SSHService (ssh-Befehl) + RDPService (freerdp/rdc/vnc)
  Views/ContentView.swift      # NavigationSplitView: Sidebar + Tabs + Statusbar
  Views/SessionView.swift      # Detail pro Sitzung
  Views/ProfileEditorView.swift# Formular Neu/Bearbeiten + Keychain-Anbindung
  Views/SSHKeysView.swift      # Key-Liste, Import, ssh-keygen

Datenfluss

  1. RemminaMacApp erstellt ProfileStore als @StateObject, injiziert als environmentObject.
  2. ProfileStore.load() liest profiles.json + sshkeys.json, sonst Sample-Daten.
  3. ContentView filtert via searchText/selectedGroup, selection steuert Detail.
  4. connect(_:) setzt lastConnected, öffnet Tab, delegiert an SSHService/RDPService.
  5. Secrets nur via KeychainHelper, JSON enthält nur Account-Referenzen.

Wichtige Dateien

  • Stores/ProfileStore.swift:13 — Pfade + load()/save()
  • Models/ConnectionProfile.swift:3 — Protokoll-Defaults (Ports, Icons)
  • Services/ConnectionServices.swift:6 — sshArguments(for:key:)
  • Views/ContentView.swift — Remmina-Layout

Nächste Ausbaustufen

  1. SwiftTerm-View statt externem Terminal + swift-nio-ssh für echte SSH-Sessions.
  2. FreeRDP als XPC-Service einbetten statt Process.
  3. SFTP-Browser (NIO SFTP oder libssh2-Bridge).
  4. Export/Import-Buttons + Drag&Drop für Keys.