FAQ
Le domande che i team di sviluppo e rilascio fanno per prime.
Licenze, dipendenze dell'agente di build, firma e in cosa questa strada differisce dal percorso capture-first pensato per le applicazioni legacy.
È la stessa cosa della vostra cattura di applicazioni legacy?
No, e la distinzione conta. Il packaging capture-first esiste per le applicazioni il cui installer è perduto, così l'applicazione in esecuzione diventa la fonte di verità. Questa strada presuppone l'opposto: avete una cartella di build sana e volete che venga impacchettata, firmata e validata come passaggio della pipeline. Alla fine entrambe condividono lo stesso percorso di firma, validazione e distribuzione via Intune, ed è per questo che gli ambienti con software acquistato e autoprodotto possono usare una sola strada per entrambi.
Serve una licenza per usarlo nella nostra pipeline?
Non per i comandi compatibili makeappx. Impacchettare, spacchettare, creare e scomporre bundle, validare e indicizzare risorse sono senza licenza, quindi forge_msix funziona come vero sostituto diretto di makeappx.exe senza nulla da acquistare. I flussi a valore aggiunto, cioè creare da un manifest, firmare, testare, valutare, gestire i certificati e i comandi di registrazione per lo sviluppo, richiedono una licenza EtherApps Forge attiva.
L'agente di build deve avere il Windows SDK installato?
No. La CLI richiama direttamente l'API di packaging di Windows, e quel motore è un componente del sistema operativo invece di una dipendenza dall'SDK, quindi i pacchetti ottengono la stessa validazione dello schema, la stessa block map e la stessa struttura prodotte da makeappx. L'agente deve avere Windows 10 versione 1709 o successiva, oppure Windows 11, su x64. La distribuzione è una cartella che copiate e mettete nel PATH, senza installer.
Come dovremmo gestire la firma del codice in CI?
Firmate da un archivio certificati tramite thumbprint o soggetto invece che da un PFX su disco, così nessuna password finisce in una definizione di build. Aggiungete un server di marca temporale RFC 3161 così che le firme restino valide dopo la scadenza del certificato. Impostate il publisher nel vostro manifest esattamente uguale al soggetto del certificato e lasciate la modalità publisher su strict, così una discrepanza ferma la build invece di cambiare silenziosamente l'identità che i vostri clienti hanno già installato.
Come facciamo fallire la build quando il pacchetto è sbagliato?
Eseguite il comando di validazione con output JSON e ramificate sul codice di uscita. Distingue un pacchetto analizzato ma non valido da un fallimento operativo, che è la differenza tra un pacchetto rotto e un agente rotto. Tenete fuori dalle pipeline di rilascio gli switch che permettono a una build di proseguire oltre errori di validazione o semantici; sono strumenti diagnostici per capire perché un pacchetto non si costruisce, non impostazioni da lasciare attive.
Possiamo impacchettare la nostra build anche se richiede correzioni del container?
Sì. Le applicazioni scritte prima di MSIX spesso presuppongono comportamenti che il container non consente, come scrivere accanto al proprio eseguibile o aspettarsi un percorso di installazione fisso. Forge predispone il Package Support Framework perché quei casi vengano corretti con redirezione di file e registro e correzioni della directory di lavoro, senza modifiche al vostro codice sorgente. Per il software proprio potreste preferire correggere il comportamento alla fonte, ma il framework evita che un rilascio resti bloccato nel frattempo.
E gli aggiornamenti per i clienti che installano in sideload invece che da uno store?
Generate un manifest app installer dal pacchetto firmato: deriva l'identità dal pacchetto stesso ed è compatibile con i bundle. Pubblicate il pacchetto e quel manifest in una posizione HTTPS, e le copie installate potranno aggiornarsi da lì. Questo dà ai clienti sideload ed enterprise una via di aggiornamento senza una pubblicazione su store e senza reinstallazione manuale.
Possiamo correggere un pacchetto già distribuito senza ricostruirlo?
Sì. Un pacchetto può essere estratto in una directory di lavoro, modificato chirurgicamente, validato e reimpacchettato: valori del manifest, capability, file di payload e registro virtuale del pacchetto sono tutti modificabili, e ogni modifica al manifest viene validata prima di essere scritta, così una modifica malformata viene rifiutata invece che salvata. Reimpacchettare cambia l'hash del contenuto, quindi il pacchetto deve essere firmato di nuovo dopo.