Entwicklung¶
BlueFerry ist in Python geschrieben. Ein unprivilegiertes Backend pro Benutzer besitzt jede Bluetooth-Verbindung zum iPhone und alle gespeicherten Daten. Die Clients für GTK, Qt/Kirigami, Quickshell und das Terminal sowie die CLI sind schlanke Clients einer privaten D-Bus-API auf dem Session-Bus.
flowchart LR
subgraph clients["Clients"]
gtk["GTK"]
qt["Qt/Kirigami"]
tui["Terminal (TUI)"]
cli["CLI"]
bridge["quickshell_bridge"]
end
qs["Quickshell"] -- "stdin" --> bridge
daemon["Backend-Daemon<br>blueferry-backend"]
bluez["BlueZ<br>(System-D-Bus)"]
obex["BlueZ OBEX<br>(Session-D-Bus)"]
state["Private Daten<br>und Mitteilungen"]
iphone(["iPhone"])
clients -- "Session-D-Bus" --> daemon
daemon --> bluez
daemon --> obex
daemon --> state
bluez -- "ANCS über LE" --> iphone
obex -- "MAP und PBAP über Classic" --> iphone
Weiterlesen¶
Die Entwicklerdokumentation ist auf Englisch. Auf Deutsch gibt es diesen Überblick und eine Zusammenfassung der Architektur.
| Seite | Maßgebliche Quelle |
|---|---|
| Architektur | ARCHITECTURE.md: Modulübersicht, Prozessgrenzen, Datenschutzregeln |
| D-Bus API (Englisch) | data/io.weirdware.BlueFerry.xml und src/blueferry/protocol.py |
| Testing (Englisch) | TESTING.md |
| Bluetooth-Verhalten | PROTOCOL.md: beobachtetes Verhalten von iPhone und BlueZ |
Die Dokumente im Wurzelverzeichnis des Repositorys sind maßgeblich. Diese Seiten bieten einen Einstieg und verlinken darauf, statt sie zu kopieren. Issues, Pull Requests und Commit-Nachrichten bitte auf Englisch.
Aufbau des Repositorys¶
| Pfad | Inhalt |
|---|---|
src/blueferry/ |
Backend, gemeinsame Client-Schicht, CLI, TUI, GTK (ui/), Qt (qt/) |
data/ |
D-Bus-Schnittstellen-XML, Desktop-Dateien, AppStream-Metadaten, Quickshell-Client |
systemd/ |
User-Service und die Hilfs-Unit für die Class of Device mit ihrer Polkit-Regel |
packaging/ |
Rezepte für Arch, DEB und RPM |
tests/ |
Hermetische Testsuite |
po/ |
Übersetzungsinventar |
website/public/ |
Statische Projekt-Website |
docs/ |
Diese Seiten |