Fastfile: özü, yapısı ve mobil geliştirmede otomasyon kurulumu

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

Fastfile, mobil uygulamaların derlenmesi, test edilmesi ve dağıtımı için otomasyon senaryolarını tanımlayan, Ruby dilinde yazılmış Fastlane yapılandırma dosyasıdır. Dosya, proje kökündeki fastlane dizininde bulunur ve lanes — adlandırılmış eylem dizileri bildirimlerini içerir. Fastlane Docs, 2025'e göre mobil projelerin %70'i CI/CD süreçleri için Fastfile kullanmaktadır. Fastfile, düzinece bash betiğini tek bir bildirimsel pipeline tanımıyla değiştirir.

Önemli Noktalar

  • Fastfile — fastlane/ dizininde Ruby ile yazılmış Fastlane yapılandırma dosyası
  • Lane — eylem sırası ve hata yönetimi ile adlandırılmış senaryo
  • Action — parametrelerle Fastlane'in yerleşik komutu (gym, scan, match, deliver)
  • Private lane — doğrudan çalıştırılmadan diğer lanes'lerden çağrılan iç senaryo
  • Parametreler — option ile lane'e değer aktarımı ve değişkenlerle erişim

Fastfile Nedir ve Neden Gereklidir

Fastfile, Ruby dilinde yazılmış ve proje kökündeki fastlane dizinine yerleştirilmiş ana Fastlane yapılandırma dosyasıdır. Uygulamanın derlenmesi, test edilmesi, kod imzalanması ve dağıtımı için tüm otomasyon senaryolarını (lanes) tanımlar. Fastfile, düzinece bash betiğini, Makefile'ı ve manuel talimatları tek bir bildirimsel CI/CD pipeline tanımıyla değiştirir.

Fastfile ihtiyacı, proje farklı geliştirici makinelerinde ve CI/CD sunucularında tekrarlanabilir derlemeler gerektirdiğinde ortaya çıkar. Her geliştiricinin ortamı manuel olarak yapılandırması yerine Fastfile, tüm adımları Git'te sürüm kontrolü yapılabilen, incelenebilen ve projeler arasında yeniden kullanılabilen kod olarak sabitler. Tek bir Fastfile, geliştirici makinesindeki derlemenin CI/CD sunucusundaki derleme ile aynı olmasını garanti eder.

Fastfile, default_platform yönergesi aracılığıyla platformları destekler. Tek bir Fastfile'da iOS, Android ve macOS için senaryolar tanımlanabilir ve platform :ios ile platform :android bloklarında gruplandırılabilir. Bu, iOS ve Android derlemelerinin ortak dağıtım mantığına sahip olduğu ancak farklı derleme araçları kullandığı platformlar arası projeler için özellikle kullanışlıdır.

Fastfile Yapısı: lanes, actions ve parametreler

Fastfile üç ana öğeden oluşur: platform bildirimi (default_platform), lanes tanımları ve yardımcı fonksiyon yapılandırması. Her lane, lane anahtar sözcüğüyle başlar, ardından senaryo adı (Ruby sembolü), eylem sırasını içeren gövde ve error, success veya ensure hata yönetim blokları gelir.

Actions Fastfile'da, Hash biçiminde parametrelerle Fastlane'in yerleşik fonksiyonlarının çağrılarıdır. Örneğin, gym(scheme: 'App', export_method: 'app-store') belirtilen parametrelerle iOS uygulaması derlemesini başlatır. Her action, bir değişkende saklanabilen ve sonraki action'larda kullanılabilen bir sonuç döndürür — bu, lane içinde koşullu mantık oluşturmayı sağlar.

Fastfile, Ruby'deki standart ENV mekanizması aracılığıyla ortam değişkenlerini destekler. Hassas veriler (şifreler, token'lar, anahtarlar) Fastfile'da saklanmamalıdır — CI/CD sistemi ortam değişkenlerini veya .gitignore'a eklenmiş .env dosyasını kullanın. Fastlane, başlatma sırasında fastlane dizinindeki .env dosyalarını otomatik olarak yükler.

Appfile ve Matchfile

Fastfile ile birlikte fastlane dizininde ek yapılandırma dosyaları bulunur. Appfile, uygulama tanımlayıcılarını (app_identifier), Apple ID ve Team ID'yi içerir — bu veriler tüm action'lara otomatik olarak eklenir ve her lane'de tekrarlanmayı önler. Matchfile, match için ayarları saklar: Git deposu URL'si, profil türü ve şifreleme anahtarı.

Yapılandırmayı birden çok dosyaya bölmek, farklı ortamlara sahip projelerin bakımını kolaylaştırır. Örneğin, staging ve production için Matchfile deposunda ayrı dallar oluşturulabilir veya CI/CD sisteminde ortam değişkenleri aracılığıyla parametreler geçersiz kılınabilir.

ruby
# Fastfile temel yapısı
default_platform(:ios)

lane :build_and_test do
  cocoapods
  scan(scheme: 'App', devices: ['iPhone 15'])
  gym(scheme: 'App')
end

lane :deploy do
  match(type: 'appstore')
  build_and_test
  pilot(skip_waiting_for_build_processing: true)
end

Fastfile Sözdizimi: lanes yazma

Fastfile sözdizimi, otomasyon senaryolarının okunabilirliği için özel olarak tasarlanmış Ruby DSL'ye (Domain Specific Language) dayanır. Lane, lane :name do ... end yapısıyla bildirilir; burada name, terminalden veya CI/CD sisteminden çalıştırmak için fastlane name komutu haline gelen bir Ruby sembolüdür.

Lane içinde mantık dallanması için Ruby'nin koşullu operatörleri kullanılabilir: if, unless, case. Ayrıca dizi değerlerini işlemek için each ve while döngüleri de mevcuttur. Fastlane, lane yaşam döngüsü olaylarını yönetmek için özel before_all, after_all ve error blokları sağlar.

Lane parametreleri options hash'i aracılığıyla aktarılır. fastlane build --option_name value çalıştırıldığında, değer lane içinde options[:option_name]'e gider. optional: true ile varsayılan değerler ve aktarılan parametrelerin türlerini kontrol etmek için tür doğrulaması ayarlanabilir.

ruby
# Parametreler ve koşullu mantık ile Lane
lane :build do |options|
  scheme = options[:scheme] || 'App'
  export_method = options[:export_method] || 'development'

  match(type: export_method)

  if export_method == 'appstore'
    gym(scheme: scheme, export_method: 'app-store')
    pilot(skip_waiting_for_build_processing: true)
  else
    gym(scheme: scheme, export_method: export_method)
  end
end

iOS Dağıtımı İçin Fastfile Örneği

Bir iOS projesi için eksiksiz bir Fastfile, bağımlılıkları yükleme, test etme, derleme ve TestFlight ile App Store'a dağıtma için lanes içerir. Commit'ten iç test için TestFlight'ta yayınlamaya kadar tipik CI/CD sürecini kapsayan bir örneği inceleyelim.

ruby
# iOS CI/CD dağıtımı için Fastfile
default_platform(:ios)

before_all do
  cocoapods(try_repo_update_on_error: true)
  setup_travis if ENV['TRAVIS']
end

lane :tests do
  scan(
    scheme: 'App',
    devices: ['iPhone 15', 'iPad Pro 12.9'],
    output_directory: './test_reports'
  )
end

lane :build_appstore do
  match(type: 'appstore', readonly: true)
  gym(
    scheme: 'App',
    export_method: 'app-store',
    include_bitcode: true
  )
end

lane :deploy_testflight do
  build_appstore
  pilot(
    skip_waiting_for_build_processing: true,
    distribute_external: false
  )
  slack(
    message: 'Derleme iç test için TestFlight'a yüklendi'
  )
end

Bu örnekte before_all bloğu her lane'den önce çalışır ve bağımlılıkları yükler. tests lane'i iki cihazda UI ve Unit testlerini çalıştırır. build_appstore lane'i match aracılığıyla kodu imzalar ve bitcode ile IPA oluşturur. deploy_testflight lane'i tam dağıtım için tüm adımları birleştirir.

Birden Çok Hedefle Dağıtım

Birden çok hedefe sahip projeler (ana uygulama, watchOS, widget, Notification Service Extension) her hedef için ayrı lanes gerektirir. Fastfile'da, şema adını ve derleme yolunu parametre olarak alan evrensel bir :deploy_target lane'i oluşturulabilir. Bu, fastlane deploy_target scheme:Widget ile tüm uzantılar için dağıtım çalıştırmayı sağlar.

Birden çok hedefi düzenlemek için lane içinde bir şema dizisi ve each döngüsü kullanın. Fastlane, parallel: true bayrağı aracılığıyla birden çok şemanın paralel derlemesini destekler; bu, uzantılı uygulamalar için toplam CI/CD pipeline süresini kısaltır.

Android Derlemesi İçin Fastfile Örneği

Bir Android projesi için Fastfile, Gradle görevlerini çalıştırmak için gradle action'ı ve Google Play'de yayınlamak için supply action'ı kullanır. iOS'tan farklı olarak Android, match gerektirmez ancak depo dışında saklanan ve ortam değişkenleri aracılığıyla aktarılan Keystore ile imzalama kullanır.

ruby
# Android CI/CD derlemesi için Fastfile
default_platform(:android)

lane :build_release do
  gradle(task: 'clean')
  gradle(task: 'bundleRelease')
  gradle(task: 'assembleRelease')
end

lane :deploy_internal do
  build_release
  supply(
    track: 'internal',
    aab: 'app/build/outputs/bundle/release/app-release.aab',
    release_status: 'completed'
  )
end

Android uygulamasını imzalamak için build.gradle'da signingConfigs yapılandırın ve Keystore parametrelerini ortam değişkenleri aracılığıyla aktarın: ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS ve ANDROID_KEY_PASSWORD. Fastlane, derlenen AAB veya APK'yı imzalamak için sistem apksigner'ını otomatik olarak kullanır.

Fastfile'da Android İmzalama

Fastfile'da Android imzalamayı yapılandırmak için sign_android action'ını kullanın veya build.gradle'daki signingConfigs'e güvenin. Fastlane, Gradle aracılığıyla apksigner ile entegre olur — gradle görevine SIGNING_CONFIG bayrağını aktarmak, ortam değişkenlerinden parametrelerle imzalamayı etkinleştirir. Bu, Google Play Console'a yüklemeden önce AAB dosyalarını imzalamayı sağlar.

CI/CD'de Keystore'u güvenli bir şekilde saklamak için Base64 kodlaması ve ortam değişkenleri kullanın. Fastlane, Keystore'u değişkenden çözen ve before_all aşamasında geçici bir dosyaya kaydeden setup_keystore action'ını destekler. Lane tamamlandıktan sonra geçici dosya, sertifika sızıntısını önlemek için otomatik olarak silinir.

Private lanes ve Grupların Kullanımı

Private lanes (gizli senaryolar), komut satırından doğrudan çağrılamayan ancak Fastfile içindeki diğer lanes'lerden çağrılabilen lanes'lerdir. Private lane, private_lane :name do ... end yapısıyla bildirilir ve bağımsız senaryolar olarak anlamlı olmayan tekrarlayan adımları kapsüllemek için kullanılır.

Private lanes, tekrarlayan mantığı gruplamak için idealdir: bağımlılık yükleme, ortam yapılandırması, bildirim gönderme. Örneğin, birden çok dağıtım lane'inden çağrılan ancak hataları önlemek için geliştiricinin doğrudan çalıştırmasına izin verilmeyen bir private lane :setup_signing oluşturulabilir.

ruby
# Private lane ve gruplama
default_platform(:ios)

private_lane :setup_signing do |options|
  match(
    type: options[:type],
    readonly: true,
    verbose: false
  )
end

lane :beta do
  setup_signing(type: 'adhoc')
  gym(export_method: 'ad-hoc')
  pilot(distribute_external: true)
end

lane :release do
  setup_signing(type: 'appstore')
  gym(export_method: 'app-store')
  deliver(
    force: true,
    submit_for_review: true
  )
end

Platform blokları aracılığıyla lane gruplama, tek bir Fastfile'da iOS ve Android için senaryoları ayırmayı sağlar. platform :ios do ... end ve platform :android do ... end yapısı, ilgili platformun lanes'lerini izole ederken ortak private lanes, yeniden kullanım için platform bloklarının dışına çıkarılabilir.

Lanes'lere Parametre Aktarımı

Fastfile parametre mekanizması, lanes'lerin esnek ve yeniden kullanılabilir olmasını sağlar. Parametreler çalıştırma sırasında komut satırı aracılığıyla aktarılır: fastlane build scheme:App export_method:appstore. Lane içinde değerlere, lane bloğuna argüman olarak aktarılan options hash'i aracılığıyla erişilir.

Fastlane, OptionalHash aracılığıyla doğrulama ile tür bildirimli parametreleri destekler. Değer türü (String, Boolean, Integer), varsayılan değer ve otomatik belge oluşturma için açıklama ayarlanabilir. Ayrıca CI/CD sistemleri için kullanışlı alternatif bir parametre aktarım yöntemi olarak ortam değişkenleri de mevcuttur.

ruby
# Tür doğrulamalı parametreler
lane :build do |options|
  gym(
    scheme: options[:scheme],
    export_method: options[:export_method] || 'development',
    include_bitcode: options[:include_bitcode] || false,
    output_name: options[:output_name]
  )
  slack(message: "Derleme #{options[:scheme]} tamamlandı")
end

# Çalıştırma: fastlane build scheme:MyApp export_method:appstore

Tüm isteğe bağlı parametreler için varsayılan değerler kullanmanız önerilir, böylece lane her argümanı açıkça belirtmeden çalıştırılabilir. Zorunlu parametreler için lane başında değerin varlığını kontrol edin ve UI.user_error! aracılığıyla anlaşılır bir hata mesajıyla yürütmeyi durdurun.

Sıkça Sorulan Sorular

Mobil geliştirmede Fastfile nedir?

Fastfile, Ruby ile yazılmış, iOS ve Android uygulamalarının derlenmesi, test edilmesi ve dağıtımı için otomasyon senaryolarını tanımlayan Fastlane yapılandırma dosyasıdır. Dosya fastlane dizininde bulunur ve CI/CD süreçleri için adlandırılmış eylem dizileri olan lanes içerir.

iOS için basit bir Fastfile nasıl yazılır?

Proje kökünde fastlane dizini ve Fastfile dosyası oluşturun. default_platform(:ios) ekleyin, :build adında bir lane bildirin, içinde bağımlılıkları yüklemek için cocoapods ve derleme için gym çağrısı yapın. Proje kökünden terminalde fastlane build ile çalıştırın.

Private lane normal lane'den nasıl farklıdır?

Private lane, lane yerine private_lane ile bildirilir ve komut satırından doğrudan çağrılamaz. Yalnızca Fastfile içindeki diğer lanes'lerden çağrılabilir. Bağımsız senaryolar olarak anlamlı olmayan tekrarlayan adımları kapsüllemek için kullanılır.

Fastfile lane'ine parametreler nasıl aktarılır?

Parametreler komut satırı fastlane build scheme:App aracılığıyla aktarılır ve lane içinde options hash'i aracılığıyla erişilebilir. || operatörü ile varsayılan değerler ayarlanabilir ve zorunlu parametreler için lane başında raise veya UI.user_error! ile varlık kontrolü yapın.

Fastfile projede nerede bulunmalıdır?

Fastfile, proje kökündeki fastlane dizininde bulunmalıdır. Örnek: /Users/user/projects/MyApp/fastlane/Fastfile. Fastlane, proje kökünden çalıştırıldığında dosyayı otomatik olarak bulur. Aynı dizinde Appfile, Matchfile ve diğer yapılandırma dosyaları da bulunabilir.

Özet

  • Fastfile — mobil uygulamalar için CI/CD senaryolarını tanımlayan Ruby ile yazılmış Fastlane yapılandırma dosyası
  • Lane — parametre ve hata yönetimi desteğiyle eylem dizisini birleştiren adlandırılmış senaryo
  • Private lane — doğrudan çalıştırılamayan, tekrarlayan mantığı kapsülleyen gizli senaryo
  • iOS Fastfile before_all, test (scan), derleme (gym) ve dağıtım (pilot, deliver) için lanes içerir
  • Android Fastfile derleme için gradle action'ı ve Google Play'de yayınlama için supply action'ı kullanır
  • Parametreler komut satırı aracılığıyla aktarılır, varsayılan değer desteğiyle options hash'i aracılığıyla erişilir
  • Fastfile, projeyle birlikte Git'te sürümlenir ve ekipteki tüm makinelerde tekrarlanabilir derlemeler sağlar

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