Lane — cos'è, creazione e utilizzo in Fastlane

Autore: IT Sectr Pubblicato: 2026-04-14 Tempo di lettura: 10 min

Lane — è uno scenario di automazione nominato in Fastlane che unisce una sequenza di azioni (actions) per la compilazione, il test o la distribuzione di un'applicazione mobile. Ogni lane viene definito in un Fastfile in linguaggio Ruby e può essere avviato con un singolo comando dal terminale o da un sistema CI/CD. Secondo Fastlane Docs, 2025, il 85% dei Fastfile contiene più di tre lane per diverse fasi del CI/CD. Un lane può accettare parametri, chiamare altri lane e gestire gli errori di esecuzione.

Punti chiave

  • Lane — scenario di automazione nominato in Fastfile in linguaggio Ruby
  • Parametri — passaggio di valori tramite hash options all'esecuzione di fastlane lane_name key:value
  • before_all/after_all — blocchi per eseguire codice prima e dopo ogni lane
  • Private lane — scenario accessibile solo da altri lanes
  • Gestione errori — blocco error per gestire errori e inviare notifiche

Cos'è un Lane in Fastlane

Lane — è il blocco di costruzione fondamentale di Fastlane, che definisce uno scenario di automazione nominato. Ogni lane descrive una sequenza di azioni (actions) da eseguire per raggiungere un obiettivo specifico: compilare un'applicazione, eseguire test, caricare un build nello store o configurare l'ambiente. Un lane viene dichiarato in Fastfile ed eseguito con il comando fastlane [nome_lane] dalla radice del progetto.

Il concetto di lane è preso in prestito dal Ruby DSL e garantisce la leggibilità degli scenari. Lo sviluppatore vede l'intero processo CI/CD come una sequenza di chiamate ad actions con nomi e parametri comprensibili. Un lane può essere semplice (un singolo comando) o complesso (ramificazioni, cicli, chiamate ad altri lane).

Ogni lane dopo l'esecuzione restituisce un risultato — un oggetto contenente lo stato di esecuzione e i dati dalle actions. Il risultato può essere utilizzato in altri lane o trasmesso al sistema CI/CD per prendere decisioni. Se un'azione in un lane termina con un errore, l'esecuzione del lane si ferma e viene chiamato il blocco error.

Sintassi lane: dichiarazione ed esecuzione

La sintassi di dichiarazione di un lane segue un semplice schema del Ruby DSL: la parola chiave lane, il nome dello scenario come simbolo Ruby (symbol), il blocco do ... end con il corpo dello scenario. Il nome del lane deve essere unico all'interno della piattaforma ed essere composto da lettere, cifre e trattini bassi.

L'esecuzione del lane avviene tramite riga di comando: fastlane build (per il lane chiamato :build) o bundle exec fastlane build (se Fastlane è installato tramite Bundler). Per i lane di piattaforma, utilizzare fastlane ios build o fastlane android build.

ruby
# Dichiarazione di un lane semplice
lane :test do
  scan(scheme: 'App', devices: ['iPhone 15'])
end

lane :build_and_deploy do
  cocoapods
  test
  gym(scheme: 'App', export_method: 'app-store')
  pilot(skip_waiting_for_build_processing: true)
end

# Esecuzione: fastlane build_and_deploy

Un lane può contenere logica condizionale basata su parametri o variabili d'ambiente. Utilizzare if/unless per saltare passaggi in determinate condizioni. Sono anche disponibili cicli each per elaborare array, utile per compilare più target o scheme di applicazione in un unico lane.

Valore di ritorno da un lane

Lane può restituire un valore accessibile al codice chiamante. Per restituire un valore, utilizzare il return standard di Ruby o l'ultima espressione nel blocco lane. Il valore restituito può essere una stringa, un numero, un hash o il risultato di un'azione. Ciò consente di utilizzare il risultato di un lane in un altro lane per prendere decisioni.

Ad esempio, il lane :get_version può restituire la versione corrente dell'applicazione da Info.plist, e il lane :deploy utilizzarla per formattare un messaggio in Slack. I valori di ritorno sono particolarmente utili nei private lane, dove il risultato è necessario per l'elaborazione successiva nel lane chiamante.

Parametri lane: passaggio e gestione

I parametri di un lane rendono gli scenari flessibili e riutilizzabili. Un lane accetta parametri tramite l'hash options, passati all'esecuzione dalla riga di comando: fastlane deploy scheme:AppStore version:2.1.0. All'interno del lane, i parametri sono accessibili come options[:scheme] e options[:version].

Per i parametri obbligatori, verificare la presenza del valore all'inizio del lane e chiamare UI.user_error! con un messaggio chiaro. Per i parametri opzionali, impostare valori predefiniti tramite l'operatore ||. Fastlane supporta anche parametri tipizzati tramite il metodo options con indicazione del tipo, valore predefinito e descrizione.

ruby
# Lane con gestione parametri
lane :deploy do |options|
  scheme = options[:scheme]
  version = options[:version] || '1.0.0'
  beta = options[:beta] || false

  UI.user_error!("Scheme non specificato") unless scheme

  match(type: beta ? 'adhoc' : 'appstore')
  gym(scheme: scheme, export_method: beta ? 'ad-hoc' : 'app-store')

  if beta
    pilot(distribute_external: true)
  else
    deliver(submit_for_review: true)
  end
end

# Esecuzione: fastlane deploy scheme:MyApp beta:true version:2.1.0

Per lavorare con variabili d'ambiente all'interno di un lane, utilizzare ENV['VARIABLE_NAME']. Fastlane carica automaticamente i file .env dalla directory fastlane. Questo è il metodo standard per trasmettere dati sensibili — chiavi API, password e token — nell'ambiente CI/CD senza memorizzarli nel Fastfile.

Validazione dei parametri

Per un funzionamento affidabile del lane, è necessaria la validazione dei parametri in ingresso. Utilizzare UI.user_error! con una descrizione del problema se un parametro obbligatorio è assente o ha un tipo errato. Fastlane fornisce il metodo options, che consente di impostare il tipo (String, Boolean, Integer, Array), il valore predefinito e la descrizione per ogni parametro — la validazione viene eseguita automaticamente all'avvio del lane.

È inoltre possibile utilizzare controlli tramite il blocco verify: verify do |value| value.length > 0 end per parametri stringa. In caso di formato errato, Fastlane visualizza un messaggio chiaro con il formato atteso e il valore fornito, semplificando il debug nell'ambiente CI/CD.

Combinazione lane: before_all, after_all e gestione errori

Fastlane fornisce hook del ciclo di vita per eseguire codice prima e dopo ogni lane. Il blocco before_all viene eseguito prima di ogni lane su una piattaforma specifica o globalmente. Il blocco after_all viene eseguito dopo il completamento con successo di un lane. Il blocco error viene eseguito in caso di errore all'interno di un lane.

Gli hook consentono di centralizzare la logica ripetitiva: installazione delle dipendenze in before_all, invio di notifiche in after_all, pulizia dei file temporanei e notifica degli errori nel blocco error. Ciò riduce la duplicazione del codice e rende i lane più puliti.

ruby
# Hook del ciclo di vita dei lane
default_platform(:ios)

before_all do
  cocoapods(try_repo_update_on_error: true)
  ensure_git_status_clean
end

after_all do |lane|
  slack(message: "Lane #{lane} completata con successo")
end

error do |lane, exception|
  slack(
    message: "Lane #{lane} fallita con errore: #{exception}",
    success: false
  )
end

lane :deploy do
  match(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

Il blocco error riceve due argomenti: il nome del lane (symbol) e l'oggetto eccezione. All'interno del blocco, è possibile inviare una notifica in Slack, scrivere un log in un file o avviare uno scenario di ripristino alternativo. Se il blocco error termina con successo, Fastlane non considera il build fallito a livello CI/CD.

Private lanes e riutilizzo

Private lane — è un lane dichiarato tramite private_lane invece di lane, che non appare nell'elenco dei comandi disponibili e non può essere avviato direttamente dal terminale. I private lane sono progettati per incapsulare passaggi ripetitivi chiamati da più lane pubblici.

I private lane sono particolarmente utili per sequenze complesse di azioni che devono essere eseguite in un ordine rigorosamente definito. Ad esempio, un private lane :setup_signing può essere chiamato dai lane :build_dev, :build_staging e :build_production con parametri diversi, ma di per sé non ha senso come comando separato.

ruby
# Private lanes per il riutilizzo
private_lane :setup_environment do |options|
  cocoapods(try_repo_update_on_error: true)
  match(type: options[:type], readonly: true)
  increment_build_number
end

lane :dev_build do
  setup_environment(type: 'development')
  gym(export_method: 'development')
end

lane :appstore_build do
  setup_environment(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

I private lane possono chiamare altri private lane, formando una gerarchia di astrazioni. Si consiglia di limitare la profondità di annidamento a 2–3 livelli per mantenere la leggibilità del Fastfile. Documentare ogni private lane con un commento che descrive il suo scopo e i parametri attesi.

Esempi di lane per iOS e Android

Esaminiamo esempi pratici di lane per progetti iOS e Android. I lane iOS utilizzano tipicamente scan per i test, match per i certificati, gym per la compilazione e pilot o deliver per la distribuzione. I lane Android utilizzano gradle per la compilazione, supply per la pubblicazione e firebase_test_lab per i test nel cloud.

ruby
// Lane per CI/CD completo di app iOS
lane :ci_full_ios do
  scan(scheme: 'App', code_coverage: true)
  gym(scheme: 'App', export_method: 'app-store')
  pilot(distribute_external: true)
  slack(message: 'CI/CD iOS completato con successo')
end

/* Lane per CI/CD completo di app Android */
lane :ci_full_android do
  gradle(task: 'testReleaseUnitTest')
  gradle(task: 'bundleRelease')
  supply(track: 'internal')
end

Combinando i lane per iOS e Android, è possibile creare un processo CI/CD unificato per un'applicazione multipiattaforma. Utilizzare i blocchi di piattaforma platform :ios e platform :android per raggruppare i lane specifici di ciascuna piattaforma e chiamarli da un lane orchestrator comune che gestisce l'ordine di esecuzione.

Buone pratiche per la scrittura di lane

Nella scrittura di lane, si consiglia di seguire un insieme di pratiche che garantiscono leggibilità, manutenibilità e affidabilità degli scenari. La prima regola — ogni lane deve svolgere un unico compito. Se un lane fa troppe cose, suddividerlo in più lane e private lane.

Seconda regola — la denominazione dei lane deve essere un verbo o una frase verbale: build, deploy, test, upload_screenshots. Evitare nomi astratti come process o do_all. Utilizzare trattini bassi per separare le parole nel nome del lane.

Terza regola — gestire gli errori esplicitamente. Utilizzare UI.user_error! per messaggi comprensibili sui problemi. Non affidarsi ai messaggi di errore standard di Fastlane — fornire allo sviluppatore il contesto: “File GoogleService-Info.plist non trovato — aggiungerlo al progetto” invece di “File not found”.

PraticaDescrizioneEsempio
Un compitoUn lane esegue una singola operazione logicalane :run_tests, lane :build_ipa
ParametriTutte le impostazioni tramite options o ENVoptions[:scheme] || default
Hookbefore_all/after_all per codice comunecocoapods in before_all
CommentiDocumentare le parti complesse# Compilazione con bitcode
ErroriMessaggi di errore comprensibiliUI.user_error!(“...”)

Quarta regola — testare i lane localmente prima di eseguirli sul CI/CD. Fastlane supporta la modalità dry-run tramite il flag --dry-run, che mostra quali azioni verranno eseguite senza lanciarle realmente. Utilizzare fastlane run_test per testare isolatamente i singoli lane prima dell'integrazione.

Documentazione dei lane

La documentazione di ogni lane è una pratica importante per lo sviluppo di squadra. Fastlane supporta la generazione automatica di documentazione dal blocco desc posizionato prima della dichiarazione del lane. Il testo di desc viene visualizzato all'esecuzione di fastlane lanes e fastlane list, aiutando gli sviluppatori a comprendere lo scopo di ogni scenario senza leggere il codice sorgente del Fastfile.

Per documentare i parametri, utilizzare commenti Ruby con la descrizione dei valori attesi. Fastlane può generare un README.md con l'elenco completo dei lane e la loro descrizione tramite il comando fastlane generate_docs, facilitando l'adattamento dei nuovi membri del team ai processi CI/CD del progetto.

Domande frequenti

Cos'è un Lane in Fastlane?

Lane — è uno scenario di automazione nominato in Fastlane, dichiarato in un Fastfile in Ruby. Un lane unisce una sequenza di actions per eseguire un compito specifico: compilare un'applicazione, eseguire test o distribuire. Viene eseguito tramite fastlane [nome_lane] dal terminale o da un sistema CI/CD.

Come creare un Lane in Fastfile?

Utilizzare la costruzione lane :nome do ... end in Fastfile. All'interno del blocco, aggiungere chiamate ad actions con parametri. Un lane può chiamare altri lane per nome. Per eseguirlo, lanciare fastlane nome nel terminale dalla radice del progetto, dove si trova la directory fastlane contenente il Fastfile.

Come passare parametri a un Lane?

I parametri vengono passati tramite riga di comando: fastlane build scheme:App version:2.0. All'interno del lane, i parametri sono accessibili tramite options[:scheme] e options[:version]. Per i parametri obbligatori, verificare la presenza del valore all'inizio del lane, per quelli opzionali impostare valori predefiniti.

Cos'è un private lane in Fastlane?

Private lane — un lane dichiarato tramite private_lane invece di lane. Non può essere avviato direttamente dalla riga di comando e serve per incapsulare passaggi ripetitivi chiamati da altri lane. Ciò riduce la duplicazione del codice e semplifica la manutenzione del Fastfile.

Come gestire gli errori in un Lane?

Utilizzare il blocco error globalmente o all'interno di un lane specifico per intercettare le eccezioni. Fastlane passa al blocco il nome del lane e l'oggetto exception. All'interno del blocco, è possibile inviare una notifica, scrivere un log o eseguire una pulizia. Utilizzare UI.user_error! per generare messaggi di errore comprensibili.

Riepilogo

  • Lane — scenario di automazione nominato in Fastlane in Ruby, che unisce actions per compiti CI/CD
  • Sintassi — lane :nome do ... end con supporto di parametri tramite hash options e variabili d'ambiente
  • Hook — blocchi before_all, after_all e error per la gestione centralizzata del ciclo di vita dei lane
  • Private lane — scenario privato per incapsulare logica ripetitiva senza esecuzione diretta
  • Lane iOS utilizzano scan, gym, match, pilot per test, compilazione e distribuzione
  • Lane Android utilizzano gradle e supply per compilazione tramite Gradle e pubblicazione su Google Play
  • Buone pratiche: un lane — un compito, parametri espliciti, errori comprensibili, test tramite dry-run

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche