Apple ha annunciato l'apertura del codice sorgente del sistema di build Swift Build, utilizzato in ambienti di sviluppo proprietari come Xcode e Swift Playground. Il sistema è ottimizzato per compilare progetti nei linguaggi Swift, C e Objective-C, ma può essere utilizzato anche con altri linguaggi. Per il gestore di pacchetti Swift Package Manager è stato preparato un modulo sperimentale («—build-system swiftbuild») che consente di utilizzare Swift Build come motore alternativo per la creazione di pacchetti. Il codice di Swift Build è scritto in linguaggio Swift ed è reso disponibile con licenza Apache 2.0. Supporta la compilazione di progetti per Linux, macOS, iOS, Android, QNX e Windows.
Basandosi sulle regole di build fornite, Swift Build genera un piano di compilazione e avvia i componenti del processo di build. Il progetto si sviluppa con l'obiettivo di garantire costruzioni cross-platform per vari sistemi operativi e tipi di dispositivi. La funzione principale del sistema di build è descritta come la trasformazione dei dati in ingresso forniti dall'utente, come la descrizione del progetto e il codice sorgente, in artefatti risultanti, come librerie e applicazioni.
Il sistema è implementato come un'estensione di un insieme di librerie llbuild (build a basso livello), che realizzano primitive a bassa livello per lavorare con il grafo delle dipendenze, determinare il formato delle regole di build, monitorare gli oggetti da ricompilare e creare manifesti per l'utensile Ninja. Tra le funzionalità avanzate di Swift Build si evidenziano: il supporto per l'integrazione con il compilatore Swift per una coordinazione efficace nella compilazione di progetti in Swift; il supporto per la compilazione di vari tipi di prodotti, comprese le utilità da riga di comando, le applicazioni GUI e le librerie; ottimizzazioni del grafo di build per aumentare l'efficienza nella parallelizzazione dei processi di compilazione del codice in Swift e C.
La base di Swift Build è rappresentata dal processo SWBBuildService, che viene avviato dopo l'inizio della build da parte del cliente, che può essere uno strumento come swbuild, l'ambiente di sviluppo Xcode o il gestore pacchetti Swift Package Manager. L'interazione tra il servizio di build SWBBuildService e il processo client avviene attraverso l'invio di messaggi serializzati su un pipe anonimo. Dal lato del client, l'interazione con il sistema di build avviene tramite l'API SwiftBuild o attraverso lo strumento da riga di comando swbuild.
La funzionalità di Swift Build definisce un insieme di framework, come ad esempio:
- SWBLLBuild — un'estensione per accedere alle funzionalità di llbuild;
- SWBUtil — funzioni ausiliarie, come l'implementazione di liste ordinate;
- SWBCSupport — supporto per il codice in C e Objective-C;
- SWBCore — motori per l'elaborazione di macro, impostazioni, modello di progetto, specifiche, piattaforme;
- SWBTaskConstruction — logica per la formazione delle attività;
- SWBTaskExecution — organizzazione dell'esecuzione delle attività di build;
- SWBBuildSystem — costruzione e pianificazione delle operazioni di build, gestione della creazione e dell'esecuzione delle attività.
Fonte: opennet.ru
