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 — 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 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.
# 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, ç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, 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.
# 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.
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.
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.
# 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 — 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.
# 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 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.
// 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 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.
| Uygulama | Açıklama | Örnek |
|---|---|---|
| Tek görev | Lane tek bir mantıksal işlem gerçekleştirir | lane :run_tests, lane :build_ipa |
| Parametreler | Tüm ayarlar options veya ENV aracılığıyla | options[:scheme] || default |
| Kancalar | Ortak kod için before_all/after_all | before_all'da cocoapods |
| Yorumlar | Karmaşık kısımları belgeleyin | # Bitcode ile derleme |
| Hatalar | Anlaşı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.
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
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 :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.
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.
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.
İ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
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.
Ayrıca okuyun