Ruby — dynamiczny interpretowany język o eleganckiej składni, znany z frameworka Ruby on Rails. W programowaniu mobilnym Ruby jest używany przede wszystkim przez Fastlane — standardowe narzędzie do automatyzacji kompilacji, testowania i wdrażania aplikacji iOS i Android. Według oficjalnej dokumentacji Fastlane, narzędzie jest używane w ponad 100 000 projektów na całym świecie.
Najważniejsze
Ruby — dynamiczny interpretowany język z otwartym kodem źródłowym, stworzony przez Yukihiro Matsumoto w 1995 roku. Główna zasada Ruby — «optymalna prostota» (principle of least surprise). Język znany jest z bloków (closures), czystego podejścia obiektowego (wszystko jest obiektem, w tym liczby) i potężnego systemu metaprogramowania.
Ruby działa na interpreterze YARV (Yet Another Ruby VM) z kompilacją JIT od wersji 3.1. Aktualna wersja Ruby 3.4 (2025) zawiera dekoratory, ulepszony parser Prism i eksperymentalne wsparcie typów przez RBS. RubyGems — menedżer pakietów — zawiera ponad 200 000 gemów.
Ruby on Rails — najbardziej znany framework webowy w Ruby, ale w programowaniu mobilnym Ruby jest używany inaczej. Główna nisza — Fastlane: ekosystem skryptów Ruby i gemów do automatyzacji wszystkich etapów cyklu życia aplikacji mobilnej: od podpisywania certyfikatów po publikację w sklepach.
Do pracy z Fastlane wystarczy podstawowe zrozumienie Ruby: metody, bloki do-end, symbole (:symbol) i składnia hashów { key: value }. W przeciwieństwie do Pythona, Ruby używa end do zamykania bloków, a nie wcięć. Metody mogą być wywoływane bez nawiasów — jest to aktywnie wykorzystywane w DSL Fastlane.
# Podstawowa składnia Ruby używana w 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")W przykładzie metoda download_assets przyjmuje argument version i opcjonalny parametr nazwany platform (domyślnie «ios»). Interpolacja stringów przez #{} wstawia wartości bezpośrednio do stringów. unless — przeciwieństwo if, wykonuje kod jeśli warunek jest fałszywy.
Fastlane — narzędzie z otwartym kodem źródłowym, napisane w Ruby. Zainstalowane przez gem install fastlane, udostępnia zestaw poleceń do automatyzacji najbardziej rutynowych zadań programisty mobilnego: tworzenie zrzutów ekranu, podpisywanie kodu, publikacja w TestFlight i Google Play Console.
Fastlane składa się z narzędzi (tools): sigh (zarządzanie certyfikatami), match (synchronizacja certyfikatów w zespole), gym (kompilacja iOS), gradle (kompilacja Android), deliver (publikacja iOS), supply (publikacja Android), snapshot (zrzuty ekranu), scan (testowanie). Wszystkie narzędzia są dostępne z jednego Fastfile.
W dużych projektach Fastlane obsługuje do 50+ akcji w jednym pipeline: inkrementacja wersji, pobieranie assetów z CDN, kompilacja, podpisywanie, przesyłanie do App Store Connect, wysyłanie powiadomienia do Slack. Cały pipeline jest wykonywany jednym poleceniem: fastlane release.
Fastfile — plik w DSL podobnym do Ruby, opisujący sekwencję akcji (lane). Każdy lane to osobne zadanie: beta (kompilacja do testowania), release (wydanie), screenshots (generowanie zrzutów ekranu). Lane mogą wywoływać inne lane z przekazywanymi parametrami.
# Fastfile — konfiguracja pipeline’a kompilacji aplikacji iOS
fastlane_version "2.220.0"
default_platform :ios
platform :ios do
desc "Kompilacja i wdrożenie builda 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: "Build #{options[:build]} został przesłany do TestFlight"
)
end
endLane beta wykonuje kolejno: inkrementację numeru kompilacji (increment_build_number), synchronizację certyfikatów (match), kompilację archiwum (gym), przesłanie do TestFlight (upload_to_testflight) i wysłanie powiadomienia do Slack. Parametr :build jest przekazywany do lane jako argument nazwany.
Fastlane obsługuje obie platformy w jednym Fastfile. Dla Android używany jest lane wewnątrz platform :android z akcjami gradle, supply i google_play_track_version_codes.
platform :android do
desc "Kompilacja APK i publikacja w 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 zawiera ponad 200 wbudowanych akcji. Poniżej — najważniejsze dla programowania mobilnego, podzielone według kategorii.
| Akcja | Platforma | Przeznaczenie |
|---|---|---|
| match | iOS | Synchronizacja certyfikatów i profilów provisioning przez Git |
| gym | iOS | Kompilacja archiwum .app i .ipa |
| scan | iOS | Uruchamianie testów UI na symulatorze |
| snapshot | iOS | Automatyczne generowanie zrzutów ekranu na różnych urządzeniach |
| deliver | iOS | Przesyłanie builda, zrzutów ekranu i metadanych do App Store Connect |
| pilot | iOS | Zarządzanie TestFlight: przesyłanie builda, dodawanie testerów |
| gradle | Android | Uruchamianie zadań Gradle: assemble, test, bundle |
| supply | Android | Przesyłanie APK/AAB i metadanych do Google Play Console |
| screengrab | Android | Automatyczne zrzuty ekranu dla Google Play |
| firebase_app_distribution | Obie | Przesyłanie builda do Firebase App Distribution |
match — gem Fastlane do synchronizacji certyfikatów iOS i profilów provisioning między programistami. Wszystkie sekrety są przechowywane w zaszyfrowanym repozytorium Git lub S3. Match automatycznie generuje certyfikaty jeśli ich brakuje i odnawia je po wygaśnięciu.
# Inicjalizacja match dla nowego projektu
$ fastlane match init
# Tworzenie i synchronizacja certyfikatów App Store
$ fastlane match appstore
# Tworzenie certyfikatów Development dla zespołu
$ fastlane match development
# Aktualizacja wszystkich certyfikatów po wygaśnięciu
$ fastlane match --forceMatch przechowuje klucze prywatne z hasłem, które znają tylko programiści. Każdy programista klonuje repozytorium certyfikatów i uruchamia match w celu zainstalowania aktualnych profili. Certyfikaty Apple są ważne 1 rok, match automatycznie je odnawia.
Fastlane integruje się z dowolnymi platformami CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitrise, Jenkins i Xcode Cloud (przez xcode-build). Fastlane jest uruchamiany na CI przez fastlane <nazwa_lane> i zwraca kod błędu w przypadku niepowodzenia dowolnego kroku.
Konfiguracja dla GitHub Actions obejmuje instalację Ruby, fastlane i uruchomienie lane przez bundle exec fastlane. Dla kompilacji iOS wymagany jest runner macOS. Dla Android można użyć ubuntu-latest, co jest tańsze.
# .github/workflows/deploy.yml — CI/CD z 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 uruchamia się przy push do main. Runner macOS wykonuje bundle exec fastlane beta z Fastfile. MATCH_PASSWORD jest przekazywane przez Secrets GitHub do odszyfrowania certyfikatów. Po zakończeniu lane akcja Slack wysyła powiadomienie.
RubyGems — menedżer pakietów dla Ruby. Fastlane jest rozszerzany przez wtyczki — gemy dodające nowe akcje. Wtyczka fastlane-plugin-versioning zarządza wersjami, fastlane-plugin-firebase_app_distribution przesyła buildy do Firebase. Na GitHub jest ponad 500 wtyczek Fastlane.
Gemfile w katalogu głównym projektu ustala wersje wszystkich zależności dla powtarzalności kompilacji. bundle install instaluje gemy według Gemfile.lock. Główne gemy dla programowania mobilnego: fastlane, cocoapods (zależności iOS), xcodeproj (praca z .xcodeproj).
# Gemfile dla projektu mobilnego
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 — nie jedyne narzędzie automatyzacji. Porównajmy je z głównymi alternatywami według kryteriów ważnych dla zespołu mobilnego.
| Kryterium | Fastlane (Ruby) | Bitrise (web) | Xcode Cloud (Apple) | GitHub Actions (YAML) |
|---|---|---|---|---|
| Elastyczność | Maksymalna (kod) | Średnia (steps) | Niska (ograniczony) | Wysoka |
| iOS | Pełne wsparcie | Pełne | Pełne (wbudowane) | Przez self-hosted macOS |
| Android | Pełne wsparcie | Pełne | Brak | Pełne |
| Certyfikaty (match) | Wbudowane | Przez Code Signing | Automatycznie | Przez fastlane |
| Uruchamianie lokalne | Tak | Nie (tylko CI) | Nie | Przez act |
| Wtyczki | 500+ | 200+ integracji | Brak | 20 000+ akcji |
Fastlane pozostaje najbardziej elastycznym narzędziem dla złożonych pipeline’ów. Bitrise jest wygodny dla zespołów bez programisty Ruby. Xcode Cloud — dla prostych projektów iOS. GitHub Actions — jeśli zespół już używa GitHub.
Często zadawane pytania
Ruby nie jest używany do pisania aplikacji mobilnych, ale do automatyzacji procesów kompilacji, testowania i wdrażania przez Fastlane. Fastlane to standard de facto dla CI/CD w programowaniu iOS i Android.
Fastlane działa na macOS, Linux i Windows, ale do kompilacji iOS wymagany jest Xcode i macOS. Kompilacje Android są wykonywane na dowolnej platformie. Lokalnie programiści używają macOS, na CI — macOS dla iOS i Linux dla Android.
Podstawowe zrozumienie Ruby wystarcza do pracy z Fastlane. Fastlane używa DSL podobnego do Ruby w Fastfile. Do typowych zadań wystarcza znajomość gemów, bloków do-end i podstawowej składni. Głęboka znajomość Ruby nie jest wymagana.
Alternatywy: Gradle dla Android (wbudowany), Xcode Cloud (Apple), Bitrise (interfejs webowy), GitHub Actions (YAML). Fastlane pozostaje najbardziej elastycznym narzędziem dzięki bogatej ekosystemowi akcji i wtyczek.
Tak, Fastlane jest używany przez duże firmy. Wszystkie akcje i pliki konfiguracyjne są wersjonowane w repozytorium, a match zapewnia bezpieczne przechowywanie certyfikatów w repozytorium lub S3.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również