Flixy heißt ab hier Halo
Reine Umbenennung, kein Verhalten geändert — bewusst als eigener Commit, damit „umbenannt" und „umgebaut" im Nachhinein auseinanderzuhalten sind. 712 mal `Flixy`, 778 mal `flixy`, 7 mal `FLIXY` in 169 Dateien, dazu 25 Pfade. Ziele: `Halo`, `HaloTV`, `HaloTopShelf`, `HaloUITests`, `HaloKit` mit `HaloDesign`, `HaloDownloads`, `HaloPlayback` und `HaloProbe`. `MediaKit`, `JellyfinKit` und `DownloadWidget` tragen den Namen nicht und bleiben. `docs/superpowers/specs/` ist ausgenommen. Datierte Entwurfsdokumente sind ein Protokoll getroffener Entscheidungen; sie nachträglich umzuschreiben hiesse, die Vergangenheit zu glätten. **Die Bundle-ID wandert mit** — ausdrücklich so gewollt, mit bekanntem Preis: `com.scarriffleservices.halo` ist für iOS eine *andere* App. Die installierte Fassung bleibt daneben stehen, mit Downloads und Anmeldung in ihrem Container; Halo startet leer. Einmal neu anmelden, heruntergeladene Folgen einmal neu laden. Dasselbe gilt für die App-Gruppe, die sich TV-App und Top Shelf teilen. **Eine Folge davon, die beim Entscheiden noch nicht auf dem Tisch lag:** der Aufräumschritt aus dem vorigen Commit kommt an die alten Plex-Token nicht mehr heran. Der Schlüsselbund grenzt nach Team und Bundle-Kennung ab — was unter `…flixy` liegt, ist für `…halo` unerreichbar. Erledigt wird es trotzdem, nur anders: **die alte App löschen.** iOS räumt deren Schlüsselbund-Einträge beim Deinstallieren mit ab. Der Code bleibt stehen, weil er für jeden Stand vor dieser Umbenennung richtig ist und im Jahr einen Startvergleich kostet. Die Projektdatei ist aus `project.yml` neu erzeugt, der alte Ordner gelöscht statt umbenannt — sie steht ohnehin nicht im Repo. Das Verzeichnis des Repos selbst heißt weiter `Flixy`; das umzubenennen ist ein Handgriff ausserhalb des Projekts. 368 Tests grün. iOS und tvOS bauen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2fcf6821c8
commit
4b9a1e7b67
+68
-68
@@ -1,4 +1,4 @@
|
||||
name: Flixy
|
||||
name: Halo
|
||||
|
||||
options:
|
||||
bundleIdPrefix: com.scarriffleservices
|
||||
@@ -19,11 +19,11 @@ settings:
|
||||
SWIFT_STRICT_CONCURRENCY: complete
|
||||
|
||||
packages:
|
||||
FlixyKit:
|
||||
path: Packages/FlixyKit
|
||||
HaloKit:
|
||||
path: Packages/HaloKit
|
||||
|
||||
targets:
|
||||
Flixy:
|
||||
Halo:
|
||||
type: application
|
||||
platform: iOS
|
||||
# Ausdrücklich aufgeschrieben, statt Xcode raten zu lassen.
|
||||
@@ -34,39 +34,39 @@ targets:
|
||||
# auflösen. Hier steht es im Projekt und überlebt jedes Neuerzeugen.
|
||||
scheme:
|
||||
testTargets:
|
||||
- FlixyUITests
|
||||
- HaloUITests
|
||||
sources:
|
||||
# Das Icon ist ein Bündel, also technisch ein Ordner. Ohne diesen
|
||||
# Ausschluss läuft XcodeGen hinein und trägt icon.json und play.svg
|
||||
# einzeln ein — dann fehlt das Icon, ohne dass irgendwo ein Fehler
|
||||
# auftaucht.
|
||||
#
|
||||
- path: Flixy
|
||||
- path: Halo
|
||||
excludes:
|
||||
- "AppIcon.icon"
|
||||
- path: Flixy/AppIcon.icon
|
||||
- path: Halo/AppIcon.icon
|
||||
type: file
|
||||
dependencies:
|
||||
- target: DownloadWidget
|
||||
# Die neutrale Grundschicht. Ausdrücklich genannt, obwohl sie über
|
||||
# JellyfinKit ohnehin im Baum hängt: die App soll sie direkt benutzen und
|
||||
# nicht davon abhängen, dass ein bestimmter Server sie mitschleppt.
|
||||
- package: FlixyKit
|
||||
- package: HaloKit
|
||||
product: MediaKit
|
||||
# Der Server. Steht auf der neutralen Schicht, nicht darin — kommt ein
|
||||
# zweiter dazu, steht er daneben.
|
||||
- package: FlixyKit
|
||||
- package: HaloKit
|
||||
product: JellyfinKit
|
||||
- package: FlixyKit
|
||||
product: FlixyDesign
|
||||
- package: FlixyKit
|
||||
product: FlixyPlayback
|
||||
- package: FlixyKit
|
||||
product: FlixyDownloads
|
||||
- package: HaloKit
|
||||
product: HaloDesign
|
||||
- package: HaloKit
|
||||
product: HaloPlayback
|
||||
- package: HaloKit
|
||||
product: HaloDownloads
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy
|
||||
PRODUCT_NAME: Flixy
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo
|
||||
PRODUCT_NAME: Halo
|
||||
# Verweist auf AppIcon.icon. Der frühere leere AppIcon.appiconset im
|
||||
# Asset-Katalog ist entfernt — zwei Dinge namens AppIcon, und Xcode
|
||||
# nimmt das falsche.
|
||||
@@ -75,9 +75,9 @@ targets:
|
||||
TARGETED_DEVICE_FAMILY: "1,2"
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
info:
|
||||
path: Flixy/Info.plist
|
||||
path: Halo/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Flixy
|
||||
CFBundleDisplayName: Halo
|
||||
UILaunchScreen:
|
||||
UIColorName: LaunchBackground
|
||||
|
||||
@@ -136,25 +136,25 @@ targets:
|
||||
# Freigabe. Fehlt der Text, verweigert das System sie kommentarlos und
|
||||
# die Serversuche findet dauerhaft nichts.
|
||||
NSLocalNetworkUsageDescription: >-
|
||||
Flixy benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Halo benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Jellyfin-Server zu erreichen und Medien direkt von ihm zu laden.
|
||||
|
||||
# Die Fassung für den Fernseher.
|
||||
#
|
||||
# **Eigene Ansichten, geteilte Modelle.** Die Quellenpfade sind die ganze
|
||||
# Aussage dieses Blocks: `FlixyTV/` gehört nur hierher, `Flixy/Session/`
|
||||
# Aussage dieses Blocks: `HaloTV/` gehört nur hierher, `Halo/Session/`
|
||||
# gehört beiden. Keine Datei muss dafür umziehen — XcodeGen nimmt Pfade je
|
||||
# Ziel, und die iOS-Fassung sieht von der ganzen Sache nichts.
|
||||
FlixyTV:
|
||||
HaloTV:
|
||||
type: application
|
||||
platform: tvOS
|
||||
# Aus demselben Grund ausgeschrieben wie bei Flixy — siehe dort.
|
||||
# Aus demselben Grund ausgeschrieben wie bei Halo — siehe dort.
|
||||
scheme: {}
|
||||
sources:
|
||||
# Die eigenen Ansichten.
|
||||
- path: FlixyTV
|
||||
- path: HaloTV
|
||||
# Die Modelle.
|
||||
- path: Flixy/Session
|
||||
- path: Halo/Session
|
||||
excludes:
|
||||
# Ein Fernseher dreht sich nicht.
|
||||
- "OrientationLock.swift"
|
||||
@@ -169,60 +169,60 @@ targets:
|
||||
# aufruft. Beide sind reine Übersetzer ohne UIKit.
|
||||
# Reines Modell trotz des Ordnernamens: LoadState, ErrorText und
|
||||
# MediaRoute liegen zusammen in einer Datei.
|
||||
- path: Flixy/Views/LoadState.swift
|
||||
- path: Halo/Views/LoadState.swift
|
||||
type: file
|
||||
# Der Player. **Ohne PlayerView** — die zeichnet auf iOS das Bild und
|
||||
# alle Bedienelemente selbst; auf dem Fernseher macht das Apples
|
||||
# AVPlayerViewController. Das Modell darunter ist dasselbe.
|
||||
- path: Flixy/Views/Player/PlayerModel.swift
|
||||
- path: Halo/Views/Player/PlayerModel.swift
|
||||
type: file
|
||||
- path: Flixy/Views/Player/VideoSurface.swift
|
||||
- path: Halo/Views/Player/VideoSurface.swift
|
||||
type: file
|
||||
- path: Flixy/Branding.swift
|
||||
- path: Halo/Branding.swift
|
||||
type: file
|
||||
# Die Texte. Dieselben Schlüssel, dieselben Übersetzungen.
|
||||
- path: Flixy/Resources/Localizable.xcstrings
|
||||
- path: Halo/Resources/Localizable.xcstrings
|
||||
type: file
|
||||
dependencies:
|
||||
- package: FlixyKit
|
||||
- package: HaloKit
|
||||
product: MediaKit
|
||||
- package: FlixyKit
|
||||
- package: HaloKit
|
||||
product: JellyfinKit
|
||||
- package: FlixyKit
|
||||
product: FlixyDesign
|
||||
- package: FlixyKit
|
||||
product: FlixyPlayback
|
||||
- package: HaloKit
|
||||
product: HaloDesign
|
||||
- package: HaloKit
|
||||
product: HaloPlayback
|
||||
# Nur damit `PlayerModel` den Typ nennen darf. Angelegt wird nie einer:
|
||||
# FlixyTVApp reicht `nil` durch, und damit gibt es auf tvOS auch keinen
|
||||
# HaloTVApp reicht `nil` durch, und damit gibt es auf tvOS auch keinen
|
||||
# ModelContainer und kein SwiftData.
|
||||
- package: FlixyKit
|
||||
product: FlixyDownloads
|
||||
- target: FlixyTopShelf
|
||||
- package: HaloKit
|
||||
product: HaloDownloads
|
||||
- target: HaloTopShelf
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy.tv
|
||||
PRODUCT_NAME: Flixy
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.tv
|
||||
PRODUCT_NAME: Halo
|
||||
# Nur Apple TV.
|
||||
TARGETED_DEVICE_FAMILY: "3"
|
||||
# Kein AppIcon.icon: Icon Composer deckt iOS, macOS und watchOS ab,
|
||||
# tvOS nicht. Der Name zeigt auf die Brand-Assets-Gruppe im Katalog,
|
||||
# und der Katalog liegt unter FlixyTV/Resources.
|
||||
# und der Katalog liegt unter HaloTV/Resources.
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME: "App Icon & Top Shelf Image"
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
CODE_SIGN_ENTITLEMENTS: FlixyTV/Flixy.entitlements
|
||||
CODE_SIGN_ENTITLEMENTS: HaloTV/Halo.entitlements
|
||||
info:
|
||||
path: FlixyTV/Info.plist
|
||||
path: HaloTV/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Flixy
|
||||
CFBundleDisplayName: Halo
|
||||
UIUserInterfaceStyle: Dark
|
||||
ITSAppUsesNonExemptEncryption: false
|
||||
# Über dieses Schema schickt das Regal zurück in die App. Ohne den
|
||||
# Eintrag kennt tvOS es nicht, und ein Druck auf ein Plakat tut
|
||||
# nichts — ohne Fehler, ohne Hinweis.
|
||||
CFBundleURLTypes:
|
||||
- CFBundleURLName: com.scarriffleservices.flixy.topshelf
|
||||
- CFBundleURLName: com.scarriffleservices.halo.topshelf
|
||||
CFBundleURLSchemes:
|
||||
- flixy
|
||||
- halo
|
||||
# Was hier **nicht** steht, und warum:
|
||||
#
|
||||
# UILaunchScreen — tvOS hat kein Startbild dieser Art.
|
||||
@@ -234,7 +234,7 @@ targets:
|
||||
NSAppTransportSecurity:
|
||||
NSAllowsLocalNetworking: true
|
||||
NSLocalNetworkUsageDescription: >-
|
||||
Flixy benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Halo benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Jellyfin-Server zu erreichen.
|
||||
|
||||
# Das Regal über der App im tvOS-Menü.
|
||||
@@ -243,25 +243,25 @@ targets:
|
||||
# läuft — und mit weniger als einer Sekunde Zeit. Sie liest deshalb nur eine
|
||||
# Datei aus der App-Gruppe, die die App beim Laden der Startseite ablegt:
|
||||
# kein Netz, kein Schlüsselbund, kein Blättern.
|
||||
FlixyTopShelf:
|
||||
HaloTopShelf:
|
||||
type: tv-app-extension
|
||||
platform: tvOS
|
||||
sources:
|
||||
- path: FlixyTopShelf
|
||||
- path: HaloTopShelf
|
||||
dependencies:
|
||||
- package: FlixyKit
|
||||
- package: HaloKit
|
||||
product: MediaKit
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy.tv.topshelf
|
||||
PRODUCT_NAME: FlixyTopShelf
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.tv.topshelf
|
||||
PRODUCT_NAME: HaloTopShelf
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
CODE_SIGN_ENTITLEMENTS: FlixyTopShelf/FlixyTopShelf.entitlements
|
||||
CODE_SIGN_ENTITLEMENTS: HaloTopShelf/HaloTopShelf.entitlements
|
||||
SKIP_INSTALL: YES
|
||||
info:
|
||||
path: FlixyTopShelf/Info.plist
|
||||
path: HaloTopShelf/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Flixy
|
||||
CFBundleDisplayName: Halo
|
||||
# **Die Erweiterung hat ihre eigene Info.plist.**
|
||||
#
|
||||
# Und damit ihre eigene Transportsicherheit: die Ausnahme in der
|
||||
@@ -278,17 +278,17 @@ targets:
|
||||
# Nur zum Hinsehen: fährt die App mit der Attrappe in einen bestimmten
|
||||
# Zustand und hält sie dort an, damit von außen fotografiert werden kann.
|
||||
# Kein Teil der App, wird nie mitgeliefert.
|
||||
FlixyUITests:
|
||||
HaloUITests:
|
||||
type: bundle.ui-testing
|
||||
platform: iOS
|
||||
sources:
|
||||
- FlixyUITests
|
||||
- HaloUITests
|
||||
dependencies:
|
||||
- target: Flixy
|
||||
- target: Halo
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy.uitests
|
||||
TEST_TARGET_NAME: Flixy
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.uitests
|
||||
TEST_TARGET_NAME: Halo
|
||||
TARGETED_DEVICE_FAMILY: "1,2"
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
GENERATE_INFOPLIST_FILE: YES
|
||||
@@ -303,13 +303,13 @@ targets:
|
||||
sources:
|
||||
- path: DownloadWidget
|
||||
dependencies:
|
||||
- package: FlixyKit
|
||||
product: FlixyDownloads
|
||||
- package: FlixyKit
|
||||
product: FlixyDesign
|
||||
- package: HaloKit
|
||||
product: HaloDownloads
|
||||
- package: HaloKit
|
||||
product: HaloDesign
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy.downloadwidget
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.downloadwidget
|
||||
PRODUCT_NAME: DownloadWidget
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
SKIP_INSTALL: YES
|
||||
@@ -320,6 +320,6 @@ targets:
|
||||
info:
|
||||
path: DownloadWidget/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Flixy Downloads
|
||||
CFBundleDisplayName: Halo Downloads
|
||||
NSExtension:
|
||||
NSExtensionPointIdentifier: com.apple.widgetkit-extension
|
||||
|
||||
Reference in New Issue
Block a user