Blog · Product

ImageForge 1.3.1: één venster, één lijst

Hetzelfde symptoom op beide platformen — geef de app meerdere afbeeldingen en hij opent leeg — bleek twee volledig losstaande oorzaken te hebben. Dit was elk van beide.

v1.3.1 · Mac + Windows

Eén melding van een gebruiker, twee besturingssystemen, twee oorzaken zonder enig verband. Op de Mac opende het slepen van vier afbeeldingen naar het Dock-symbool vier vensters en belandde de reeks in één ervan. Op Windows opende “Openen met ImageForge” de app met een lege lijst, hoeveel bestanden je ook meegaf. 1.3.1 lost beide op — en hoe ze stukgingen is het vertellen waard.

De Mac opende één venster per afbeelding

Je sleepte vier afbeeldingen naar het Dock-symbool en er verschenen vier vensters, elk met een eigen lege lijst, allemaal in de race om de reeks te ontvangen. De oorzaak lag niet in onze code: het hoofdvenster was een SwiftUI-WindowGroup, en een WindowGroup opent één venster per document zodra macOS het Apple Event voor openen aflevert. De systeemtrace laat het ondubbelzinnig zien: één gebeurtenis met vier bestanden, en daarna vier aangemaakte vensters — allemaal voordat onze code ook maar één pad had gezien. De reeks kwam in één ervan terecht zonder dat we konden bepalen welk venster vooraan kwam, waardoor het vaak leek alsof de app zonder werk was geopend en het opnieuw proberen alleen meer lege vensters opleverde.

De oplossing was niet om het probleem in defensieve code te verpakken, maar om te verklaren wat de app altijd al was: één venster met één lijst. De scène is nu een SwiftUI-Window, één instantie die het Apple Event noch iets anders kan dupliceren. Om dezelfde reden is “Nieuw venster” uit het menu Archief verdwenen: sluit je het venster, haal het dan terug via Venster ▸ ImageForge-venster (⌘0), door op het Dock-symbool te klikken of via het symbool in de menubalk.

Windows las de bestanden helemaal niet

De Windows-app declareerde zijn bestandstypekoppeling al vanaf de allereerste release, dus Windows bood “Openen met ImageForge” aan en accepteerde bestanden die je op het pictogram sleepte. Alleen las hij ze nooit: WinUI leidt elke activering door één opstartmethode, en die van ons maakte het venster aan en gooide de argumenten weg. De koppeling was decoratief — de app opende met een lege lijst, of je hem nu één afbeelding gaf of twintig.

Bij het oplossen kwam een verkeerde aanname van ons boven water. Bij een verpakte desktop-app levert de Windows-shell een selectie niet als één activering af: hij start één proces per bestand, elk met één pad op de opdrachtregel. Vier afbeeldingen waren vier processen. De oplossing bestaat dus uit twee helften: de paden van de opdrachtregel lezen, en een hoofdproces kiezen waaraan de andere hun bestanden doorgeven voordat ze afsluiten. Het resultaat is wat je vanaf het begin zou verwachten — één venster, één lijst, hoeveel bestanden je ook selecteert.

Twee bugs, één les

Beide bugs leefden op de grens tussen de app en het besturingssysteem — precies het deel dat geen enkele unittest dekt, omdat je alleen door te kijken ontdekt wat het systeem echt doet. Beide werden gevonden door systeemtraces te lezen, niet door over de code na te denken, en in beide gevallen deed de code precies wat wij hadden gezegd. 1.3.1 is beschikbaar in de Mac App Store en de Microsoft Store; zoals altijd gebeurt alles op je eigen apparaat en wordt er nooit iets geüpload.

Haal ImageForge.

Gratis in de Mac App Store en de Microsoft Store — dezelfde lokale engine op beide. 1.3.1 is nu beschikbaar.

Lees verder