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 за затваряне на блокове, а не отстъпи. Методите могат да се извикват без скоби — това се използва активно в DSL на Fastlane.
# Основен 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също