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, 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 üç 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.
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.
# 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, 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.
# 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
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.
# 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 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.
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.
# 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 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 (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.
# 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.
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.
# 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
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.
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, 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.
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, 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
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