Blog · Produit

ImageForge 1.3.1 : une fenêtre, une seule file

Le même symptôme sur les deux plateformes — vous donnez plusieurs images à l'app et elle s'ouvre vide — avait en fait deux causes totalement distinctes. Voici ce qu'était chacune.

v1.3.1 · Mac + Windows

Un signalement d'utilisateur, deux systèmes d'exploitation, deux causes profondes sans rien en commun. Sur le Mac, déposer quatre images sur l'icône du Dock ouvrait quatre fenêtres et mettait le lot dans l'une d'elles. Sur Windows, « Ouvrir avec ImageForge » ouvrait l'app avec une liste vide, quel que soit le nombre de fichiers. La 1.3.1 corrige les deux — et la façon dont chacune cassait mérite d'être racontée.

Le Mac ouvrait une fenêtre par image

Vous déposiez quatre images sur l'icône du Dock et quatre fenêtres apparaissaient, chacune avec sa liste vide, toutes en concurrence pour recevoir le lot. La cause n'était pas dans notre code : la fenêtre principale était un WindowGroup SwiftUI, et un WindowGroup ouvre une fenêtre par document lorsque macOS transmet l'Apple Event d'ouverture. La trace système le montre sans ambiguïté : un seul événement portant quatre fichiers, puis quatre fenêtres créées, le tout avant que notre code n'ait vu la moindre URL. Le lot atterrissait dans l'une d'elles sans qu'on puisse décider laquelle passait devant, si bien que l'app semblait souvent s'être ouverte sans rien à compresser, et réessayer ne faisait qu'ajouter des fenêtres vides.

Le correctif n'a pas consisté à entourer le problème de code défensif, mais à déclarer ce que l'app a toujours été : une fenêtre avec une seule file. La scène est désormais un Window SwiftUI, une instance unique que ni l'Apple Event ni quoi que ce soit d'autre ne peut dupliquer. « Nouvelle fenêtre » quitte le menu Fichier pour la même raison : si vous fermez la fenêtre, rouvrez-la avec Fenêtre ▸ Fenêtre ImageForge (⌘0), en cliquant sur l'icône du Dock ou depuis l'icône de la barre des menus.

Windows ne lisait tout simplement pas les fichiers

L'app Windows déclarait son association de types de fichiers depuis la toute première version : Windows proposait donc « Ouvrir avec ImageForge » et acceptait les fichiers déposés sur son icône. Sauf qu'elle ne les lisait jamais : WinUI fait passer toutes les activations par une seule méthode de démarrage, et la nôtre créait la fenêtre en jetant les arguments. L'association était décorative — l'app s'ouvrait avec une liste vide, que vous lui donniez une image ou vingt.

Le correctif a révélé une hypothèse fausse de notre part. Pour une application de bureau empaquetée, le shell Windows ne transmet pas une sélection en une seule activation : il lance un processus par fichier, chacun avec un seul chemin sur sa ligne de commande. Quatre images, c'était quatre processus. Le correctif a donc deux moitiés : lire les chemins depuis la ligne de commande, et élire un processus principal auquel les autres transmettent leurs fichiers avant de se terminer. Le résultat est ce qu'on attendait depuis le début : une fenêtre, une seule file, quel que soit le nombre de fichiers sélectionnés.

Deux bugs, une leçon

Les deux bugs vivaient à la frontière entre l'app et le système d'exploitation — la partie qu'aucun test unitaire ne couvre, parce que la seule façon de savoir ce que fait vraiment le système, c'est de le regarder faire. Tous deux ont été trouvés en lisant des traces système plutôt qu'en raisonnant sur le code, et dans les deux cas le code faisait exactement ce qu'on lui avait demandé. La 1.3.1 est disponible sur le Mac App Store et le Microsoft Store ; comme toujours, tout se passe sur votre machine et rien n'est jamais envoyé.

Obtenez ImageForge.

Gratuit sur le Mac App Store et le Microsoft Store — le même moteur local sur les deux. La 1.3.1 est disponible.

À lire ensuite