Halo heisst ab hier Flaro — die Marke stand im Weg
Der Upload zu App Store Connect scheiterte am Namen. „Halo" ist eine eingetragene Marke von Microsoft; im App Store heisst zwar keine App exakt so, aber reservierte und markenrechtlich belegte Namen tauchen in keiner Suche auf. Der einzige verlässliche Test war die Eingabe dort, und die ging daneben. **Der Name wurde diesmal vorher geprüft.** Zwanzig Kandidaten gegen den deutschen und amerikanischen App Store, auf exakte Treffer und auf ähnliche Namen. „Kavo" wäre dieselbe Wand gewesen — exakt belegt in beiden Stores, in Deutschland von KaVo Dental GmbH. „Flare" ist mit 42 ähnlichen Apps je Store der am dichtesten besetzte Name der ganzen Runde. **Flaro** ist in beiden frei und liest sich als eigenes Wort, nicht als Flare mit Tippfehler. Das bleibt eine Store-Suche und keine Markenrecherche — reservierte Namen ohne veröffentlichte App sieht sie nicht. Aber es ist mehr Prüfung, als beim letzten Mal stattfand. --- 2160 Textvorkommen in 273 Dateien, 49 Pfade. Betroffen ist diesmal auch der Server: `Flaro.Api`, `Flaro.Core`, `Flaro.Data`, `Flaro.Media`, `Flaro.Metadata`, `FlaroContext`, `FlaroPaths`, `flaro.db`, die Variablen `FLARO_DATA`, `FLARO_CACHE`, `FLARO_TRANSCODE`, `FLARO_WRITE_SIDECARS`, und das Image. **Vor dem Ersetzen geprüft**, ob „halo" irgendwo als Teil eines anderen Wortes steckt — und ob es im TMDB-Token vorkommt. Tat es nicht; ein blindes Ersetzen hätte den sonst zerlegt. `docs/superpowers/specs/` bleibt wie beim letzten Mal unangetastet: datierte Entwurfsdokumente sind ein Protokoll getroffener Entscheidungen. Das Server-Dokument hat stattdessen einen Nachtrag bekommen, damit es niemanden in die Irre führt. **Die Bundle-ID wandert mit**, zum zweiten Mal an einem Tag: `com.scarriffleservices.flaro`. Wer die vorige Fassung installiert hat, hat jetzt zwei Karteileichen auf dem Gerät — beide löschen, dann ist Ruhe. 308 Server-Tests grün, 368 im Swift-Paket, null Warnungen. iOS und tvOS bauen, das Image baut, und ein frischer Container läuft durch Einrichtung und Anmeldung. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f98b995050
commit
a7cf6c5def
+68
-68
@@ -1,4 +1,4 @@
|
||||
name: Halo
|
||||
name: Flaro
|
||||
|
||||
options:
|
||||
bundleIdPrefix: com.scarriffleservices
|
||||
@@ -19,11 +19,11 @@ settings:
|
||||
SWIFT_STRICT_CONCURRENCY: complete
|
||||
|
||||
packages:
|
||||
HaloKit:
|
||||
path: Packages/HaloKit
|
||||
FlaroKit:
|
||||
path: Packages/FlaroKit
|
||||
|
||||
targets:
|
||||
Halo:
|
||||
Flaro:
|
||||
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:
|
||||
- HaloUITests
|
||||
- FlaroUITests
|
||||
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: Halo
|
||||
- path: Flaro
|
||||
excludes:
|
||||
- "AppIcon.icon"
|
||||
- path: Halo/AppIcon.icon
|
||||
- path: Flaro/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: HaloKit
|
||||
- package: FlaroKit
|
||||
product: MediaKit
|
||||
# Der Server. Steht auf der neutralen Schicht, nicht darin — kommt ein
|
||||
# zweiter dazu, steht er daneben.
|
||||
- package: HaloKit
|
||||
- package: FlaroKit
|
||||
product: JellyfinKit
|
||||
- package: HaloKit
|
||||
product: HaloDesign
|
||||
- package: HaloKit
|
||||
product: HaloPlayback
|
||||
- package: HaloKit
|
||||
product: HaloDownloads
|
||||
- package: FlaroKit
|
||||
product: FlaroDesign
|
||||
- package: FlaroKit
|
||||
product: FlaroPlayback
|
||||
- package: FlaroKit
|
||||
product: FlaroDownloads
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo
|
||||
PRODUCT_NAME: Halo
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flaro
|
||||
PRODUCT_NAME: Flaro
|
||||
# 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: Halo/Info.plist
|
||||
path: Flaro/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Halo
|
||||
CFBundleDisplayName: Flaro
|
||||
UILaunchScreen:
|
||||
UIColorName: LaunchBackground
|
||||
|
||||
@@ -136,25 +136,25 @@ targets:
|
||||
# Freigabe. Fehlt der Text, verweigert das System sie kommentarlos und
|
||||
# die Serversuche findet dauerhaft nichts.
|
||||
NSLocalNetworkUsageDescription: >-
|
||||
Halo benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Flaro 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: `HaloTV/` gehört nur hierher, `Halo/Session/`
|
||||
# Aussage dieses Blocks: `FlaroTV/` gehört nur hierher, `Flaro/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.
|
||||
HaloTV:
|
||||
FlaroTV:
|
||||
type: application
|
||||
platform: tvOS
|
||||
# Aus demselben Grund ausgeschrieben wie bei Halo — siehe dort.
|
||||
# Aus demselben Grund ausgeschrieben wie bei Flaro — siehe dort.
|
||||
scheme: {}
|
||||
sources:
|
||||
# Die eigenen Ansichten.
|
||||
- path: HaloTV
|
||||
- path: FlaroTV
|
||||
# Die Modelle.
|
||||
- path: Halo/Session
|
||||
- path: Flaro/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: Halo/Views/LoadState.swift
|
||||
- path: Flaro/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: Halo/Views/Player/PlayerModel.swift
|
||||
- path: Flaro/Views/Player/PlayerModel.swift
|
||||
type: file
|
||||
- path: Halo/Views/Player/VideoSurface.swift
|
||||
- path: Flaro/Views/Player/VideoSurface.swift
|
||||
type: file
|
||||
- path: Halo/Branding.swift
|
||||
- path: Flaro/Branding.swift
|
||||
type: file
|
||||
# Die Texte. Dieselben Schlüssel, dieselben Übersetzungen.
|
||||
- path: Halo/Resources/Localizable.xcstrings
|
||||
- path: Flaro/Resources/Localizable.xcstrings
|
||||
type: file
|
||||
dependencies:
|
||||
- package: HaloKit
|
||||
- package: FlaroKit
|
||||
product: MediaKit
|
||||
- package: HaloKit
|
||||
- package: FlaroKit
|
||||
product: JellyfinKit
|
||||
- package: HaloKit
|
||||
product: HaloDesign
|
||||
- package: HaloKit
|
||||
product: HaloPlayback
|
||||
- package: FlaroKit
|
||||
product: FlaroDesign
|
||||
- package: FlaroKit
|
||||
product: FlaroPlayback
|
||||
# Nur damit `PlayerModel` den Typ nennen darf. Angelegt wird nie einer:
|
||||
# HaloTVApp reicht `nil` durch, und damit gibt es auf tvOS auch keinen
|
||||
# FlaroTVApp reicht `nil` durch, und damit gibt es auf tvOS auch keinen
|
||||
# ModelContainer und kein SwiftData.
|
||||
- package: HaloKit
|
||||
product: HaloDownloads
|
||||
- target: HaloTopShelf
|
||||
- package: FlaroKit
|
||||
product: FlaroDownloads
|
||||
- target: FlaroTopShelf
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.tv
|
||||
PRODUCT_NAME: Halo
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flaro.tv
|
||||
PRODUCT_NAME: Flaro
|
||||
# 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 HaloTV/Resources.
|
||||
# und der Katalog liegt unter FlaroTV/Resources.
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME: "App Icon & Top Shelf Image"
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
CODE_SIGN_ENTITLEMENTS: HaloTV/Halo.entitlements
|
||||
CODE_SIGN_ENTITLEMENTS: FlaroTV/Flaro.entitlements
|
||||
info:
|
||||
path: HaloTV/Info.plist
|
||||
path: FlaroTV/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Halo
|
||||
CFBundleDisplayName: Flaro
|
||||
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.halo.topshelf
|
||||
- CFBundleURLName: com.scarriffleservices.flaro.topshelf
|
||||
CFBundleURLSchemes:
|
||||
- halo
|
||||
- flaro
|
||||
# Was hier **nicht** steht, und warum:
|
||||
#
|
||||
# UILaunchScreen — tvOS hat kein Startbild dieser Art.
|
||||
@@ -234,7 +234,7 @@ targets:
|
||||
NSAppTransportSecurity:
|
||||
NSAllowsLocalNetworking: true
|
||||
NSLocalNetworkUsageDescription: >-
|
||||
Halo benötigt Zugriff auf das lokale Netzwerk, um deinen
|
||||
Flaro 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.
|
||||
HaloTopShelf:
|
||||
FlaroTopShelf:
|
||||
type: tv-app-extension
|
||||
platform: tvOS
|
||||
sources:
|
||||
- path: HaloTopShelf
|
||||
- path: FlaroTopShelf
|
||||
dependencies:
|
||||
- package: HaloKit
|
||||
- package: FlaroKit
|
||||
product: MediaKit
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.tv.topshelf
|
||||
PRODUCT_NAME: HaloTopShelf
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flaro.tv.topshelf
|
||||
PRODUCT_NAME: FlaroTopShelf
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
CODE_SIGN_ENTITLEMENTS: HaloTopShelf/HaloTopShelf.entitlements
|
||||
CODE_SIGN_ENTITLEMENTS: FlaroTopShelf/FlaroTopShelf.entitlements
|
||||
SKIP_INSTALL: YES
|
||||
info:
|
||||
path: HaloTopShelf/Info.plist
|
||||
path: FlaroTopShelf/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Halo
|
||||
CFBundleDisplayName: Flaro
|
||||
# **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.
|
||||
HaloUITests:
|
||||
FlaroUITests:
|
||||
type: bundle.ui-testing
|
||||
platform: iOS
|
||||
sources:
|
||||
- HaloUITests
|
||||
- FlaroUITests
|
||||
dependencies:
|
||||
- target: Halo
|
||||
- target: Flaro
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.uitests
|
||||
TEST_TARGET_NAME: Halo
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flaro.uitests
|
||||
TEST_TARGET_NAME: Flaro
|
||||
TARGETED_DEVICE_FAMILY: "1,2"
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
GENERATE_INFOPLIST_FILE: YES
|
||||
@@ -303,13 +303,13 @@ targets:
|
||||
sources:
|
||||
- path: DownloadWidget
|
||||
dependencies:
|
||||
- package: HaloKit
|
||||
product: HaloDownloads
|
||||
- package: HaloKit
|
||||
product: HaloDesign
|
||||
- package: FlaroKit
|
||||
product: FlaroDownloads
|
||||
- package: FlaroKit
|
||||
product: FlaroDesign
|
||||
settings:
|
||||
base:
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.halo.downloadwidget
|
||||
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flaro.downloadwidget
|
||||
PRODUCT_NAME: DownloadWidget
|
||||
CODE_SIGN_STYLE: Automatic
|
||||
SKIP_INSTALL: YES
|
||||
@@ -320,6 +320,6 @@ targets:
|
||||
info:
|
||||
path: DownloadWidget/Info.plist
|
||||
properties:
|
||||
CFBundleDisplayName: Halo Downloads
|
||||
CFBundleDisplayName: Flaro Downloads
|
||||
NSExtension:
|
||||
NSExtensionPointIdentifier: com.apple.widgetkit-extension
|
||||
|
||||
Reference in New Issue
Block a user