L’utilizzo di Tuist nello sviluppo iOS in team
Un tool per ridurre i merge conflict nei progetti.
Quando si lavora ad una app iOS, tutte le impostazioni e le caratteristiche del progetto e tutte le informazioni relative alle risorse e ai file (siano essi codice sorgente, immagini, suoni o quant’altro) vengono memorizzate in un unico file monolitico. Xcode, l’ambiente di sviluppo di casa Apple, si occupa in autonomia della gestione di tale file. Se sei l’unico sviluppatore e lavori una feature alla volta, fermati qui: quello che segue probabilmente non ti interessa.
Se lavori in team o su più feature contemporaneamente e non è la prima volta che incontri problemi di merge di rami diversi del tuo repository del codice, saprai di cosa si parla: il file xcodeproj si presenta, infatti, in un formato di per sé poco leggibile (XML) ed ha una struttura piuttosto complessa; le informazioni al suo interno tendono a modificarsi molto anche in risposta a modifiche non altrettanto importanti del progetto, talvolta anche solamente l’aggiunta o l’apertura di un file.
Il risultato? Conflitti di merge insanabili sul suddetto file, con necessità di difficoltosissima risoluzione manuale, che spesso porta a side effect non facilmente individuabili o rollback e rework.
Come evitare quindi i conflitti?
Esiste già da tempo una strategia che prevede semplicemente di cancellare il file di progetto e ricrearlo in maniera dichiarativa. Tool di riferimento in quest’ambito è stato finora xcodegen, ma sta entrando in gioco di prepotenza Tuist, uno strumento per generare automaticamente il file di progetto Xcode da riga di comando, completamente open source. Contrariamente a xcodegen, viene configurato tramite un file scritto in linguaggio Swift, risultando meglio “digeribile” dagli sviluppatori.
Tuist si può installare con un semplice comando da terminale e bastano due comandi per inizializzare e generare il progetto. Si preoccupa di cercare tutti i file nella directory del progetto per creare il template appropriato ed eventualmente anche il workspace in base alla configurazione. Tuist può verificare la correttezza dei file di configurazione, nonché gestire in autonomia le dipendenze con tool quali Swift Package Manager e Carthage. Cocoapods non è ancora supportato ufficialmente, ma sarà sufficiente un pod install a valle della rigenerazione del progetto.
Una funzionalità aggiuntiva di Tuist è la Focus Mode, che consente di aprire un singolo target e le sue dipendenze. Ciò consente di ignorare qualsiasi variante o dipendenza che non si desideri utilizzare in quel momento.
A questo punto non resta che fare un bel Build and Run e l’app si comporterà esattamente come prima; ma c’è un’enorme differenza: tutte le dipendenze sono state rimosse e ora il file di progetto può essere rigenerato in qualsiasi momento, ovviando in un attimo a ogni conflitto in fase di merge.
Fonti: https://docs.tuist.io/tutorial/get-started https://www.raywenderlich.com/24508362-tuist-tutorial-for-xcode#toc-anchor-006