Lane — vad det är, skapande och användning i Fastlane

Författare: IT Sectr Publicerad: 2026-04-14 Lästid: 10 min

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 — namngivet automatiseringsscenario i Fastfile på Ruby-språket
  • Parametrar — överföring av värden via options-hash vid körning av fastlane lane_name key:value
  • before_all/after_all — block för att köra kod före och efter varje lane
  • Private lane — scenario endast tillgängligt för anrop från andra lanes
  • Error handling — block error för att hantera fel och skicka meddelanden

Vad är Lane i Fastlane

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.

Syntax för lane: deklaration och körning

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.

ruby
# 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.

Returnera värde från 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 lanes: överföring och hantering

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.

ruby
# 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.

Validering av parametrar

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.

Kombinera lanes: before_all, after_all och error-hantering

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.

ruby
# 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 lanes och återanvändning

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.

ruby
# 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.

Exempel på lanes för iOS och Android

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.

ruby
// 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.

Bästa praxis för att skriva lanes

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”.

PraxisBeskrivningExempel
En uppgiftLane utför en logisk operationlane :run_tests, lane :build_ipa
ParametrarAlla inställningar via options eller ENVoptions[:scheme] || default
Hooksbefore_all/after_all för gemensam kodcocoapods i before_all
KommentarerDokumentera komplexa delar# Bygg med bitcode
FelTydliga felmeddelandenUI.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 lanes

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

Vad är Lane i Fastlane?

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.

Hur skapar man ett Lane i Fastfile?

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.

Hur skickar man parametrar till ett Lane?

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.

Vad är private lane i Fastlane?

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.

Hur hanterar man fel i ett Lane?

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

  • Lane — namngivet automatiseringsscenario i Fastlane på Ruby, som kombinerar actions för CI/CD-uppgifter
  • Syntax — lane :name do ... end med stöd för parametrar via options-hash och miljövariabler
  • Hooks — blocken before_all, after_all och error för centraliserad hantering av lanes livscykel
  • Private lane — slutet scenario för inkapsling av återkommande logik utan direktkörning
  • iOS-lanes använder scan, gym, match, pilot för testning, bygge och leverans
  • Android-lanes använder gradle och supply för bygge via Gradle och publicering på Google Play
  • Bästa praxis: en lane — en uppgift, tydliga parametrar, förståeliga fel, testning via dry-run

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.

Diskutera projektet

Läs också