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