Lane är ett namngivet automatiseringsscenario i Fastlane som kombinerar en sekvens av åtgärder (actions) för att bygga, testa eller leverera en mobilapplikation. Varje lane definieras i Fastfile på Ruby-språket och kan köras med ett enda kommando från terminalen eller CI/CD-systemet. Enligt Fastlane Docs, 2025 innehåller 85% av Fastfile fler än tre lanes för olika CI/CD-steg. En lane kan ta emot parametrar, anropa andra lanes och hantera körningsfel.
Huvudpunkter
Lane är den grundläggande byggstenen i Fastlane som definierar ett namngivet automatiseringsscenario. Varje lane beskriver en sekvens av åtgärder (actions) som utförs för att uppnå ett specifikt mål: att bygga applikationen, köra tester, ladda upp bygget till butiken eller konfigurera miljön. Lane deklareras i Fastfile och körs med kommandot fastlane [lane_namn] från projektets rotkatalog.
Konceptet lane är lånat från Ruby DSL och säkerställer läsbarhet av scenarier. Utvecklaren ser hela CI/CD-processen som en sekvens av anrop till actions med tydliga namn och parametrar. Ett lane kan vara enkelt (ett kommando) eller komplext (förgreningar, loopar, anrop till andra lanes).
Varje lane returnerar efter körning ett resultat — ett objekt som innehåller körningsstatus och data från actions. Resultatet kan användas i andra lanes eller överföras till CI/CD-systemet för beslutsfattande. Om någon action i ett lane misslyckas stoppas körningen av lane och error-blocket anropas.
Syntaxen för att deklarera ett lane följer ett enkelt Ruby DSL-mönster: nyckelordet lane, skriptets namn som en Ruby-symbol (symbol), blocket do ... end med skriptets kropp. Lane-namnet måste vara unikt inom plattformen och bestå av bokstäver, siffror och understreck.
Körning av ett lane görs via kommandoraden: fastlane build (för lane med namnet :build) eller bundle exec fastlane build (om Fastlane är installerat via Bundler). För plattformsspecifika lanes, använd fastlane ios build eller fastlane android build.
# Deklaration av enkelt lane
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
# Körning: fastlane build_and_deploy
Ett lane kan innehålla villkorslogik baserad på parametrar eller miljövariabler. Använd if/unless för att hoppa över steg under vissa förhållanden. Även each-loopar finns tillgängliga för att behandla arrayer, vilket är praktiskt för att bygga flera targets eller scheman för applikationen i ett enda lane.
Ett lane kan returnera ett värde som kommer att vara tillgängligt för den anropande koden. För att returnera används vanliga Ruby return eller det sista uttrycket i lane-blocket. Returvärdet kan vara en sträng, ett tal, en hash eller ett resultat från en action. Detta gör det möjligt att använda resultatet från en lane i en annan lane för beslutsfattande.
Till exempel kan lane :get_version returnera den aktuella applikationsversionen från Info.plist, och lane :deploy kan använda den för att skapa ett Slack-meddelande. Returvärden är särskilt användbara i private lanes, där resultatet behövs för vidare bearbetning i det anropande lane.
Parametrar för lane gör scenarier flexibla och återanvändbara. Lane tar emot parametrar via options-hash som skickas vid körning från kommandoraden: fastlane deploy scheme:AppStore version:2.1.0. Inuti lane är parametrarna tillgängliga som options[:scheme] och options[:version].
För obligatoriska parametrar kontrollera att värdet finns i början av lane och anropa UI.user_error! med ett tydligt meddelande. För valfria parametrar ange standardvärden med operatorn ||. Fastlane stöder även typade parametrar via metoden options med angivelse av typ, standardvärde och beskrivning.
# Lane med parameterhantering
lane :deploy do |options|
scheme = options[:scheme]
version = options[:version] || '1.0.0'
beta = options[:beta] || false
UI.user_error!("Scheme angavs inte") 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
# Körning: fastlane deploy scheme:MyApp beta:true version:2.1.0
För att arbeta med miljövariabler inuti ett lane, använd ENV['VARIABLE_NAME']. Fastlane laddar automatiskt .env-filer från katalogen fastlane. Detta är standardsättet att överföra känslig data — API-nycklar, lösenord och tokens — i CI/CD-miljö utan att lagra dem i Fastfile.
För pålitlig drift av ett lane krävs validering av parametrar vid inmatning. Använd UI.user_error! med en beskrivning av problemet om en obligatorisk parameter saknas eller har fel typ. Fastlane tillhandahåller metoden options som gör det möjligt att ange typ (String, Boolean, Integer, Array), standardvärde och beskrivning för varje parameter — valideringen utförs automatiskt vid körning av lane.
Dessutom kan du använda kontroller via verify-block: verify do |value| value.length > 0 end för strängparametrar. Vid felaktigt format visar Fastlane ett tydligt meddelande med förväntat format och angivet värde, vilket förenklar felsökning i CI/CD-miljön.
Fastlane tillhandahåller livscykelhooks för att köra kod före och efter varje lane. Blocket before_all körs före varje lane i den aktuella plattformen eller globalt. Blocket after_all körs efter att lane har slutförts framgångsrikt. Blocket error körs vid eventuella fel inuti lane.
Hooks möjliggör centralisering av återkommande logik: installation av beroenden i before_all, sändning av meddelanden i after_all, rensning av temporära filer och felmeddelanden i error-blocket. Detta minskar koddubblering och gör lanes renare.
# Livscykelhooks för lanes
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} slutfördes framgångsrikt")
end
error do |lane, exception|
slack(
message: "Lane #{lane} misslyckades med fel: #{exception}",
success: false
)
end
lane :deploy do
match(type: 'appstore')
gym(export_method: 'app-store')
deliver
end
Error-blocket tar emot två argument: lane-namnet (symbol) och undantagsobjektet. Inuti blocket kan du skicka ett Slack-meddelande, skriva en loggfil eller köra ett alternativt återställningsscenario. Om error-blocket slutförs framgångsrikt anser Fastlane inte att bygget är misslyckat på CI/CD-nivå.
Private lane är ett lane som deklareras med private_lane istället för lane, som inte visas i listan över tillgängliga kommandon och inte kan köras direkt från terminalen. Private lanes är avsedda för inkapsling av återkommande steg som anropas från flera publika lanes.
Private lanes är särskilt användbara för komplexa sekvenser av åtgärder som måste utföras i strikt bestämd ordning. Till exempel kan private lane :setup_signing anropas från lanes :build_dev, :build_staging och :build_production med olika parametrar, men i sig själv har den ingen mening som ett separat kommando.
# Private lanes för återanvändning
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
Private lanes kan anropa andra private lanes och skapa en abstraktionshierarki. Det rekommenderas att begränsa nästningsdjupet till 2–3 nivåer för att bevara läsbarheten av Fastfile. Dokumentera varje private lane med en kommentar som beskriver dess syfte och förväntade parametrar.
Låt oss titta på praktiska exempel på lanes för iOS- och Android-projekt. iOS-lanes använder vanligtvis scan för tester, match för certifikat, gym för att bygga och pilot eller deliver för leverans. Android-lanes använder gradle för att bygga, supply för publicering och firebase_test_lab för molnbaserad testning.
// Lane för komplett CI/CD iOS-app
lane :ci_full_ios do
scan(scheme: 'App', code_coverage: true)
gym(scheme: 'App', export_method: 'app-store')
pilot(distribute_external: true)
slack(message: 'iOS CI/CD slutfördes framgångsrikt')
end
/* Lane för komplett CI/CD Android-app */
lane :ci_full_android do
gradle(task: 'testReleaseUnitTest')
gradle(task: 'bundleRelease')
supply(track: 'internal')
end
Genom att kombinera lanes för iOS och Android kan du skapa en enhetlig CI/CD-process för en cross-platform-applikation. Använd plattformsblocken platform :ios och platform :android för att gruppera plattformsspecifika lanes och anropa dem från en gemensam orchestrator-lane som hanterar körningsordningen.
När du skriver lanes rekommenderas det att följa en uppsättning praxis som säkerställer läsbarhet, underhållbarhet och tillförlitlighet av scenarier. Den första regeln — varje lane bör utföra en enda uppgift. Om ett lane gör för mycket, dela upp det i flera lanes och private lanes.
Den andra regeln — namngivning av lanes bör vara ett verb eller en verbfras: build, deploy, test, upload_screenshots. Undvik abstrakta namn som process eller do_all. Använd understreck för att separera ord i lane-namnet.
Den tredje regeln — hantera fel explicit. Använd UI.user_error! för tydliga felmeddelanden om problem. Förlita dig inte på Fastlanes standardfelmeddelanden — ge utvecklaren sammanhang: “GoogleService-Info.plist hittades inte — lägg till den i projektet” istället för “File not found”.
| Praxis | Beskrivning | Exempel |
|---|---|---|
| En uppgift | Lane utför en logisk operation | lane :run_tests, lane :build_ipa |
| Parametrar | Alla inställningar via options eller ENV | options[:scheme] || default |
| Hooks | before_all/after_all för gemensam kod | cocoapods i before_all |
| Kommentarer | Dokumentera komplexa delar | # Bygg med bitcode |
| Fel | Tydliga felmeddelanden | UI.user_error!(“...”) |
Den fjärde regeln — testa lanes lokalt innan körning på CI/CD. Fastlane stöder torrkörningsläge (dry-run) via flaggan --dry-run, som visar vilka åtgärder som kommer att utföras utan att faktiskt köra dem. Använd fastlane run_test för isolerad testning av enskilda lanes före integration.
Dokumentation av varje lane är en viktig praxis för teamutveckling. Fastlane stöder automatisk generering av dokumentation från desc-blocket som placeras före deklarationen av lane. Texten i desc visas när du kör fastlane lanes och fastlane list, vilket hjälper utvecklare att förstå syftet med varje scenario utan att läsa källkoden i Fastfile.
För dokumentation av parametrar, använd Ruby-kommentarer med beskrivning av förväntade värden. Fastlane kan generera README.md med en fullständig lista över lanes och deras beskrivning via kommandot fastlane generate_docs, vilket är praktiskt för att introducera nya teammedlemmar till projektets CI/CD-processer.
Vanliga frågor
Lane är ett namngivet automatiseringsscenario i Fastlane, deklarerat i Fastfile på Ruby. Lane kombinerar en sekvens av actions för att utföra en specifik uppgift: bygga applikationen, köra tester eller distribuera. Det körs via fastlane [lane_namn] från terminalen eller CI/CD-systemet.
Använd konstruktionen lane :name do ... end i Fastfile. Inuti blocket lägger du till anrop till actions med parametrar. Lane kan anropa andra lanes med namn. För att köra, skriv fastlane name i terminalen från projektets rotkatalog där katalogen fastlane med Fastfile finns.
Parametrar skickas via kommandoraden: fastlane build scheme:App version:2.0. Inuti lane är parametrarna tillgängliga via options[:scheme] och options[:version]. För obligatoriska parametrar kontrollera att värdet finns i början av lane, för valfria ange standardvärden.
Private lane är ett lane som deklareras med private_lane istället för lane. Det kan inte köras direkt från kommandoraden och används för att inkapsla återkommande steg som anropas från andra lanes. Detta minskar koddubblering och förenklar underhållet av Fastfile.
Använd error-blocket globalt eller inuti ett specifikt lane för att fånga undantag. Fastlane skickar lane-namnet och undantagsobjektet till blocket. Inuti blocket kan du skicka ett meddelande, skriva en logg eller utföra rensning. Använd UI.user_error! för att generera tydliga felmeddelanden.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också