Blog · Prodotto

ImageForge 1.3.1: una finestra e un solo elenco

Lo stesso sintomo su entrambe le piattaforme — passi più immagini all'app e si apre vuota — aveva due cause che non c'entrano nulla l'una con l'altra. Ecco quali.

v1.3.1 · Mac + Windows

Una segnalazione di un utente, due sistemi operativi, due cause profonde senza nulla in comune. Sul Mac, trascinare quattro immagini sull'icona del Dock apriva quattro finestre e metteva il lotto in una di esse. Su Windows, “Apri con ImageForge” apriva l'app con l'elenco vuoto, per quanti file le passassi. La 1.3.1 risolve entrambe — e come si rompeva ciascuna vale la pena raccontarlo.

Il Mac apriva una finestra per ogni immagine

Trascinavi quattro immagini sull'icona del Dock e comparivano quattro finestre, ognuna con il suo elenco vuoto, tutte in gara per ricevere il lotto. La causa non era nel nostro codice: la finestra principale era un WindowGroup di SwiftUI, e un WindowGroup apre una finestra per ogni documento quando macOS consegna l'Apple Event di apertura. La traccia di sistema lo mostra senza ambiguità: un solo evento con quattro file e poi quattro finestre create, il tutto prima che il nostro codice avesse visto un solo percorso. Il lotto finiva in una di esse senza poter decidere quale passasse davanti, così spesso sembrava che l'app si fosse aperta senza nulla da comprimere, e riprovare aggiungeva solo altre finestre vuote.

La soluzione non è stata circondare il problema di codice difensivo, ma dichiarare ciò che l'app è sempre stata: una finestra con un solo elenco. La scena ora è un Window di SwiftUI, un'istanza unica che né l'Apple Event né altro può duplicare. Per lo stesso motivo “Nuova finestra” sparisce dal menu Archivio: se chiudi la finestra, la recuperi da Finestra ▸ Finestra ImageForge (⌘0), facendo clic sull'icona del Dock o dall'icona nella barra dei menu.

Windows non leggeva affatto i file

L'app Windows dichiarava la sua associazione dei tipi di file fin dalla primissima versione, quindi Windows offriva “Apri con ImageForge” e accettava i file trascinati sulla sua icona. Solo che non li leggeva mai: WinUI convoglia ogni attivazione in un unico metodo di avvio, e il nostro creava la finestra buttando via gli argomenti. L'associazione era decorativa — l'app si apriva con l'elenco vuoto, che le passassi un'immagine o venti.

Sistemarlo ha portato a galla un presupposto sbagliato. Per un'app desktop pacchettizzata, la shell di Windows non consegna una selezione come un'unica attivazione: avvia un processo per file, ognuno con un solo percorso nella riga di comando. Quattro immagini erano quattro processi. La correzione ha quindi due metà: leggere i percorsi dalla riga di comando ed eleggere un processo principale a cui gli altri passano i propri file prima di uscire. Il risultato è quello che ci si aspettava fin dall'inizio: una finestra e un solo elenco, per quanti file tu selezioni.

Due bug, una lezione

Entrambi i bug vivevano al confine tra l'app e il sistema operativo — la parte che nessun test unitario copre, perché l'unico modo di sapere cosa fa davvero il sistema è guardarlo farlo. Entrambi sono stati trovati leggendo tracce di sistema, non ragionando sul codice, e in entrambi i casi il codice faceva esattamente quello che gli avevamo detto. La 1.3.1 è disponibile sul Mac App Store e sul Microsoft Store; come sempre, tutto avviene sul tuo dispositivo e non viene mai caricato nulla.

Scarica ImageForge.

Gratis sul Mac App Store e sul Microsoft Store — lo stesso motore locale su entrambi. La 1.3.1 è disponibile.

Continua a leggere