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, що описує послідовність дій (lanes). Кожен 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 з actions 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 вбудованих actions. Нижче — найважливіші для мобільної розробки, розділені за категоріями.
| Action | Платформа | Призначення |
|---|---|---|
| match | iOS | Синхронізація сертифікатів і provisioning profiles через 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 profiles між розробниками. Всі секрети зберігаються в зашифрованому 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_name> і повертає код помилки при провалі будь-якого кроку.
Налаштування для 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 }}Воркфлоу запускається при пуші в main. macOS runner виконує bundle exec fastlane beta з Fastfile. MATCH_PASSWORD передається через Secrets GitHub для розшифровки сертифікатів. Після завершення lane Slack action відправляє сповіщення.
RubyGems — менеджер пакетів для Ruby. Fastlane розширюється через плагіни — геми, що додають нові actions. Плагін 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+ integrations | Немає | 20 000+ actions |
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 залишається найгнучкішим інструментом завдяки багатій екосистемі actions і плагінів.
Так, Fastlane використовують великі компанії. Всі action і файли конфігурації версіонуються в репозиторії, а match забезпечує безпечне зберігання сертифікатів в репозиторії або S3.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.