Ruby — динамички интерпретирани језик са елегантном синтаксом, познат по Ruby on Rails оквиру. У мобилном развоју Ruby се пре свега користи кроз Fastlane — стандардни алат за аутоматизацију изградње, тестирања и примене iOS и Android апликација. Према званичној документацији Fastlane, алат се користи у преко 100 000 пројеката широм света.
Главно
Ruby — динамички интерпретирани језик отвореног кода, креиран од стране Јукихира Мацумота 1995. године. Основни принцип Ruby — «оптимална једноставност» (principle of least surprise). Језик је познат по блоковима (closures), чистом објектно-оријентисаном приступу (све је објекат, укључујући бројеве) и моћном систему метапрограмирања.
Ruby ради на YARV (Yet Another Ruby VM) интерпретатору са JIT компилацијом од верзије 3.1. Актуелна верзија Ruby 3.4 (2025) укључује декораторе, побољшани Prism парсер и експерименталну подршку за типове кроз RBS. RubyGems — менаџер пакета — садржи преко 200 000 гемова.
Ruby on Rails — најпознатији веб оквир у Ruby, али у мобилном развоју Ruby се користи другачије. Главна ниша — Fastlane: екосистем Ruby скрипти и гемова за аутоматизацију свих фаза животног циклуса мобилне апликације: од потписивања сертификата до објављивања у продавницама.
За рад са Fastlane довољно је основно разумевање Ruby: методе, do-end блокови, симболи (:symbol) и синтакса хешева { key: value }. За разлику од Python-а, Ruby користи end за затварање блокова, а не увлачење. Методе се могу позивати без заграда — ово се активно користи у Fastlane DSL-у.
# Основна Ruby синтакса која се користи у Fastlane
def download_assets(version, platform: "ios")
paths = {
ios: "ios/Assets.car",
android: "android/app/src/main/assets"
}
url = "https://cdn.example.com/assets/#{version}/#{paths[platform.to_sym]}"
puts "Downloading from: #{url}"
unless File.exist?("temp/assets")
Dir.mkdir("temp/assets")
end
result = system("curl -o temp/assets.zip #{url}")
raise "Download failed" unless result
end
download_assets("1.2.3", platform: "android")У примеру, метода download_assets прима аргумент version и опциони именовани параметар platform (подразумевано ios). Интерполација стрингова кроз #{} уграђује вредности директно у стрингове. unless — супротност if-у, извршава код ако је услов лажан.
Fastlane — алат отвореног кода, написан у Ruby. Инсталиран кроз gem install fastlane, пружа скуп команди за аутоматизацију најрутинскијих задатака мобилног програмера: креирање снимака екрана, потписивање кода, објављивање у TestFlight и Google Play Console.
Fastlane се састоји од алата (tools): sigh (управљање сертификатима), match (синхронизација сертификата у тиму), gym (изградња iOS), gradle (изградња Android), deliver (објављивање iOS), supply (објављивање Android), snapshot (снимци екрана), scan (тестирање). Сви алати су доступни из једног Fastfile-а.
У великим пројектима Fastlane обрађује до 50+ акција у једном цевоводу: инкремент верзије, преузимање асета са CDN-а, изградња, потписивање, отпремање у App Store Connect, слање обавештења у Slack. Цео цевовод се извршава једном командом: fastlane release.
Fastfile — фајл у Ruby-сличном DSL-у који описује секвенцу акција (lane). Сваки lane је посебан задатак: beta (изградња за тестирање), release (издање), screenshots (генерисање снимака екрана). Lane-ови могу позивати друге lane-ове са прослеђеним параметрима.
# Fastfile — конфигурација цевовода изградње iOS апликације
fastlane_version "2.220.0"
default_platform :ios
platform :ios do
desc "Изградња и примена TestFlight билда"
lane :beta do |options|
increment_build_number(
build_number: options[:build]
)
match(type: :appstore)
gym(
scheme: "MyApp",
export_method: "app-store",
configuration: "Release"
)
upload_to_testflight(
app_identifier: "com.example.myapp"
)
slack(
message: "Билд #{options[:build]} је отпремљен у TestFlight"
)
end
endLane beta извршава секвенцијално: инкремент броја изградње (increment_build_number), синхронизацију сертификата (match), компилацију архиве (gym), отпремање у TestFlight (upload_to_testflight) и слање обавештења у Slack. Параметар :build се прослеђује lane-у као именовани аргумент.
Fastlane подржава обе платформе у једном Fastfile-у. За Android се користи lane унутар platform :android са акцијама gradle, supply и google_play_track_version_codes.
platform :android do
desc "Изградња APK и објављивање у Google Play Internal Testing"
lane :beta do
gradle(
task: "assemble",
build_type: "Release",
flavor: "Production"
)
supply(
track: "internal",
apk_paths: ["app/build/outputs/apk/release/app-release.apk"]
)
end
endFastlane укључује преко 200 уграђених акција. Испод — најважније за мобилни развој, подељене по категоријама.
| Акција | Платформа | Намена |
|---|---|---|
| match | iOS | Синхронизација сертификата и provisioning профила кроз Git |
| gym | iOS | Компилација .app и .ipa архиве |
| scan | iOS | Покретање UI тестова на симулатору |
| snapshot | iOS | Аутоматско генерисање снимака екрана на различитим уређајима |
| deliver | iOS | Отпремање билда, снимака екрана и метаподатака у App Store Connect |
| pilot | iOS | Управљање TestFlight-ом: отпремање билда, додавање тестера |
| gradle | Android | Покретање Gradle задатака: assemble, test, bundle |
| supply | Android | Отпремање APK/AAB и метаподатака у Google Play Console |
| screengrab | Android | Аутоматски снимци екрана за Google Play |
| firebase_app_distribution | Обе | Отпремање билда у Firebase App Distribution |
match — Fastlane гем за синхронизацију iOS сертификата и provisioning профила између програмера. Све тајне се чувају у шифрованом Git репозиторијуму или S3. Match аутоматски генерише сертификате ако недостају и обнавља их по истеку.
# Иницијализација match за нови пројекат
$ fastlane match init
# Креирање и синхронизација App Store сертификата
$ fastlane match appstore
# Креирање Development сертификата за тим
$ fastlane match development
# Ажурирање свих сертификата по истеку
$ fastlane match --forceMatch чува приватне кључеве са лозинком коју знају само програмери. Сваки програмер клонира репозиторијум сертификата и покреће match за инсталацију актуелних профила. Сертификати Apple важе 1 годину, match их аутоматски обнавља.
Fastlane се интегрише са било којом CI/CD платформом: GitHub Actions, GitLab CI, CircleCI, Bitrise, Jenkins и Xcode Cloud (кроз xcode-build). Fastlane се покреће на CI-ју кроз fastlane <назив_lane-а> и враћа код грешке при неуспеху било ког корака.
Подешавање за GitHub Actions укључује инсталацију Ruby, fastlane и покретање lane-а кроз bundle exec fastlane. За iOS изградњу је потребан macOS runner. За Android се може користити ubuntu-latest, што је јефтиније.
# .github/workflows/deploy.yml — CI/CD са Fastlane
name: Deploy Mobile App
on:
push:
branches: [main]
jobs:
ios-deploy:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- run: bundle install
- run: bundle exec fastlane beta
- env:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}Workflow се покреће при push-у на main. macOS runner извршава bundle exec fastlane beta из Fastfile-а. MATCH_PASSWORD се прослеђује кроз GitHub Secrets за дешифровање сертификата. Након завршетка lane-а, Slack акција шаље обавештење.
RubyGems — менаџер пакета за Ruby. Fastlane се проширује кроз додатке — гемове који додају нове акције. Додатак fastlane-plugin-versioning управља верзијама, fastlane-plugin-firebase_app_distribution отпрема билдове у Firebase. На GitHub-у је преко 500 Fastlane додатака.
Gemfile у корену пројекта фиксира верзије свих зависности за поновљивост изградњи. bundle install инсталира гемове према Gemfile.lock. Главни гемови за мобилни развој: fastlane, cocoapods (iOS зависности), xcodeproj (рад са .xcodeproj).
# Gemfile за мобилни пројекат
source "https://rubygems.org"
gem "fastlane", "~> 2.220"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)Fastlane — није једини алат за аутоматизацију. Упоредимо га са главним алтернативама по критеријумима важним за мобилни тим.
| Критеријум | Fastlane (Ruby) | Bitrise (веб) | Xcode Cloud (Apple) | GitHub Actions (YAML) |
|---|---|---|---|---|
| Флексибилност | Максимална (код) | Средња (steps) | Ниска (ограничен) | Висока |
| iOS | Пуна подршка | Пуна | Пуна (уграђен) | Кроз self-hosted macOS |
| Android | Пуна подршка | Пуна | Нема | Пуна |
| Сертификати (match) | Уграђено | Кроз Code Signing | Аутоматски | Кроз fastlane |
| Локално покретање | Да | Не (само CI) | Не | Кроз act |
| Додаци | 500+ | 200+ интеграција | Нема | 20 000+ акција |
Fastlane остаје најфлексибилнији алат за сложене цевоводе. Bitrise је згодан за тимове без Ruby програмера. Xcode Cloud — за једноставне iOS пројекте. GitHub Actions — ако тим већ користи GitHub.
Често постављана питања
Ruby се не користи за писање мобилних апликација, већ за аутоматизацију процеса изградње, тестирања и примене кроз Fastlane. Fastlane је де факто стандард за CI/CD у iOS и Android развоју.
Fastlane ради на macOS, Linux и Windows, али је за iOS изградњу потребан Xcode и macOS. Android изградње се извршавају на било којој платформи. Локално програмери користе macOS, на CI-ју — macOS за iOS и Linux за Android.
Основно разумевање Ruby довољно је за рад са Fastlane-ом. Fastlane користи Ruby-сличан DSL у Fastfile-у. За типичне задатке довољно је познавање гемова, do-end блокова и основне синтаксе. Дубинско знање Ruby није потребно.
Алтернативе: Gradle за Android (уграђен), Xcode Cloud (Apple), Bitrise (веб интерфејс), GitHub Actions (YAML). Fastlane остаје најфлексибилнији алат захваљујући богатом екосистему акција и додатака.
Да, Fastlane користе велике компаније. Све акције и конфигурациони фајлови се верзионишу у репозиторијуму, а match обезбеђује сигурно чување сертификата у репозиторијуму или S3.
Закључци
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође