ImageForge 1.3.1: ein Fenster, eine Liste
Dasselbe Symptom auf beiden Plattformen – man übergibt der App mehrere Bilder und sie öffnet sich leer – hatte zwei völlig verschiedene Ursachen. Hier ist, was dahintersteckte.
Dasselbe Symptom auf beiden Plattformen – man übergibt der App mehrere Bilder und sie öffnet sich leer – hatte zwei völlig verschiedene Ursachen. Hier ist, was dahintersteckte.
Eine Nutzermeldung, zwei Betriebssysteme, zwei Ursachen ohne jede Gemeinsamkeit. Auf dem Mac öffnete das Ziehen von vier Bildern auf das Dock-Symbol vier Fenster und legte den Stapel in eines davon. Unter Windows öffnete „Öffnen mit ImageForge“ die App mit leerer Liste, egal wie viele Dateien man ihr gab. 1.3.1 behebt beides — und wie jeweils etwas kaputtging, ist eine Geschichte wert.
Man zog vier Bilder auf das Dock-Symbol und es erschienen vier Fenster, jedes mit seiner eigenen leeren Liste, alle im Wettlauf um den Stapel. Die Ursache lag nicht in unserem Code: Das Hauptfenster war eine SwiftUI-WindowGroup, und eine WindowGroup öffnet ein Fenster pro Dokument, wenn macOS das Apple Event zum Öffnen zustellt. Die System-Trace zeigt es unmissverständlich: ein einziges Event mit vier Dateien und danach vier erzeugte Fenster – alles, bevor unser Code auch nur eine URL gesehen hatte. Der Stapel landete in einem davon, ohne dass sich steuern ließ, welches nach vorne kam. Deshalb sah es oft so aus, als hätte die App nichts zu komprimieren geöffnet, und ein zweiter Versuch brachte nur weitere leere Fenster.
Die Lösung bestand nicht darin, das Problem mit defensivem Code zu umgeben, sondern zu erklären, was die App immer war: ein Fenster mit einer Liste. Die Szene ist jetzt ein SwiftUI-Window, eine einzige Instanz, die weder das Apple Event noch sonst etwas duplizieren kann. Aus demselben Grund entfällt „Neues Fenster“ im Menü „Ablage“: Wenn Sie das Fenster schließen, holen Sie es über Fenster ▸ ImageForge-Fenster (⌘0), per Klick auf das Dock-Symbol oder über das Symbol in der Menüleiste zurück.
Die Windows-App deklarierte ihre Dateitypzuordnung seit der allerersten Version, also bot Windows „Öffnen mit ImageForge“ an und akzeptierte Dateien, die man auf ihr Symbol zog. Nur gelesen hat sie sie nie: WinUI leitet jede Aktivierung durch eine einzige Startmethode, und unsere erzeugte das Fenster und verwarf die Argumente. Die Zuordnung war Dekoration — die App öffnete sich mit leerer Liste, ob man ihr ein Bild übergab oder zwanzig.
Beim Beheben kam etwas heraus, das wir falsch angenommen hatten. Bei einer paketierten Desktop-App übergibt die Windows-Shell eine Auswahl nicht als eine Aktivierung: Sie startet einen Prozess pro Datei, jeder mit einem einzigen Pfad in der Befehlszeile. Vier Bilder waren vier Prozesse. Der Fix hat deshalb zwei Hälften: die Pfade aus der Befehlszeile lesen und einen Hauptprozess wählen, dem die anderen ihre Dateien übergeben, bevor sie sich beenden. Das Ergebnis ist das, was man von Anfang an erwartet hätte — ein Fenster, eine Liste, egal wie viele Dateien Sie auswählen.
Beide Fehler saßen an der Grenze zwischen App und Betriebssystem — genau dem Teil, den kein Unit-Test abdeckt, weil man nur durch Zusehen erfährt, was das System wirklich tut. Beide wurden durch das Lesen von System-Traces gefunden, nicht durch Nachdenken über den Code, und in beiden Fällen tat der Code genau das, was wir ihm gesagt hatten. 1.3.1 ist im Mac App Store und im Microsoft Store verfügbar; wie immer läuft alles auf Ihrem Gerät und nichts wird jemals hochgeladen.
Kostenlos im Mac App Store und im Microsoft Store — dieselbe lokale Engine auf beiden. 1.3.1 ist jetzt verfügbar.