Die Markenbilder für den Fernseher waren nachempfunden: ein Dreieck, das
ungefähr aussah wie das im App-Icon, mit Farben aus icon.json geraten.
Jetzt sind es dieselben.
**Die Form aus play.svg gerechnet, nicht nachgezeichnet.** Der Pfad
beschreibt ein gleichseitiges Dreieck mit 592,76 Punkten Seite und 54,7
Punkten Eckenradius. Aus diesen Zahlen entsteht die Silhouette — und
zwar über ein um den Radius eingerücktes Dreieck mit rundem Strich, was
nicht eine Annäherung an die Bögen ist, sondern genau sie.
**Die Farben gemessen, nicht geschätzt.** In icon.json stehen
Ausgangsfarben für einen automatischen Verlauf, und wie Icon Composer den
aufspannt, steht nirgends. Also aus dem gerenderten iOS-Icon abgelesen:
Grund 160,112,255 nach 120,69,255, Zeichen 224,152,255 nach 170,97,255,
dazu der helle Saum und der weiche Schatten aus der Gruppe.
**Zwei Dinge, die erst im Vergleich auffielen.** Den optischen Versatz
nach rechts hatte ich auf die Leinwandbreite bezogen — auf dem
quadratischen iOS-Icon dasselbe, auf der breiten Fernseherleinwand
sichtbar zu viel. Er bezieht sich jetzt auf das Zeichen. Und der helle
Saum fehlte ganz; ohne ihn wirkt die Fläche aufgeklebt statt aufliegend.
Das Skript liegt als Tools/TVBrandAssets.py bei. Ändert sich die Marke,
läuft es einmal und alle fünf Grössen stimmen wieder — von Hand wären es
zehn Dateien.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Das leere Gerüst: eigene Wurzel FlixyTVApp, eigenes Target FlixyTV in
project.yml, eigener Asset-Katalog. Es beweist Target, Icon, Signierung
und Paketauflösung auf einen Schlag — bevor eine Zeile Logik daran hängt.
**Das Icon von Hand gebaut.** Icon Composer deckt iOS, macOS und watchOS
ab, tvOS nicht: der Fernseher verlangt gestapelte Bilder, damit die
Parallaxe beim Wischen etwas zu bewegen hat. Zwei Ebenen aus derselben
Marke — Verlauf hinten, Dreieck vorn —, dazu App-Store-Icon und beide
Top-Shelf-Bilder. Ohne das breite lehnt App Store Connect den Upload mit
90513 ab.
**Zwei Annahmen aus dem Plan haben sich beim Bauen erledigt.**
PlexWebAuthenticator übersetzt nicht: ASWebAuthenticationSession steht
zwar im tvOS-SDK, aber presentationContextProvider, cancel() und der
Rest sind dort nicht verfügbar. Der Typ bleibt trotzdem stehen — als
Attrappe, die sofort „ging nicht" meldet. Ihn herauszuschneiden hiesse,
die Zustandsmaschine der Anmeldung für eine Plattform zu spalten, die
diesen Zweig nie betritt. Dieselbe Bauform wie bei OrientationLock.
NowPlaying wartet auf den Player in Schritt sieben.
**Und eine Messung statt einer Vermutung.** Der Plan führte zwei offene
Annahmen über den Sicherheitsrand. Der Simulator beantwortet beide:
SwiftUI legt ihn von selbst an, und er misst sechzig oben und unten,
achtzig seitlich — nicht neunzig. Nutzfläche 1760×960.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>