diff --git a/Flixy/Flixy-macCatalyst.entitlements b/Flixy/Flixy-macCatalyst.entitlements
deleted file mode 100644
index d0cd68a..0000000
--- a/Flixy/Flixy-macCatalyst.entitlements
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
- com.apple.security.app-sandbox
-
- com.apple.security.network.client
-
-
-
diff --git a/Flixy/FlixyApp.swift b/Flixy/FlixyApp.swift
index 173e90a..1f7a026 100644
--- a/Flixy/FlixyApp.swift
+++ b/Flixy/FlixyApp.swift
@@ -71,17 +71,18 @@ struct FlixyApp: App {
// aufgeht: schmaler als das hier klappt die Seitenleiste zu
// und die Reihen zeigen anderthalb Kacheln.
//
- // `os(macOS)` allein reichte nicht — unter Catalyst gilt
- // `os(iOS)`, und genau deshalb öffnete das Fenster wieder in
- // Notizzettelgröße.
- #if os(macOS) || targetEnvironment(macCatalyst)
- .frame(minWidth: 900, minHeight: 620)
- #endif
- #if targetEnvironment(macCatalyst)
- // Unter Catalyst gibt es `defaultSize` nicht; die Größe hängt
- // an der Szene.
+ // Zur Laufzeit gefragt, nicht beim Übersetzen: auf dem Mac
+ // läuft genau dieser iOS-Bau, und `os(macOS)` ist dabei
+ // falsch. Ohne Untergrenze öffnet das Fenster in
+ // Notizzettelgröße, und darin fällt der Aufmacher in sich
+ // zusammen, weil seine Abstände dehnbar sind.
+ .frame(
+ minWidth: FlixyPlatform.isMac ? 900 : nil,
+ minHeight: FlixyPlatform.isMac ? 620 : nil
+ )
+ // `defaultSize` gibt es hier nicht; die Größe hängt an der
+ // Szene.
.task { Self.widenWindow() }
- #endif
.environment(session)
.environment(playback)
.environment(playbackSettings)
@@ -132,13 +133,17 @@ struct FlixyApp: App {
}
#if os(iOS)
-#if targetEnvironment(macCatalyst)
extension FlixyApp {
/// Gibt dem Fenster eine vernünftige Mindestgröße.
///
- /// Unter Catalyst öffnet macOS sonst ein Fenster von der Größe eines
+ /// Auf dem Mac öffnet das System sonst ein Fenster von der Größe eines
/// Notizzettels — und darin fällt der Aufmacher in sich zusammen, weil
/// seine Abstände dehnbar sind.
+ ///
+ /// `sizeRestrictions` gibt es nur dort, wo Fenster sich überhaupt frei
+ /// ziehen lassen; auf dem iPhone ist die Eigenschaft `nil`. Das
+ /// Fragezeichen ist deshalb die ganze Fallunterscheidung — ein Aufruf
+ /// auf einem Gerät ohne Fenster tut schlicht nichts.
@MainActor
static func widenWindow() {
for scene in UIApplication.shared.connectedScenes {
@@ -151,7 +156,6 @@ extension FlixyApp {
}
}
}
-#endif
/// Der klassische App-Delegat, für das eine, was SwiftUI nicht abdeckt.
@MainActor
diff --git a/Flixy/Info-macOS.plist b/Flixy/Info-macOS.plist
deleted file mode 100644
index 7bf8f94..0000000
--- a/Flixy/Info-macOS.plist
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- Flixy
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- $(PRODUCT_NAME)
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- 1.0
- CFBundleURLTypes
-
-
- CFBundleURLName
- com.scarriffleservices.flixy.auth
- CFBundleURLSchemes
-
- com.scarriffleservices.flixy
-
-
-
- CFBundleVersion
- 1
- ITSAppUsesNonExemptEncryption
-
- LSApplicationCategoryType
- public.app-category.entertainment
- NSAppTransportSecurity
-
- NSAllowsLocalNetworking
-
-
- NSLocalNetworkUsageDescription
- Flixy benötigt Zugriff auf das lokale Netzwerk, um deinen Medienserver zu finden und Filme direkt von ihm zu laden.
- UIBackgroundModes
-
- audio
-
- UILaunchScreen
-
- UIColorName
- LaunchBackground
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UIUserInterfaceStyle
- Dark
-
-
diff --git a/project.yml b/project.yml
index e9b87c3..03812b7 100644
--- a/project.yml
+++ b/project.yml
@@ -44,17 +44,9 @@ targets:
# einzeln ein — dann fehlt das Icon, ohne dass irgendwo ein Fehler
# auftaucht.
#
- # Die Info.plist des jeweils anderen Ziels muss ebenfalls hinaus.
- # XcodeGen nimmt nur die eigene automatisch heraus; die fremde landet
- # als gewöhnliche Ressource unverarbeitet im Bündel — mitsamt dem
- # wörtlichen $(PRODUCT_BUNDLE_IDENTIFIER). Beim Installieren liest das
- # Gerät dann diese statt der richtigen und lehnt die App als „not a
- # valid bundle" ab.
- path: Flixy
excludes:
- "AppIcon.icon"
- - "Info-macOS.plist"
- - "Flixy-macCatalyst.entitlements"
- path: Flixy/AppIcon.icon
type: file
dependencies:
@@ -163,107 +155,6 @@ targets:
Flixy benötigt Zugriff auf das lokale Netzwerk, um deinen
Plex-Server zu finden und Medien direkt von ihm zu laden.
- # 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, dasselbe Aussehen.
- #
- # 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 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: iOS
- scheme: {}
- sources:
- # Siehe Flixy: umgekehrt genauso, sonst trägt das Mac-Bündel die
- # Info.plist des iPhones in seinen Ressourcen.
- - path: Flixy
- excludes:
- - "AppIcon.icon"
- - "Info.plist"
- - path: Flixy/AppIcon.icon
- type: file
- dependencies:
- - package: FlixyKit
- product: MediaKit
- - package: FlixyKit
- product: PlexKit
- - package: FlixyKit
- product: JellyfinKit
- - package: FlixyKit
- product: FlixyDesign
- - package: FlixyKit
- product: FlixyPlayback
- - package: FlixyKit
- 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
- # **Eine eigene Kennung, nicht dieselbe wie die iPhone-App.**
- #
- # Hier stand `DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER: NO`, und
- # damit trugen beide Programme `com.scarriffleservices.flixy`. Auf
- # einem Rechner, auf dem die iPad-Fassung installiert ist — und auf
- # einem Apple-Silicon-Mac ist sie das leicht — gibt es die Kennung
- # dann zweimal. Das System entscheidet sich für **eines** davon, und
- # nicht unbedingt für das eben gebaute: der Start sieht aus, als
- # geschähe nichts.
- #
- # Voreingestellt ist bei Apple `YES`, und zwar genau deshalb. Daraus
- # wird `maccatalyst.com.scarriffleservices.flixy`.
- DERIVE_MACCATALYST_PRODUCT_BUNDLE_IDENTIFIER: YES
- PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.flixy
- PRODUCT_NAME: Flixy
- ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon
- TARGETED_DEVICE_FAMILY: "2"
- # Richtig signiert, wie die iPhone-App auch.
- #
- # Vorher war es eine Ad-hoc-Signatur ohne Team, damit ein Bau zum
- # Ansehen nicht nach dem Schlüsselbund fragt. Nur legt Flixy den
- # Server-Token im Schlüsselbund ab, und einem Sandbox-Programm ohne
- # `application-identifier` verweigert der das — die Anmeldung hielte
- # keinen Neustart aus.
- CODE_SIGN_STYLE: Automatic
- ENABLE_HARDENED_RUNTIME: NO
- CODE_SIGN_ENTITLEMENTS: Flixy/Flixy-macCatalyst.entitlements
- 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
- CFBundleURLTypes:
- - CFBundleURLName: com.scarriffleservices.flixy.auth
- CFBundleURLSchemes:
- - com.scarriffleservices.flixy
- ITSAppUsesNonExemptEncryption: false
- NSAppTransportSecurity:
- NSAllowsLocalNetworking: true
- NSLocalNetworkUsageDescription: >-
- Flixy benötigt Zugriff auf das lokale Netzwerk, um deinen
- Medienserver zu finden und Filme direkt von ihm zu laden.
-
# 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.
@@ -282,6 +173,10 @@ targets:
CODE_SIGN_STYLE: Automatic
GENERATE_INFOPLIST_FILE: YES
+ # 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, dasselbe Aussehen.
DownloadWidget:
type: app-extension
platform: iOS