Statt Ember-Rot ist Mint (#3DD68C) die Voreinstellung. Teal und Lime bleiben als Alternativen in der Palette. Gesucht wird sie über die Kennung, nicht über den Index: sonst würde ein Umsortieren der Palette die Standardfarbe still mitändern — und zwar nur für Neuinstallationen, was beim Suchen besonders unangenehm ist. Drei Tests halten das fest. Wer bereits eine Farbe gewählt hat, behält sie. 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 | ✅ Anmeldung am Server geprüft, der Rest nicht |
| 2 | Transcoding, adaptive Bitrate, Spuren, Sync | ✅ gebaut, ungeprüft |
| 3 | Download-Engine und Offline-Wiedergabe | ✅ gebaut, ungeprüft |
| 4 | Download-Intelligenz | ✅ gebaut; komprimierte Downloads ungeprüft |
| 5 | Feinschliff und Personalisierung | ✅ gebaut, ungeprüft |
| 6 | Live-TV mit EPG | ✅ gebaut, an keinem DVR geprüft |
„Ungeprüft" heißt: die Logik ist von Tests abgedeckt, die Oberfläche wurde aber noch nie mit einem echten Bestand gesehen.
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.
Was noch am echten Server zu prüfen ist
- Komprimierte Downloads. Sie laufen über den Universal-Transcoder mit
protocol=httpstatt über die umständliche Sync-API. Offen: ob Plex eineContent-Lengthmitschickt (ohne sie gibt es keinen Fortschrittsbalken und kein Fortsetzen) und ob die Datei durchsuchbar ist. Original bleibt solange Voreinstellung. SiehetranscodedDownloadURLinPlexServer+Playback.swift. - Live-TV. Der am schlechtesten dokumentierte Teil der Plex-API — es gibt keine offizielle Beschreibung. Die Modelle sind durchgehend nachsichtig gebaut, und ohne eingerichteten Empfänger erklärt die App das, statt einen Fehler zu zeigen.
- App-Größe. Die iOS-Slice von VLCKit ist unstripped 239 MB. Was davon im fertigen Archiv übrig bleibt, ist noch nicht gemessen.
- Große Dateien im Hintergrund. Das Verhalten mit einem 40-GB-Remux — vor allem Pausieren und Fortsetzen — ist nur gegen Testdaten geprüft.
Voraussetzungen
- Xcode 26 oder neuer
- iOS 26.0 auf dem Zielgerät
- XcodeGen (
brew install xcodegen)