Fastfile: суштина, структура и подешавање аутоматизације у мобилном развоју

Аутор: IT Sectr Објављено: 2026-04-14 Време читања: 10 мин

Fastfile — конфигурациони фајл Fastlane на језику Ruby, који дефинише сценарије аутоматизације за изградњу, тестирање и доставу мобилних апликација. Фајл се налази у директоријуму fastlane у корену пројекта и садржи декларације lanes — именованих секвенци радњи. Према Fastlane Docs, 2025, 70% мобилних пројеката користи Fastfile за CI/CD процесе. Fastfile замењује десетине bash скрипти јединственим декларативним описом цевовода.

Главно

  • Fastfile — конфигурациони фајл Fastlane на Ruby у директоријуму fastlane/
  • Lane — именовани сценариј са секвенцом action и обрадом грешака
  • Action — уграђена команда Fastlane (gym, scan, match, deliver) са параметрима
  • Private lane — унутрашњи сценариј позван из других lanes без директног покретања
  • Параметри — пренос вредности у lane кроз option и приступ кроз променљиве

Шта је Fastfile и зашто је потребан

Fastfile — главни конфигурациони фајл Fastlane, написан на језику Ruby и смештен у директоријуму fastlane у корену пројекта. Он дефинише све сценарије аутоматизације (lanes) за изградњу, тестирање, потписивање кода и доставу апликације. Fastfile замењује десетине bash скрипти, Makefile и ручних упутстава јединственим декларативним описом CI/CD цевовода.

Потреба за Fastfile настаје када пројекат захтева поновљиве изградње на различитим машинама програмера и CI/CD серверима. Уместо да сваки програмер ручно подешава окружење, Fastfile бележи све кораке у коду који се може верзионисати у Git-у, прегледати и поново користити између пројеката. Јединствени Fastfile гарантује да је изградња на машини програмера идентична изградњи на CI/CD серверу.

Fastfile подржава платформе кроз директиву default_platform. У једном Fastfile-у могу се описати сценарији за iOS, Android и macOS, групишући их у блокове platform :ios и platform :android. Ово је посебно згодно за крос-платформске пројекте, где iOS и Android изградње имају заједничку логику деплоја, али различите алате за изградњу.

Структура Fastfile: lanes, actions и параметри

Fastfile се састоји од три главна елемента: декларација платформе (default_platform), дефиниција lanes и подешавање помоћних функција. Сваки lane почиње кључном речи lane, након чега следи назив сценарија (Ruby симбол), тело са секвенцом actions и блокови за обраду грешака error, success или ensure.

Actions у Fastfile-у — позиви уграђених функција Fastlane-а са параметрима у облику Hash-а. На пример, gym(scheme: 'App', export_method: 'app-store') покреће изградњу iOS апликације са наведеним параметрима. Сваки action враћа резултат који се може сачувати у променљивој и користити у наредним actions — ово омогућава изградњу условне логике унутар lane-а.

Fastfile подржава променљиве окружења кроз стандардни механизам ENV у Ruby-ју. Осетљиви подаци (лозинке, токени, кључеви) не треба да се чувају у Fastfile-у — користите променљиве окружења CI/CD система или .env фајл који је додат у .gitignore. Fastlane аутоматски учитава .env фајлове из директоријума fastlane при покретању.

Appfile и Matchfile

Заједно са Fastfile-ом у директоријуму fastlane налазе се додатни конфигурациони фајлови. Appfile садржи идентификаторе апликације (app_identifier), Apple ID и Team ID — ови подаци се аутоматски замењују у свим actions, елиминишући понављање у сваком lane-у. Matchfile чува подешавања за match: URL Git репозиторијума, тип профила и кључ за шифровање.

Подела конфигурације на више фајлова олакшава одржавање пројеката са различитим окружењима. На пример, за staging и production могу се креирати засебне гране у репозиторијуму Matchfile-а или преиначити параметри кроз променљиве окружења у CI/CD систему.

ruby
# Основна структура Fastfile
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: писање lanes

Синтакса Fastfile се заснива на Ruby DSL (Domain Specific Language), посебно дизајнираном за читљивост сценарија аутоматизације. Lane се декларише кроз конструкцију lane :name do ... end, где је name Ruby симбол који постаје команда fastlane name за покретање из терминала или CI/CD система.

Унутар lane-а могу се користити условни оператори Ruby-ја: if, unless, case за гранање логике. Такође су доступне петље each и while за обраду низова вредности. Fastlane пружа посебне методе before_all, after_all и error блокове за обраду догађаја животног циклуса lane-а.

Параметри lane-а се преносе кроз options hash. При покретању fastlane build --option_name value вредност доспева у options[:option_name] унутар lane-а. Могу се поставити подразумеване вредности кроз optional: true и валидација type за контролу типова пренесених параметара.

ruby
# 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

Пример Fastfile за iOS доставу

Потпуни Fastfile за iOS пројекат укључује lanes за инсталацију зависности, тестирање, изградњу и деплој у TestFlight и App Store. Размотримо пример који покрива типичан CI/CD процес од комита до објављивања у TestFlight-у за интерно тестирање.

ruby
# Fastfile за iOS CI/CD доставу
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: 'Билд је учитан у TestFlight за интерно тестирање'
  )
end

У овом примеру before_all блок се извршава пре сваког lane-а и инсталира зависности. Lane tests покреће UI и Unit тестове на два уређаја. Lane build_appstore потписује код кроз match и гради IPA са bitcode-ом. Lane deploy_testflight комбинује све кораке за потпуну доставу.

Деплој са више таргета

Пројекти са више таргета (главна апликација, watchOS, widget, Notification Service Extension) захтевају засебне lanes за сваки таргет. У Fastfile-у се може креирати универзални lane :deploy_target који прима назив шеме и путању до изградње као параметар. Ово омогућава покретање деплоја за сва проширења кроз fastlane deploy_target scheme:Widget.

За организацију више таргета користите низ шема и петљу each унутар lane-а. Fastlane подржава паралелну изградњу више шема кроз заставу parallel: true, што скраћује укупно време CI/CD цевовода за апликације са проширењима.

Пример Fastfile за Android изградњу

Fastfile за Android пројекат користи gradle action за покретање Gradle задатака и supply action за објављивање у Google Play-у. За разлику од iOS-а, Android не захтева match, али користи Keystore за потписивање, који се чува ван репозиторијума и преноси кроз променљиве окружења.

ruby
# Fastfile за Android CI/CD изградњу
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 апликације подесите signingConfigs у build.gradle-у и пренесите Keystore параметре кроз променљиве окружења: ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS и ANDROID_KEY_PASSWORD. Fastlane аутоматски користи системски apksigner за потписивање изграђеног AAB или APK-а.

Потписивање Android у Fastfile-у

За подешавање потписивања Android у Fastfile-у користите action sign_android или се ослоните на signingConfigs у build.gradle-у. Fastlane се интегрише са apksigner-ом кроз Gradle — пренос заставе SIGNING_CONFIG у gradle task активира потписивање са параметрима из променљивих окружења. Ово омогућава потписивање AAB фајлова пре учитавања у Google Play Console.

За безбедно чување Keystore-а у CI/CD-у користите Base64 кодирање и променљиве окружења. Fastlane подржава action setup_keystore, који декодира Keystore из променљиве и чува у привремени фајл у фази before_all. Након завршетка lane-а, привремени фајл се аутоматски брише ради спречавања цурења сертификата.

Коришћење private lanes и група

Private lanes (затворени сценарији) — lanes који не могу бити позвани директно из командне линије, али су доступни за позив из других lanes унутар Fastfile-а. Private lane се декларише кроз конструкцију private_lane :name do ... end и користи се за инкапсулацију понављајућих корака који немају смисла као самостални сценарији.

Private lanes су идеални за груписање понављајуће логике: инсталација зависности, подешавање окружења, слање обавештења. На пример, може се креирати private lane :setup_signing који се позива из неколико lanes деплоја, али не би требало да буде доступан за директно покретање од стране програмера како би се избегле грешке.

ruby
# Private lane и груписање
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

Груписање lanes кроз platform блокове омогућава раздвајање сценарија за iOS и Android у једном Fastfile-у. Конструкција platform :ios do ... end и platform :android do ... end изолује lanes одговарајуће платформе, а заједнички private lanes се могу извући ван платформских блокова за поновну употребу.

Пренос параметара у lanes

Механизам параметара Fastfile-а омогућава да lanes буду флексибилни и поновно употребљиви. Параметри се преносе при покретању кроз командну линију: fastlane build scheme:App export_method:appstore. Унутар lane-а вредности су доступне кроз options hash који се преноси у блок lane-а као аргумент.

Fastlane подржава типизиране параметре са валидацијом кроз OptionalHash. Могу се поставити тип вредности (String, Boolean, Integer), подразумевана вредност и опис за аутоматско генерисање документације. Такође су доступне променљиве окружења као алтернативни начин преноса параметара, што је згодно за CI/CD системе.

ruby
# Параметри са валидацијом типова
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: "Сборка #{options[:scheme]} завершена")
end

# Покретање: fastlane build scheme:MyApp export_method:appstore

Препоручује се коришћење подразумеваних вредности за све опционе параметре, како би lane могао да се покрене без експлицитног навођења сваког аргумента. За обавезне параметре проверавајте присуство вредности на почетку lane-а и прекините извршење са разумљивом поруком о грешци кроз UI.user_error!.

Често постављана питања

Шта је Fastfile у мобилном развоју?

Fastfile — конфигурациони фајл Fastlane на Ruby који дефинише сценарије аутоматизације за изградњу, тестирање и доставу iOS и Android апликација. Фајл се налази у директоријуму fastlane и садржи lanes — именоване секвенце радњи за CI/CD процесе.

Како написати једноставан Fastfile за iOS?

Направите директоријум fastlane у корену пројекта и фајл Fastfile. Додајте default_platform(:ios), декларишите lane са именом :build, унутар позовите cocoapods за инсталацију зависности и gym за изградњу. Покрените кроз fastlane build из терминала у корену пројекта.

Чиме се private lane разликује од обичне?

Private lane се декларише кроз private_lane уместо lane и не може се позвати директно из командне линије. Доступан је само за позив из других lanes унутар Fastfile-а. Користи се за инкапсулацију понављајућих корака који немају смисла као самостални сценарији.

Како пренети параметре у lane Fastfile-а?

Параметри се преносе кроз командну линију fastlane build scheme:App и доступни су унутар lane-а кроз options hash. Могу се поставити подразумеване вредности кроз оператор ||, а за обавезне параметре проверавати присуство кроз raise или UI.user_error! на почетку lane-а.

Где треба да се налази Fastfile у пројекту?

Fastfile треба да се налази у директоријуму fastlane у корену пројекта. Пример: /Users/user/projects/MyApp/fastlane/Fastfile. Fastlane аутоматски проналази фајл при покретању из корена пројекта. Додатно, у истом директоријуму могу бити Appfile, Matchfile и други конфигурациони фајлови.

Резиме

  • Fastfile — конфигурациони фајл Fastlane на Ruby, који дефинише CI/CD сценарије за мобилне апликације
  • Lane — именовани сценариј који обједињује секвенцу actions са подршком за параметре и обраду грешака
  • Private lane — затворени сценариј за инкапсулацију понављајуће логике, недоступан за директно покретање
  • iOS Fastfile укључује before_all, lanes за тестирање (scan), изградњу (gym) и деплој (pilot, deliver)
  • Android Fastfile користи gradle action за изградњу и supply action за објављивање у Google Play-у
  • Параметри се преносе кроз командну линију, доступни кроз options hash са подршком за подразумеване вредности
  • Fastfile се верзионише у Git-у заједно са пројектом, обезбеђујући поновљиве изградње на свим машинама тима

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође