Lane — nedir, oluşturma ve Fastlane'de kullanımı

Yazar: IT Sectr Yayınlanma: 2026-04-14 Okuma süresi: 10 dk

Lane — mobil uygulamanın derlenmesi, test edilmesi veya dağıtımı için bir dizi eylemi (actions) birleştiren, Fastlane'de adlandırılmış bir otomasyon senaryosudur. Her lane, Ruby dilinde bir Fastfile içinde tanımlanır ve terminalden veya CI/CD sisteminden tek bir komutla çalıştırılabilir. Fastlane Docs, 2025'e göre, Fastfile'ların %85'i CI/CD'nin farklı aşamaları için üçten fazla lane içerir. Bir lane parametre alabilir, diğer lane'leri çağırabilir ve çalışma zamanı hatalarını işleyebilir.

Önemli noktalar

  • Lane — Ruby dilinde Fastfile içinde adlandırılmış otomasyon senaryosu
  • Parametreler — fastlane lane_name key:value çalıştırmasında options hash'i ile değer iletimi
  • before_all/after_all — her lane'den önce ve sonra kod çalıştırmak için bloklar
  • Private lane — yalnızca diğer lane'lerden çağrılabilen senaryo
  • Hata yönetimi — hataları işlemek ve bildirim göndermek için error bloğu

Fastlane'de Lane Nedir

Lane — Fastlane'in temel yapı taşıdır ve adlandırılmış bir otomasyon senaryosunu tanımlar. Her lane, belirli bir hedefe ulaşmak için gerçekleştirilecek eylemler (actions) dizisini tanımlar: uygulamayı derlemek, testleri çalıştırmak, mağazaya yükleme yapmak veya ortamı yapılandırmak. Lane, Fastfile içinde bildirilir ve proje kök dizininden fastlane [lane_adı] komutuyla çalıştırılır.

Lane kavramı Ruby DSL'den ödünç alınmıştır ve senaryoların okunabilirliğini sağlar. Geliştirici, tüm CI/CD sürecini anlaşılır adlar ve parametrelerle action çağrıları dizisi olarak görür. Bir lane basit (tek komut) veya karmaşık (dallanmalar, döngüler, diğer lane'leri çağırma) olabilir.

Her lane çalıştırmadan sonra bir sonuç döndürür — yürütme durumunu ve action'lardan gelen verileri içeren bir nesne. Sonuç, diğer lane'lerde kullanılabilir veya karar verme için CI/CD sistemine iletilebilir. Bir lane'deki herhangi bir action hata ile sonuçlanırsa, lane yürütmesi durur ve error bloğu çağrılır.

Lane Sözdizimi: Tanımlama ve Çalıştırma

Lane bildirim sözdizimi, basit bir Ruby DSL desenini izler: lane anahtar kelimesi, Ruby sembolü (symbol) olarak senaryo adı, gövdeli do ... end bloğu. Lane adı, platform içinde benzersiz olmalı ve harfler, rakamlar ve alt çizgilerden oluşmalıdır.

Lane çalıştırması komut satırı üzerinden yapılır: fastlane build (:build adlı lane için) veya bundle exec fastlane build (Fastlane Bundler ile kurulmuşsa). Platform lane'leri için fastlane ios build veya fastlane android build kullanın.

ruby
# Basit bir lane bildirimi
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

# Çalıştırma: fastlane build_and_deploy

Bir lane, parametrelere veya ortam değişkenlerine dayalı koşullu mantık içerebilir. Belirli koşullarda adımları atlamak için if/unless kullanın. Dizileri işlemek için each döngüleri de mevcuttur; bu, tek bir lane'de birden çok hedef veya uygulama şeması derlemek için kullanışlıdır.

Lane'den değer döndürme

Lane, çağıran koda erişilebilir bir değer döndürebilir. Değer döndürmek için normal Ruby return ifadesi veya lane bloğundaki son ifade kullanılır. Döndürülen değer bir dize, sayı, hash veya action sonucu olabilir. Bu, bir lane'in sonucunun karar vermek için başka bir lane'de kullanılmasına olanak tanır.

Örneğin, :get_version lane'i Info.plist'ten uygulamanın geçerli sürümünü döndürebilir ve :deploy lane'i bunu Slack'te bir mesaj biçimlendirmek için kullanabilir. Dönüş değerleri, sonucun çağıran lane'de daha sonra işlenmesi gereken private lane'lerde özellikle kullanışlıdır.

Lane Parametreleri: İletim ve İşleme

Lane parametreleri, senaryoları esnek ve yeniden kullanılabilir hale getirir. Bir lane, komut satırından çalıştırma sırasında iletilen options hash'i aracılığıyla parametre alır: fastlane deploy scheme:AppStore version:2.1.0. Lane içinde parametrelere options[:scheme] ve options[:version] olarak erişilir.

Zorunlu parametreler için, lane başında değerin varlığını kontrol edin ve anlaşılır bir mesajla UI.user_error! çağırın. İsteğe bağlı parametreler için || operatörü aracılığıyla varsayılan değerler atayın. Fastlane ayrıca, tür, varsayılan değer ve açıklama belirten options yöntemi aracılığıyla tür belirtilmiş parametreleri de destekler.

ruby
# Parametre işlemeli lane
lane :deploy do |options|
  scheme = options[:scheme]
  version = options[:version] || '1.0.0'
  beta = options[:beta] || false

  UI.user_error!("Scheme belirtilmedi") 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

# Çalıştırma: fastlane deploy scheme:MyApp beta:true version:2.1.0

Bir lane içinde ortam değişkenleriyle çalışmak için ENV['DEGISKEN_ADI'] kullanın. Fastlane, fastlane dizininden .env dosyalarını otomatik olarak yükler. Bu, hassas verileri — API anahtarları, parolalar ve token'lar — Fastfile'da saklamadan CI/CD ortamında iletmek için standart yöntemdir.

Parametre doğrulama

Güvenilir lane çalışması için giriş parametrelerinin doğrulanması gerekir. Zorunlu bir parametre eksikse veya yanlış türdeyse, sorunu açıklayan UI.user_error! kullanın. Fastlane, her parametre için tür (String, Boolean, Integer, Array), varsayılan değer ve açıklama belirlemeye olanak tanıyan options yöntemini sağlar — doğrulama lane başlatıldığında otomatik olarak gerçekleştirilir.

Ayrıca dize parametreleri için verify bloğu aracılığıyla kontroller kullanılabilir: verify do |value| value.length > 0 end. Yanlış biçimde Fastlane, beklenen biçimi ve iletilen değeri belirten net bir mesaj görüntüleyerek CI/CD ortamında hata ayıklamayı kolaylaştırır.

Lane'leri Birleştirme: before_all, after_all ve Hata Yönetimi

Fastlane, her lane'den önce ve sonra kod çalıştırmak için yaşam döngüsü kancaları (hook) sağlar. before_all bloğu, belirli bir platformda veya genel olarak her lane'den önce çalışır. after_all bloğu, bir lane başarıyla tamamlandıktan sonra çalışır. error bloğu, bir lane içinde herhangi bir hata oluştuğunda çalışır.

Kancalar, tekrarlayan mantığı merkezileştirmeye olanak tanır: before_all'da bağımlılık kurulumu, after_all'da bildirim gönderme, error bloğunda geçici dosya temizleme ve hata bildirimi. Bu, kod tekrarını azaltır ve lane'leri daha temiz hale getirir.

ruby
# Lane yaşam döngüsü kancaları
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} başarıyla tamamlandı")
end

error do |lane, exception|
  slack(
    message: "Lane #{lane} şu hatayla başarısız oldu: #{exception}",
    success: false
  )
end

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

Error bloğu iki argüman alır: lane adı (symbol) ve istisna nesnesi. Blok içinde Slack'e bildirim gönderebilir, bir dosyaya log yazabilir veya alternatif bir kurtarma senaryosu başlatabilirsiniz. Error bloğu başarıyla tamamlanırsa Fastlane, derlemeyi CI/CD düzeyinde başarısız olarak kabul etmez.

Private Lane'ler ve Yeniden Kullanım

Private lane — lane yerine private_lane aracılığıyla bildirilen, mevcut komutlar listesinde görünmeyen ve doğrudan terminalden çalıştırılamayan lane'dir. Private lane'ler, birden çok genel lane'den çağrılan tekrarlayan adımları kapsüllemek için tasarlanmıştır.

Private lane'ler, kesin olarak tanımlanmış bir sırayla yürütülmesi gereken karmaşık eylem dizileri için özellikle kullanışlıdır. Örneğin, :setup_signing private lane'i farklı parametrelerle :build_dev, :build_staging ve :build_production lane'lerinden çağrılabilir, ancak kendi başına ayrı bir komut olarak anlamlı değildir.

ruby
# Yeniden kullanım için private lane'ler
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 lane'ler, bir soyutlama hiyerarşisi oluşturarak diğer private lane'leri çağırabilir. Fastfile'ın okunabilirliğini korumak için iç içe geçme derinliğinin 2–3 seviye ile sınırlandırılması önerilir. Her private lane'i, amacını ve beklenen parametreleri açıklayan bir yorumla belgeleyin.

iOS ve Android için Lane Örnekleri

iOS ve Android projeleri için pratik örnekleri inceleyelim. iOS lane'leri genellikle testler için scan, sertifikalar için match, derleme için gym ve dağıtım için pilot veya deliver kullanır. Android lane'leri derleme için gradle, yayınlama için supply ve bulut testi için firebase_test_lab kullanır.

ruby
// iOS uygulaması için tam CI/CD lane'i
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 başarıyla tamamlandı')
end

/* Android uygulaması için tam CI/CD lane'i */
lane :ci_full_android do
  gradle(task: 'testReleaseUnitTest')
  gradle(task: 'bundleRelease')
  supply(track: 'internal')
end

iOS ve Android için lane'leri birleştirerek, çapraz platform uygulaması için birleşik bir CI/CD süreci oluşturabilirsiniz. Platforma özgü lane'leri gruplamak için platform :ios ve platform :android platform bloklarını kullanın ve bunları yürütme sırasını yöneten ortak bir orkestratör lane'inden çağırın.

Lane Yazımında En İyi Uygulamalar

Lane yazarken, senaryoların okunabilirliğini, bakım yapılabilirliğini ve güvenilirliğini sağlayan bir dizi uygulamaya uyulması önerilir. İlk kural — her lane tek bir görevi yerine getirmelidir. Bir lane çok fazla şey yapıyorsa, onu birden çok lane ve private lane'e bölün.

İkinci kural — lane adlandırması bir fiil veya fiil öbeği olmalıdır: build, deploy, test, upload_screenshots. process veya do_all gibi soyut adlardan kaçının. Lane adında kelimeleri ayırmak için alt çizgi kullanın.

Üçüncü kural — hataları açıkça işleyin. Sorunlar hakkında anlaşılır mesajlar için UI.user_error! kullanın. Fastlane'in varsayılan hata mesajlarına güvenmeyin — geliştiriciye bağlam sağlayın: “GoogleService-Info.plist dosyası bulunamadı — projeye ekleyin”, “Dosya bulunamadı” yerine.

UygulamaAçıklamaÖrnek
Tek görevLane tek bir mantıksal işlem gerçekleştirirlane :run_tests, lane :build_ipa
ParametrelerTüm ayarlar options veya ENV aracılığıylaoptions[:scheme] || default
KancalarOrtak kod için before_all/after_allbefore_all'da cocoapods
YorumlarKarmaşık kısımları belgeleyin# Bitcode ile derleme
HatalarAnlaşılır hata mesajlarıUI.user_error!(“...”)

Dördüncü kural — lane'leri CI/CD'de çalıştırmadan önce yerel olarak test edin. Fastlane, --dry-run bayrağı aracılığıyla kuru çalıştırma modunu destekler; bu, hangi eylemlerin gerçekleştirileceğini fiilen çalıştırmadan gösterir. Entegrasyondan önce ayrı lane'leri izole olarak test etmek için fastlane run_test kullanın.

Lane belgeleme

Her lane'in belgelenmesi, ekip geliştirme için önemli bir uygulamadır. Fastlane, lane bildiriminden önce yerleştirilen desc bloğundan otomatik belge oluşturmayı destekler. desc metni, fastlane lanes ve fastlane list çalıştırıldığında görüntülenir ve geliştiricilerin Fastfile kaynak kodunu okumadan her senaryonun amacını anlamasına yardımcı olur.

Parametreleri belgelemek için, beklenen değerlerin açıklamasıyla Ruby yorumlarını kullanın. Fastlane, fastlane generate_docs komutu aracılığıyla lane'lerin tam listesini ve açıklamalarını içeren bir README.md oluşturabilir; bu, yeni ekip üyelerinin projenin CI/CD süreçlerine uyum sağlamasını kolaylaştırır.

Sıkça Sorulan Sorular

Fastlane'de Lane nedir?

Lane — Ruby ile Fastfile'da bildirilen, Fastlane'de adlandırılmış bir otomasyon senaryosudur. Bir lane, belirli bir görevi gerçekleştirmek için bir dizi action'ı birleştirir: uygulama derleme, test çalıştırma veya dağıtım. Terminalden veya CI/CD sisteminden fastlane [lane_adı] ile çalıştırılır.

Fastfile'da Lane nasıl oluşturulur?

Fastfile'da lane :ad do ... end yapısını kullanın. Blok içinde, parametrelerle action çağrıları ekleyin. Bir lane, diğer lane'leri adlarıyla çağırabilir. Çalıştırmak için, Fastfile'ı içeren fastlane dizininin bulunduğu proje kökünden terminalde fastlane ad komutunu çalıştırın.

Bir Lane'e parametreler nasıl iletilir?

Parametreler komut satırı aracılığıyla iletilir: fastlane build scheme:App version:2.0. Lane içinde parametrelere options[:scheme] ve options[:version] ile erişilir. Zorunlu parametreler için lane başında değerin varlığını kontrol edin, isteğe bağlı parametreler için varsayılan değerler atayın.

Fastlane'de private lane nedir?

Private lane — lane yerine private_lane aracılığıyla bildirilen lane'dir. Doğrudan komut satırından çalıştırılamaz ve diğer lane'lerden çağrılan tekrarlayan adımları kapsüllemek için kullanılır. Bu, kod tekrarını azaltır ve Fastfile bakımını basitleştirir.

Bir Lane'de hatalar nasıl işlenir?

İstisnaları yakalamak için genel olarak veya belirli bir lane içinde error bloğunu kullanın. Fastlane, bloğa lane adını ve exception nesnesini iletir. Blok içinde bildirim gönderebilir, log yazabilir veya temizlik yapabilirsiniz. Anlaşılır hata mesajları oluşturmak için UI.user_error! kullanın.

Özet

  • Lane — Fastlane'de Ruby ile CI/CD görevleri için eylemleri birleştiren adlandırılmış otomasyon senaryosu
  • Sözdizimi — options hash'i ve ortam değişkenleri aracılığıyla parametre desteği ile lane :ad do ... end
  • Kancalar — lane yaşam döngüsünün merkezi yönetimi için before_all, after_all ve error blokları
  • Private lane — doğrudan çalıştırma olmadan tekrarlayan mantığı kapsüllemek için özel senaryo
  • iOS lane'leri test, derleme ve dağıtım için scan, gym, match, pilot kullanır
  • Android lane'leri Gradle ile derleme ve Google Play'de yayınlama için gradle ve supply kullanır
  • En iyi uygulamalar: tek lane — tek görev, açık parametreler, anlaşılır hatalar, kuru çalıştırma ile test

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun