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
Настройка для 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 года. Мы проконсультируем вас и предложим наилучшее решение.