Nachladen - DownloadRefiller wählt aus, WELCHE Folgen fehlen; wie viele, rechnet die Regel-Engine. Getrennt, weil das Rechnen ohne Server auskommt und damit prüfbar ist. - In Ausstrahlungsreihenfolge, Specials in Staffel 0 bleiben außen vor. - Läuft nach dem Ansehen und beim Start, nicht auf einem Zeitgeber: eine App, die im Hintergrund unaufgefordert Gigabytes lädt, wäre eine unangenehme Überraschung auf der Mobilfunkrechnung. Startseiten-Layout - Reihen ein-/ausblenden und per Bearbeiten-Modus umsortieren. - Die Anordnungslogik liegt als HubArrangement in PlexKit statt im App-Target — dort ist sie ohne Simulator testbar, und dort sitzen die unangenehmen Fälle: neue Reihen vom Server landen am Ende statt zu verschwinden, verschwundene aus der gespeicherten Liste stören nicht, ein doppelter Eintrag stürzt nicht ab. 11 Tests. 126 Tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Flixy
Ein nativer Plex-Client für iPhone und iPad — dunkel, mit ausfahrbarer Seitenleiste und Offline-Downloads.
Der Name ist ein Platzhalter. Siehe Flixy/Branding.swift.
Stand
Phase 0 (Fundament) steht. Die App startet, die Navigation ist begehbar, die Inhalte folgen in Phase 1.
Der Fahrplan steht in
docs/superpowers/specs/2026-09-11-flixy-design.md.
| Phase | Inhalt | Stand |
|---|---|---|
| 0 | Projektgerüst, Design-Tokens, Navigation | ✅ |
| 1 | Anmeldung, Bibliothek, DirectPlay | offen |
| 2 | Transcoding, adaptive Bitrate, Spuren, Sync | offen |
| 3 | Download-Engine und Offline-Wiedergabe | offen |
| 4 | Download-Intelligenz | offen |
| 5 | Feinschliff und Personalisierung | offen |
| 6 | Live-TV mit EPG | offen |
Aufbau
Die Xcode-Projektdatei wird aus project.yml erzeugt und ist nicht
eingecheckt — das erspart Konflikte in der pbxproj.
xcodegen generate
open Flixy.xcodeproj
Der Code liegt zum größten Teil in lokalen Packages unter Packages/FlixyKit.
Das App-Target enthält nur Oberfläche und Navigation.
| Modul | Aufgabe | Hängt ab von |
|---|---|---|
PlexKit |
Anmeldung, Endpunkte, Modelle. Kein SwiftUI. | — |
FlixyDesign |
Farben, Typografie, wiederkehrende Bausteine. | — |
FlixyPlayback |
Wiedergabe-Abstraktion und die Entscheidung DirectPlay/Transcode. | PlexKit |
FlixyDownloads |
Warteschlange, Hintergrundübertragung, Offline-Bestand. | PlexKit |
Warum zwei Player
iOS spielt weder Matroska-Dateien noch DTS- oder TrueHD-Ton — und genau das
liegt in typischen Plex-Beständen. PlaybackDecider prüft deshalb pro Datei,
ob AVPlayer sie nativ öffnen kann (dann gibt es Bild-in-Bild und AirPlay
gratis), und schickt sie sonst an VLCKit.
Ab Phase 2 kommt der dritte Weg dazu: Server-Transcoding. Dafür ist genau eine
Funktion zu erweitern — PlaybackDecider.decide(media:part:policy:). Die
Oberfläche bleibt unberührt.
Tests
Die Logik-Tests laufen ohne Simulator, deshalb in Sekunden:
cd Packages/FlixyKit && swift test
Die wichtigste Testdatei ist PlaybackDeciderTests — sie hält fest, welche
Datei auf welchem Weg landet, und schlägt an, sobald jemand
DeviceCapabilities anfasst.
Die Antwort-Vorlagen unter Tests/PlexKitTests/Fixtures sind von Hand
geschrieben und gehören durch echte Mitschnitte ersetzt, sobald ein Server
erreichbar ist — siehe das README dort.
Die Oberfläche wird von Hand im Simulator geprüft.
Voraussetzungen
- Xcode 26 oder neuer
- iOS 26.0 auf dem Zielgerät
- XcodeGen (
brew install xcodegen)