Phase 0: Projektgerüst, Design-Tokens und Navigation
Legt das Fundament für den Plex-Client an: - XcodeGen-Projekt nach dem Muster von Onyx (com.scarriffleservices, strict concurrency, Projektdatei nicht eingecheckt) - FlixyKit mit vier Modulen: PlexKit, FlixyDesign, FlixyPlayback, FlixyDownloads. macOS steht als Plattform mit drin, damit die Logik-Tests ohne Simulator laufen. - FlixyDesign: dunkle Farb-Tokens, Schriftskala, Poster- und Querformat-Kacheln, Aufmacher-Bild. Die Akzentfarbe fließt über die Umgebung und wird per WCAG-Rechnung lesbar gehalten. - PlexKit: Kopfzeilen-Identität, Transport-Protokoll, Fehlerarten und die Medienmodelle samt nachsichtigem Decoder. - FlixyPlayback: VideoPlayerEngine-Protokoll und PlaybackDecider — die eine Funktion, an der Phase 2 das Transcoding andockt. - Ausfahrbare Seitenleiste auf dem iPhone, Split-View auf dem iPad. - 45 Tests, alle grün. VLCKit 4.0.0-a24 ist vorab geprüft: baut über SPM unter Swift 6 mit strict concurrency. Die iOS-Slice ist mit 239 MB allerdings gewichtig, deshalb bekommt sie in Phase 1 ein eigenes Target. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
// swift-tools-version: 6.2
|
||||
import PackageDescription
|
||||
|
||||
let package = Package(
|
||||
name: "FlixyKit",
|
||||
// Quellsprache ist Englisch, damit die Schlüssel im Code lesbar bleiben.
|
||||
// Deutsch kommt als Übersetzung dazu; die Systemsprache entscheidet.
|
||||
defaultLocalization: "en",
|
||||
// macOS steht hier nur, damit `swift test` die Logik-Tests ohne
|
||||
// Simulator laufen lassen kann — das spart bei jedem Durchlauf Minuten.
|
||||
// Die App selbst ist iOS-only; das legt project.yml fest.
|
||||
platforms: [.iOS(.v26), .macOS(.v26)],
|
||||
products: [
|
||||
.library(name: "PlexKit", targets: ["PlexKit"]),
|
||||
.library(name: "FlixyDesign", targets: ["FlixyDesign"]),
|
||||
.library(name: "FlixyPlayback", targets: ["FlixyPlayback"]),
|
||||
.library(name: "FlixyDownloads", targets: ["FlixyDownloads"]),
|
||||
],
|
||||
targets: [
|
||||
// Sprechen mit dem Server: Anmeldung, Endpunkte, Modelle. Kein SwiftUI,
|
||||
// damit die gesamte Protokoll-Schicht ohne Oberfläche testbar bleibt.
|
||||
.target(name: "PlexKit"),
|
||||
.testTarget(
|
||||
name: "PlexKitTests",
|
||||
dependencies: ["PlexKit"],
|
||||
// Echte Server-Antworten als Dateien. `copy` statt `process`, weil
|
||||
// sie unverändert im Bundle liegen sollen — sonst deutet Xcode die
|
||||
// JSON-Dateien um.
|
||||
resources: [.copy("Fixtures")]
|
||||
),
|
||||
|
||||
// Farben, Typografie, wiederkehrende Bausteine. Hängt bewusst von
|
||||
// nichts ab: dadurch bleibt das Umstellen der Akzentfarbe ein
|
||||
// Token-Wechsel und keine Suche quer durch die App.
|
||||
.target(name: "FlixyDesign", resources: [.process("Localizable.xcstrings")]),
|
||||
.testTarget(name: "FlixyDesignTests", dependencies: ["FlixyDesign"]),
|
||||
|
||||
// Die Wiedergabe-Abstraktion samt AVPlayer-Motor und der Entscheidung
|
||||
// DirectPlay/Transcode. VLCKit steckt bewusst NICHT hier drin, sondern
|
||||
// in FlixyPlaybackVLC — sonst zöge jeder Testlauf ein 920 MB großes
|
||||
// xcframework hinter sich her.
|
||||
.target(name: "FlixyPlayback", dependencies: ["PlexKit"]),
|
||||
.testTarget(name: "FlixyPlaybackTests", dependencies: ["FlixyPlayback"]),
|
||||
|
||||
// Warteschlange, Hintergrundübertragung, Offline-Bestand.
|
||||
.target(name: "FlixyDownloads", dependencies: ["PlexKit"]),
|
||||
.testTarget(name: "FlixyDownloadsTests", dependencies: ["FlixyDownloads"]),
|
||||
]
|
||||
)
|
||||
Reference in New Issue
Block a user