Fastfile — Ruby tilidagi Fastlane konfiguratsiya fayli bo‘lib, mobil ilovalarni qurish, sinovdan o‘tkazish va yetkazib berish uchun avtomatlashtirish stsenariylarini belgilaydi. Fayl loyiha ildizidagi fastlane katalogida joylashgan va lanes — nomlangan harakatlar ketma-ketligi deklaratsiyalarini o‘z ichiga oladi. Fastlane Docs, 2025 ma’lumotlariga ko‘ra, mobil loyihalarning 70% i CI/CD jarayonlari uchun Fastfile dan foydalanadi. Fastfile o‘nlab bash skriptlarini yagona deklarativ quvur liniyasi tavsifi bilan almashtiradi.
Asosiy fikrlar
Fastfile — Ruby tilida yozilgan va loyiha ildizidagi fastlane katalogida joylashgan asosiy Fastlane konfiguratsiya fayli. U ilovani qurish, sinovdan o‘tkazish, kodni imzolash va yetkazib berish uchun barcha avtomatlashtirish stsenariylarini (lanes) belgilaydi. Fastfile o‘nlab bash skriptlari, Makefile va qo‘llanmalarni yagona deklarativ CI/CD quvur liniyasi tavsifi bilan almashtiradi.
Fastfile ga ehtiyoj loyiha turli dasturchi mashinalari va CI/CD serverlarida takrorlanadigan qurilishlarni talab qilganda paydo bo‘ladi. Har bir dasturchi muhitni qo‘lda sozlash o‘rniga, Fastfile barcha qadamlarni Git da versiyalanishi, ko‘rib chiqilishi va loyihalar o‘rtasida qayta ishlatilishi mumkin bo‘lgan kodda qayd etadi. Yagona Fastfile dasturchi mashinasidagi qurilish CI/CD serveridagi qurilish bilan bir xil bo‘lishini kafolatlaydi.
Fastfile platformalarni default_platform direktivasi orqali qo‘llab-quvvatlaydi. Bitta Fastfile da iOS, Android va macOS uchun stsenariylarni tasvirlab, ularni platform :ios va platform :android bloklarida guruhlash mumkin. Bu, ayniqsa, iOS va Android qurilishlari umumiy joylashtirish mantiqiga ega, ammo turli qurish vositalariga ega bo‘lgan kross-platforma loyihalari uchun qulaydir.
Fastfile uchta asosiy elementdan iborat: platforma deklaratsiyasi (default_platform), lanes ta‘riflari va yordamchi funksiyalarni sozlash. Har bir lane kalit so‘z lane bilan boshlanadi, undan keyin stsenariy nomi (Ruby belgisi), actions ketma-ketligi bilan tana va error, success yoki ensure xato boshqaruvi bloklari keladi.
Actions Fastfile da — Hash ko‘rinishidagi parametrlarga ega o‘rnatilgan Fastlane funksiyalariga chaqiruvlar. Masalan, gym(scheme: 'App', export_method: 'app-store') ko‘rsatilgan parametrlar bilan iOS ilovasini qurishni ishga tushiradi. Har bir action o‘zgaruvchida saqlanishi va keyingi actions da ishlatilishi mumkin bo‘lgan natijani qaytaradi — bu lane ichida shartli mantiq qurishga imkon beradi.
Fastfile Ruby dagi ENV standart mexanizmi orqali muhit o‘zgaruvchilarini qo‘llab-quvvatlaydi. Nozik ma’lumotlar (parollar, tokenlar, kalitlar) Fastfile da saqlanmasligi kerak — CI/CD tizimining muhit o‘zgaruvchilaridan yoki .gitignore ga qo‘shilgan .env faylidan foydalaning. Fastlane ishga tushirilganda fastlane katalogidan .env fayllarini avtomatik yuklaydi.
Fastfile bilan birga fastlane katalogida qo‘shimcha konfiguratsiya fayllari joylashadi. Appfile ilova identifikatorlarini (app_identifier), Apple ID va Team ID ni o‘z ichiga oladi — bu ma’lumotlar barcha actions da avtomatik almashtiriladi, har bir lane da takrorlanishni bartaraf etadi. Matchfile match uchun sozlamalarni saqlaydi: Git ombori URL i, profil turlari va shifrlash kaliti.
Konfiguratsiyani bir nechta fayllarga bo‘lish turli muhitlarga ega loyihalarni qo‘llab-quvvatlashni osonlashtiradi. Masalan, staging va production uchun Matchfile omborida alohida tarmoqlar yaratish yoki CI/CD tizimida muhit o‘zgaruvchilari orqali parametrlarni bekor qilish mumkin.
# Fastfile ning asosiy tuzilishi
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 sintaksisi avtomatlashtirish stsenariylarining o‘qilishi uchun maxsus ishlab chiqilgan Ruby DSL (Domain Specific Language) ga asoslangan. Lane lane :name do ... end konstruksiyasi orqali e‘lon qilinadi, bu yerda name terminal yoki CI/CD tizimidan ishga tushirish uchun fastlane name buyrug‘iga aylanadigan Ruby belgisidir.
Lane ichida mantiqiy tarmoqlanish uchun Ruby ning shartli operatorlaridan if, unless, case foydalanish mumkin. Shuningdek, qiymat massivlarini qayta ishlash uchun each va while siklari mavjud. Fastlane lane hayot aylanish hodisalarini boshqarish uchun maxsus before_all, after_all metodlari va error bloklarini taqdim etadi.
Lane parametrlari options hash orqali uzatiladi. fastlane build --option_name value ishga tushirilganda qiymat lane ichida options[:option_name] ga tushadi. Uzatiladigan parametrlar turlarini nazorat qilish uchun optional: true orqali standart qiymatlar va type validatsiyasini o‘rnatish mumkin.
# Parametrlar va shartli mantiq bilan 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 loyihasi uchun to‘liq Fastfile bog‘liqliklarni o‘rnatish, sinovdan o‘tkazish, qurish va TestFlight va App Store ga joylashtirish uchun lanes ni o‘z ichiga oladi. Ichki sinov uchun commit dan TestFlight da nashrga qadar odatdagi CI/CD jarayonini qamrab oluvchi misolni ko‘rib chiqamiz.
# iOS CI/CD yetkazib berish uchun 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: 'Ichki sinov uchun TestFlight ga yuklandi'
)
end
Ushbu misolda before_all bloki har bir lane dan oldin bajariladi va bog‘liqliklarni o‘rnatadi. Lane tests ikkita qurilmada UI va Unit testlarini ishga tushiradi. Lane build_appstore match orqali kodni imzolaydi va bitcode bilan IPA quradi. Lane deploy_testflight to‘liq yetkazib berish uchun barcha qadamlarni birlashtiradi.
Bir nechta targetga ega loyihalar (asosiy ilova, watchOS, vidjet, Notification Service Extension) har bir target uchun alohida lanes talab qiladi. Fastfile da parametr sifatida sxema nomi va qurish yo‘lini qabul qiluvchi universal lane :deploy_target yaratish mumkin. Bu fastlane deploy_target scheme:Widget orqali barcha kengaytmalar uchun joylashtirishni ishga tushirishga imkon beradi.
Bir nechta targetlarni tashkil qilish uchun lane ichida sxemalar massivi va each siklidan foydalaning. Fastlane parallel: true bayrog‘i orqali bir nechta sxemalarning parallel qurilishini qo‘llab-quvvatlaydi, bu kengaytmalarga ega ilovalar uchun umumiy CI/CD quvur liniyasi vaqtini qisqartiradi.
Android loyihasi uchun Fastfile Gradle vazifalarini ishga tushirish uchun gradle action va Google Play da nashr qilish uchun supply action dan foydalanadi. iOS dan farqli o‘laroq, Android match talab qilmaydi, lekin ombordan tashqarida saqlanadigan va muhit o‘zgaruvchilari orqali uzatiladigan Keystore dan foydalanadi.
# Android CI/CD qurish uchun 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 ilovasini imzolash uchun build.gradle da signingConfigs ni sozlang va Keystore parametrlarini muhit o‘zgaruvchilari orqali uzating: ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS va ANDROID_KEY_PASSWORD. Fastlane qurilgan AAB yoki APK ni imzolash uchun tizim apksigner dan avtomatik foydalanadi.
Fastfile da Android imzolashni sozlash uchun sign_android action dan foydalaning yoki build.gradle dagi signingConfigs ga tayanishingiz mumkin. Fastlane Gradle orqali apksigner bilan integratsiyalanadi — gradle task da SIGNING_CONFIG bayrog‘ining uzatilishi muhit o‘zgaruvchilaridagi parametrlar bilan imzolashni faollashtiradi. Bu Google Play Console ga yuklashdan oldin AAB fayllarini imzolashga imkon beradi.
CI/CD da Keystore ni xavfsiz saqlash uchun Base64 kodlash va muhit o‘zgaruvchilaridan foydalaning. Fastlane o‘zgaruvchidan Keystore ni dekodlaydigan va before_all bosqichida vaqtinchalik faylga saqlaydigan setup_keystore action ini qo‘llab-quvvatlaydi. Lane tugagandan so‘ng, sertifikatlar sizib chiqishining oldini olish uchun vaqtinchalik fayl avtomatik o‘chiriladi.
Private lanes (yopiq stsenariylar) — buyruq satridan to‘g‘ridan-to‘g‘ri chaqirilmaydigan, ammo Fastfile ichidagi boshqa lanes dan chaqirish uchun mavjud bo‘lgan lanes dir. Private lane private_lane :name do ... end konstruksiyasi orqali e‘lon qilinadi va mustaqil stsenariylar sifatida ma’noga ega bo‘lmagan takrorlanuvchi qadamlarni inkapsulyatsiya qilish uchun ishlatiladi.
Private lanes takrorlanuvchi mantiqni guruhlash uchun idealdir: bog‘liqliklarni o‘rnatish, muhitni sozlash, bildirishnomalarni yuborish. Masalan, bir nechta joylashtirish lanes dan chaqiriladigan, ammo xatolarning oldini olish uchun dasturchi tomonidan to‘g‘ridan-to‘g‘ri ishga tushirilishi mumkin bo‘lmagan private lane :setup_signing yaratish mumkin.
# Private lane va guruhlash
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 bloklari orqali lanes ni guruhlash bitta Fastfile da iOS va Android uchun stsenariylarni ajratishga imkon beradi. platform :ios do ... end va platform :android do ... end konstruksiyalari tegishli platformaning lanes larini izolyatsiya qiladi, umumiy private lanes esa qayta foydalanish uchun platforma bloklaridan tashqariga chiqarilishi mumkin.
Parametrlar mexanizmi Fastfile da lanes larni moslashuvchan va qayta ishlatiladigan qilishga imkon beradi. Parametrlar ishga tushirish vaqtida buyruq satri orqali uzatiladi: fastlane build scheme:App export_method:appstore. Lane ichida qiymatlar lane blokiga argument sifatida uzatiladigan options hash orqali mavjud.
Fastlane OptionalHash orqali validatsiya bilan tiplangan parametrlarni qo‘llab-quvvatlaydi. Qiymat turini (String, Boolean, Integer), standart qiymatni va avtomatik hujjatlashtirish uchun tavsifni o‘rnatish mumkin. Shuningdek, parametrlarni uzatishning muqobil usuli sifatida muhit o‘zgaruvchilari mavjud, bu CI/CD tizimlari uchun qulaydir.
# Turlarni validatsiya qilish bilan parametrlar
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: "Qurish #{options[:scheme]} tugallandi")
end
# Ishga tushirish: fastlane build scheme:MyApp export_method:appstore
Barcha ixtiyoriy parametrlar uchun standart qiymatlardan foydalanish tavsiya etiladi, shunda lane har bir argumentni aniq ko‘rsatmasdan ishga tushirilishi mumkin. Majburiy parametrlar uchun lane boshida qiymat mavjudligini tekshiring va UI.user_error! orqali tushunarli xato xabari bilan bajarishni to‘xtating.
Tez-tez beriladigan savollar
Fastfile — Ruby tilidagi Fastlane konfiguratsiya fayli bo‘lib, iOS va Android ilovalarini qurish, sinovdan o‘tkazish va yetkazib berish uchun avtomatlashtirish stsenariylarini belgilaydi. Fayl fastlane katalogida joylashgan va CI/CD jarayonlari uchun lanes — nomlangan harakatlar ketma-ketligini o‘z ichiga oladi.
Loyiha ildizida fastlane katalogi va Fastfile faylini yarating. default_platform(:ios) qo‘shing, :build nomli lane ni e‘lon qiling, ichida bog‘liqliklarni o‘rnatish uchun cocoapods va qurish uchun gym ni chaqiring. Loyiha ildizidagi terminaldan fastlane build orqali ishga tushiring.
Private lane lane o‘rniga private_lane orqali e‘lon qilinadi va buyruq satridan to‘g‘ridan-to‘g‘ri chaqirilmaydi. U faqat Fastfile ichidagi boshqa lanes dan chaqirish uchun mavjud. Mustaqil stsenariylar sifatida ma’noga ega bo‘lmagan takrorlanuvchi qadamlarni inkapsulyatsiya qilish uchun ishlatiladi.
Parametrlar buyruq satri orqali uzatiladi: fastlane build scheme:App va lane ichida options hash orqali mavjud. || operatori orqali standart qiymatlarni o‘rnatish mumkin, majburiy parametrlar uchun esa lane boshida raise yoki UI.user_error! orqali mavjudligini tekshirish mumkin.
Fastfile loyiha ildizidagi fastlane katalogida joylashishi kerak. Misol: /Users/user/projects/MyApp/fastlane/Fastfile. Fastlane loyiha ildizidan ishga tushirilganda faylni avtomatik topadi. Qo‘shimcha ravishda, xuddi shu katalogda Appfile, Matchfile va boshqa konfiguratsiya fayllari bo‘lishi mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.