// 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: "MediaKit", targets: ["MediaKit"]), .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. // Die neutrale Grundschicht: Typen und Rechnungen, die für jeden // Server gelten. Hängt von nichts ab — genau das macht sie zur // Grundlage, auf der Plex, Jellyfin und später das Web-Projekt // dasselbe meinen. .target(name: "MediaKit"), .testTarget(name: "MediaKitTests", dependencies: ["MediaKit"]), .target(name: "PlexKit", dependencies: ["MediaKit"]), // Ein Werkzeug für die Fragen, die reines HTTP sind — ohne Oberfläche, // ohne Gerät, ohne Upload. Eine Runde dauert damit Sekunden statt // eines halben Tages, und das Upload-Kontingent bleibt für Builds. .executableTarget(name: "FlixyProbe", dependencies: ["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-Engine 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: ["MediaKit"]), .testTarget(name: "FlixyPlaybackTests", dependencies: ["FlixyPlayback"]), // Warteschlange, Hintergrundübertragung, Offline-Bestand. .target(name: "FlixyDownloads", dependencies: ["MediaKit"], resources: [.process("Localizable.xcstrings")]), .testTarget(name: "FlixyDownloadsTests", dependencies: ["FlixyDownloads"]), ] )