Fastfile — конфигурациони фајл Fastlane на језику Ruby, који дефинише сценарије аутоматизације за изградњу, тестирање и доставу мобилних апликација. Фајл се налази у директоријуму fastlane у корену пројекта и садржи декларације lanes — именованих секвенци радњи. Према Fastlane Docs, 2025, 70% мобилних пројеката користи Fastfile за CI/CD процесе. Fastfile замењује десетине bash скрипти јединственим декларативним описом цевовода.
Главно
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 се састоји од три главна елемента: декларација платформе (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 при покретању.
Заједно са Fastfile-ом у директоријуму fastlane налазе се додатни конфигурациони фајлови. Appfile садржи идентификаторе апликације (app_identifier), Apple ID и Team ID — ови подаци се аутоматски замењују у свим actions, елиминишући понављање у сваком lane-у. Matchfile чува подешавања за match: URL Git репозиторијума, тип профила и кључ за шифровање.
Подела конфигурације на више фајлова олакшава одржавање пројеката са различитим окружењима. На пример, за staging и production могу се креирати засебне гране у репозиторијуму Matchfile-а или преиначити параметри кроз променљиве окружења у CI/CD систему.
# Основна структура 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 се заснива на 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 за контролу типова пренесених параметара.
# 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 пројекат укључује lanes за инсталацију зависности, тестирање, изградњу и деплој у TestFlight и App Store. Размотримо пример који покрива типичан CI/CD процес од комита до објављивања у TestFlight-у за интерно тестирање.
# 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 пројекат користи gradle action за покретање Gradle задатака и supply action за објављивање у Google Play-у. За разлику од iOS-а, Android не захтева match, али користи Keystore за потписивање, који се чува ван репозиторијума и преноси кроз променљиве окружења.
# 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-у користите 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 (затворени сценарији) — lanes који не могу бити позвани директно из командне линије, али су доступни за позив из других lanes унутар Fastfile-а. Private lane се декларише кроз конструкцију private_lane :name do ... end и користи се за инкапсулацију понављајућих корака који немају смисла као самостални сценарији.
Private lanes су идеални за груписање понављајуће логике: инсталација зависности, подешавање окружења, слање обавештења. На пример, може се креирати private lane :setup_signing који се позива из неколико lanes деплоја, али не би требало да буде доступан за директно покретање од стране програмера како би се избегле грешке.
# 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 се могу извући ван платформских блокова за поновну употребу.
Механизам параметара Fastfile-а омогућава да lanes буду флексибилни и поновно употребљиви. Параметри се преносе при покретању кроз командну линију: fastlane build scheme:App export_method:appstore. Унутар lane-а вредности су доступне кроз options hash који се преноси у блок lane-а као аргумент.
Fastlane подржава типизиране параметре са валидацијом кроз OptionalHash. Могу се поставити тип вредности (String, Boolean, Integer), подразумевана вредност и опис за аутоматско генерисање документације. Такође су доступне променљиве окружења као алтернативни начин преноса параметара, што је згодно за CI/CD системе.
# Параметри са валидацијом типова
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 — конфигурациони фајл Fastlane на Ruby који дефинише сценарије аутоматизације за изградњу, тестирање и доставу iOS и Android апликација. Фајл се налази у директоријуму fastlane и садржи lanes — именоване секвенце радњи за CI/CD процесе.
Направите директоријум fastlane у корену пројекта и фајл Fastfile. Додајте default_platform(:ios), декларишите lane са именом :build, унутар позовите cocoapods за инсталацију зависности и gym за изградњу. Покрените кроз fastlane build из терминала у корену пројекта.
Private lane се декларише кроз private_lane уместо lane и не може се позвати директно из командне линије. Доступан је само за позив из других lanes унутар Fastfile-а. Користи се за инкапсулацију понављајућих корака који немају смисла као самостални сценарији.
Параметри се преносе кроз командну линију fastlane build scheme:App и доступни су унутар lane-а кроз options hash. Могу се поставити подразумеване вредности кроз оператор ||, а за обавезне параметре проверавати присуство кроз raise или UI.user_error! на почетку lane-а.
Fastfile треба да се налази у директоријуму fastlane у корену пројекта. Пример: /Users/user/projects/MyApp/fastlane/Fastfile. Fastlane аутоматски проналази фајл при покретању из корена пројекта. Додатно, у истом директоријуму могу бити Appfile, Matchfile и други конфигурациони фајлови.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође