Mac: doch Catalyst — das iPad-Aussehen, ohne es nachzubauen

Deine Frage war die richtige. Eine native Mac-App sah an zwei Dutzend Stellen
anders aus, weil AppKit dieselben Dinge anders misst: Schriftgrößen,
Spaltenbreiten, Formularstil. Jede davon habe ich heute einzeln nachgezogen —
und wäre bei der nächsten Ansicht wieder von vorn angefangen.

Mac Catalyst nimmt die iPad-Oberfläche unverändert. Nicht nachgebaut, sondern
dieselbe: gleiche Schrift, gleiche Leiste, gleiche Abstände, und zwar auch in
allem, was noch kommt.

**Ich habe „MKV geht dann nie" gesagt. Das war falsch.** Ohne VLC spielen sie
nicht *unverändert* — der Server rechnet sie um, und das kann er längst. Nur
war die App darauf nicht vorbereitet: die Entscheidung hätte weiterhin VLC
gewählt, den es dort nicht gibt, und das Bild wäre schwarz geblieben.
`PlaybackSettings.hasFallbackEngine` fragt jetzt, ob es den zweiten Spieler auf
dieser Plattform überhaupt gibt. Wo nicht, übernimmt der Server. Das kostet ihn
Rechenzeit und sieht man nicht.

Unverändert abspielen kommt später zurück — dafür braucht es einen Decoder mit
einem Catalyst-Teil. VLCKits Binärpaket hat keinen:

    ios-arm64  ios-simulator  macos-arm64_x86_64  tvos  watchos  xros

Drei Stellen mussten Catalyst ausdrücklich ausnehmen: dort gilt `os(iOS)`, aber
ActivityKit gibt es nicht — die Typen sind da und jeder Aufruf ist als nicht
verfügbar markiert. Das ist die Art Falle, die erst der Compiler findet.

Die Anpassungen von vorhin bleiben stehen, obwohl Catalyst sie nicht braucht:
FlixyDesign baut für macOS mit, und `swift test` läuft dort. Sie kosten nichts
und halten den Weg zu einer nativen Mac-App offen, falls VLC ihn eines Tages
nötig macht.

263 Tests grün, iOS baut unverändert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-13 16:13:10 +02:00
co-authored by Claude Opus 5
parent 4150724394
commit f296d7ae1a
6 changed files with 90 additions and 22 deletions
+34 -15
View File
@@ -148,25 +148,27 @@ targets:
# Die Live Activity für Downloads. Eine eigene Erweiterung, weil iOS die
# Darstellung im Sperrbildschirm in einem getrennten Prozess zeichnet — die
# App selbst läuft zu dem Zeitpunkt meist gar nicht.
# Dieselben Quellen, eigenes Ziel.
# Dieselben Quellen, dasselbe Aussehen.
#
# Ein gemeinsames Target für beide Plattformen wäre weniger Text, aber die
# Info.plist ist voller iOS-Angaben — Startbildschirm, erlaubte
# Ausrichtungen, Live Activities. Die müssten dann alle bedingt werden, und
# jede spätere Änderung an der iOS-Seite ginge über eine Stelle, die auch
# den Mac betrifft. Zwei Ziele sind ein paar Zeilen mehr und ein Sorge
# weniger.
# Mac Catalyst statt einer eigenen Mac-App: die iPad-Oberfläche läuft damit
# unverändert auf dem Mac — gleiche Schriftgrößen, gleiche Seitenleiste,
# gleiche Abstände. Eine native Mac-App war der erste Versuch; sie sah an
# zwei Dutzend Stellen anders aus, weil AppKit dieselben Dinge anders misst,
# und jede davon hätte einzeln nachgezogen werden müssen.
#
# Ohne DownloadWidget (Live Activities gibt es auf dem Mac nicht) und ohne
# FlixyVLC: das Binärpaket ist auf iOS festgelegt. Der Player fällt dort
# allein auf den Systemplayer zurück — was er nicht öffnen kann, sagt er.
# Ohne DownloadWidget (Live Activities gibt es hier nicht) und **ohne
# FlixyVLC**: dessen Binärpaket hat keinen Teil für Catalyst. MKV und DTS
# werden dort deshalb vom Server umgerechnet statt unverändert übertragen —
# siehe `PlaybackSettings.hasFallbackEngine`.
FlixyMac:
type: application
platform: macOS
platform: iOS
sources:
- path: Flixy
excludes:
- "AppIcon.icon"
- path: Flixy/AppIcon.icon
type: file
dependencies:
- package: FlixyKit
product: MediaKit
@@ -182,25 +184,42 @@ targets:
product: FlixyDownloads
settings:
base:
SUPPORTS_MACCATALYST: YES
# Nur Mac: dieses Ziel ist nicht dazu da, aufs iPhone zu wandern.
SUPPORTED_PLATFORMS: macosx
# „An das iPad angeglichen" statt „für den Mac optimiert" — genau
# darum geht es.
MACCATALYST_OPTIMIZE_FOR_MAC: NO
DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER: NO
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy
PRODUCT_NAME: Flixy
# Selbst signiert, ohne Entwicklerkonto: ein Build zum Ansehen soll
# nicht jedes Mal nach dem Schlüsselbund-Passwort fragen.
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
TARGETED_DEVICE_FAMILY: "2"
# Selbst signiert: ein Build zum Ansehen soll nicht jedes Mal nach dem
# Schlüsselbund-Passwort fragen.
CODE_SIGN_STYLE: Manual
CODE_SIGN_IDENTITY: "-"
DEVELOPMENT_TEAM: ""
ENABLE_HARDENED_RUNTIME: NO
COMBINE_HIDPI_IMAGES: YES
info:
path: Flixy/Info-macOS.plist
properties:
CFBundleDisplayName: Flixy
UILaunchScreen:
UIColorName: LaunchBackground
UIUserInterfaceStyle: Dark
UISupportedInterfaceOrientations:
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
UIBackgroundModes:
- audio
LSApplicationCategoryType: public.app-category.entertainment
NSHumanReadableCopyright: ""
CFBundleURLTypes:
- CFBundleURLName: com.scarriffleservices.flixy.auth
CFBundleURLSchemes:
- com.scarriffleservices.flixy
ITSAppUsesNonExemptEncryption: false
NSAppTransportSecurity:
NSAllowsLocalNetworking: true