Ein Regal über der App — und ein Weg aus dem Player heraus
**Das Regal.** Wer im tvOS-Menü über der App steht, sah bisher das Icon noch einmal gross. Jetzt stehen dort „Weiterschauen", „Als Nächstes" und die Neuzugänge als Plakate, mit Fortschrittsbalken; ein Druck spielt ab, ein Wisch nach unten öffnet die Detailseite. **Warum es dafür eine App-Gruppe braucht.** Das Regal zeichnet eine eigene Erweiterung, also ein anderer Prozess mit eigener Sandbox — und tvOS ruft sie auf, während die App **nicht** läuft, mit weniger als einer Sekunde Zeit. Kein Netzabruf, keine Anmeldung, kein Blättern. Also legt die App beim Laden der Startseite hin, was das Regal braucht, und sonst nichts: Titel, Bildadresse, Kennung, Fortschritt. Eine Datei, ein `JSONDecoder`, fertig. Die Bildadressen tragen den Zugangsschlüssel, weil Jellyfin ihn für Bilder verlangt und die Erweiterung ihn sonst nirgends herbekäme. Die Datei liegt in der App-Gruppe — erreichbar für die App und ihre Erweiterungen, für sonst niemanden. Der Schlüsselbund bleibt, wo er ist. **Und der Fehler, den du gefunden hast.** Solange der Stream noch ausgehandelt wurde, gab es keinen Weg zurück: schwarzes Bild, Kreisel, und der Menü-Knopf tat nichts. `AVPlayerViewController` fängt ihn nämlich selbst ab — aber erst, wenn er einen Player mit einem Item hat, und genau den gibt es in dem Moment noch nicht. Der Griff liegt jetzt eine Ebene darüber, wo es ihn vom ersten Bild an gibt. Doppelt ist er nicht: greift Apples Player zu, kommt der Befehl dort gar nicht mehr an. **Was am Gerät noch offen ist.** Die App-Gruppe muss im Entwicklerkonto eingetragen sein, sonst bleibt das Regal leer — im Simulator legt das System sie von selbst an, auf einem echten Apple TV nicht. Geprüft ist, dass die App die Datei schreibt (drei Reihen, richtige Adressen) und dass tvOS das Schema kennt. Dass das Regal beim Darüberstehen auch zeichnet, lässt sich ohne Fernbedienung nicht auslösen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
e2714e058e
commit
e801502c7a
+38
@@ -221,6 +221,7 @@ targets:
|
||||
# ModelContainer und kein SwiftData.
|
||||
- package: FlixyKit
|
||||
product: FlixyDownloads
|
||||
- target: FlixyTopShelf
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy.tv
|
||||
@@ -232,12 +233,20 @@ targets:
|
||||
# und der Katalog liegt unter FlixyTV/Resources.
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME: "App Icon & Top Shelf Image"
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
CODE_SIGN_ENTITLEMENTS: FlixyTV/Flixy.entitlements
|
||||
info:
|
||||
path: FlixyTV/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Flixy
|
||||
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
|
||||
CFBundleURLSchemes:
|
||||
- flixy
|
||||
# Was hier **nicht** steht, und warum:
|
||||
#
|
||||
# UILaunchScreen — tvOS hat kein Startbild dieser Art.
|
||||
@@ -252,6 +261,35 @@ targets:
|
||||
Flixy benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Jellyfin-Server zu erreichen.
|
||||
|
||||
# Das Regal über der App im tvOS-Menü.
|
||||
#
|
||||
# Eine eigene Erweiterung, weil tvOS sie zeichnet, während die App **nicht**
|
||||
# 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:
|
||||
type: tv-app-extension
|
||||
platform: tvOS
|
||||
sources:
|
||||
- path: FlixyTopShelf
|
||||
dependencies:
|
||||
- package: FlixyKit
|
||||
product: MediaKit
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy.tv.topshelf
|
||||
PRODUCT_NAME: FlixyTopShelf
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
CODE_SIGN_ENTITLEMENTS: FlixyTopShelf/FlixyTopShelf.entitlements
|
||||
SKIP_INSTALL: YES
|
||||
info:
|
||||
path: FlixyTopShelf/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Flixy
|
||||
NSExtension:
|
||||
NSExtensionPointIdentifier: com.apple.tv-top-shelf
|
||||
NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).TopShelfProvider
|
||||
|
||||
# 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.
|
||||
|
||||
Reference in New Issue
Block a user