Ruby — un limbaj dinamic interpretat cu o sintaxă elegantă, cunoscut prin framework-ul Ruby on Rails. În dezvoltarea mobilă, Ruby este folosit în primul rând prin Fastlane — instrumentul standard pentru automatizarea compilărilor, testării și implementării aplicațiilor iOS și Android. Conform documentației oficiale Fastlane, instrumentul este utilizat în peste 100 000 de proiecte din întreaga lume.
Principalele
Ruby — un limbaj dinamic interpretat cu sursă deschisă, creat de Yukihiro Matsumoto în 1995. Principiul de bază al Ruby — «simplitatea optimă» (principle of least surprise). Limbajul este cunoscut pentru blocuri (closures), abordarea pur orientată pe obiecte (totul este un obiect, inclusiv numerele) și un sistem puternic de metaprogramare.
Ruby rulează pe interpretorul YARV (Yet Another Ruby VM) cu compilare JIT începând cu versiunea 3.1. Versiunea curentă Ruby 3.4 (2025) include decoratori, parserul îmbunătățit Prism și suport experimental pentru tipuri prin RBS. RubyGems — managerul de pachete — conține peste 200 000 de gemuri.
Ruby on Rails — cel mai cunoscut framework web în Ruby, dar în dezvoltarea mobilă Ruby este folosit altfel. Nișa principală — Fastlane: ecosistemul de scripturi Ruby și gemuri pentru automatizarea tuturor etapelor ciclului de viață al unei aplicații mobile: de la semnarea certificatelor până la publicarea în magazine.
Pentru a lucra cu Fastlane, este suficientă o înțelegere de bază a Ruby: metode, blocuri do-end, simboluri (:symbol) și sintaxa hashurilor { key: value }. Spre deosebire de Python, Ruby folosește end pentru închiderea blocurilor, nu indentarea. Metodele pot fi apelate fără paranteze — acest lucru este folosit activ în DSL-ul Fastlane.
# Sintaxa de bază Ruby utilizată în 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")În exemplu, metoda download_assets primește un argument version și un parametru numit opțional platform (implicit ios). Interpolarea șirurilor prin #{} inserează valorile direct în șiruri. unless — opusul lui if, execută codul dacă condiția este falsă.
Fastlane — un instrument cu sursă deschisă, scris în Ruby. Instalat prin gem install fastlane, oferă un set de comenzi pentru automatizarea celor mai rutiniere sarcini ale dezvoltatorului mobil: crearea de capturi de ecran, semnarea codului, publicarea în TestFlight și Google Play Console.
Fastlane este format din instrumente (tools): sigh (gestionarea certificatelor), match (sincronizarea certificatelor în echipă), gym (compilare iOS), gradle (compilare Android), deliver (publicare iOS), supply (publicare Android), snapshot (capturi de ecran), scan (testare). Toate instrumentele sunt accesibile dintr-un singur Fastfile.
În proiectele mari, Fastlane gestionează peste 50+ acțiuni într-un singur pipeline: incrementarea versiunii, descărcarea activelor de pe CDN, compilarea, semnarea, încărcarea în App Store Connect, trimiterea unei notificări în Slack. Întregul pipeline este executat printr-o singură comandă: fastlane release.
Fastfile — un fișier într-un DSL asemănător Ruby care descrie o secvență de acțiuni (lane). Fiecare lane este o sarcină separată: beta (compilare pentru testare), release (lansare), screenshots (generare capturi de ecran). Lane-urile pot apela alte lane-uri cu parametri transmiși.
# Fastfile — configurarea pipeline-ului de compilare a aplicației iOS
fastlane_version "2.220.0"
default_platform :ios
platform :ios do
desc "Compilarea și implementarea buildului 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: "Buildul #{options[:build]} a fost încărcat în TestFlight"
)
end
endLane-ul beta execută succesiv: incrementarea numărului de compilare (increment_build_number), sincronizarea certificatelor (match), compilarea arhivei (gym), încărcarea în TestFlight (upload_to_testflight) și trimiterea unei notificări în Slack. Parametrul :build este transmis lane-ului ca argument numit.
Fastlane suportă ambele platforme într-un singur Fastfile. Pentru Android se utilizează un lane în interiorul platform :android cu acțiunile gradle, supply și google_play_track_version_codes.
platform :android do
desc "Compilarea APK și publicarea în 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 include peste 200 de acțiuni încorporate. Mai jos — cele mai importante pentru dezvoltarea mobilă, grupate pe categorii.
| Acțiune | Platformă | Scop |
|---|---|---|
| match | iOS | Sincronizarea certificatelor și profilurilor provisioning prin Git |
| gym | iOS | Compilarea arhivei .app și .ipa |
| scan | iOS | Lansarea testelor UI pe simulator |
| snapshot | iOS | Generarea automată a capturilor de ecran pe diferite dispozitive |
| deliver | iOS | Încărcarea buildului, capturilor de ecran și metadatelor în App Store Connect |
| pilot | iOS | Gestionarea TestFlight: încărcarea buildului, adăugarea testerilor |
| gradle | Android | Lansarea sarcinilor Gradle: assemble, test, bundle |
| supply | Android | Încărcarea APK/AAB și metadatelor în Google Play Console |
| screengrab | Android | Capturi de ecran automate pentru Google Play |
| firebase_app_distribution | Ambele | Încărcarea buildului în Firebase App Distribution |
match — un gem Fastlane pentru sincronizarea certificatelor iOS și profilurilor provisioning între dezvoltatori. Toate secretele sunt stocate într-un depozit Git criptat sau S3. Match generează automat certificatele dacă lipsesc și le reînoiește la expirare.
# Inițializarea match pentru un proiect nou
$ fastlane match init
# Crearea și sincronizarea certificatelor App Store
$ fastlane match appstore
# Crearea certificatelor Development pentru echipă
$ fastlane match development
# Actualizarea tuturor certificatelor la expirare
$ fastlane match --forceMatch stochează cheile private cu o frază de parolă cunoscută doar de dezvoltatori. Fiecare dezvoltator clonează depozitul de certificate și rulează match pentru a instala profilurile curente. Certificatele Apple au o valabilitate de 1 an, match le reînoiește automat.
Fastlane se integrează cu orice platformă CI/CD: GitHub Actions, GitLab CI, CircleCI, Bitrise, Jenkins și Xcode Cloud (prin xcode-build). Fastlane este lansat pe CI prin fastlane <nume_lane> și returnează un cod de eroare la eșecul oricărui pas.
Configurarea pentru GitHub Actions include instalarea Ruby, fastlane și lansarea lane prin bundle exec fastlane. Pentru compilarea iOS este necesar un runner macOS. Pentru Android se poate folosi ubuntu-latest, ceea ce este mai ieftin.
# .github/workflows/deploy.yml — CI/CD cu 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-ul se lansează la push pe main. Runner-ul macOS execută bundle exec fastlane beta din Fastfile. MATCH_PASSWORD este transmis prin GitHub Secrets pentru decriptarea certificatelor. După finalizarea lane-ului, acțiunea Slack trimite o notificare.
RubyGems — managerul de pachete pentru Ruby. Fastlane este extins prin pluginuri — gemuri care adaugă acțiuni noi. Pluginul fastlane-plugin-versioning gestionează versiunile, fastlane-plugin-firebase_app_distribution încarcă buildurile în Firebase. Pe GitHub sunt peste 500 de pluginuri Fastlane.
Gemfile din rădăcina proiectului fixează versiunile tuturor dependențelor pentru reproductibilitatea compilărilor. bundle install instalează gemurile conform Gemfile.lock. Principalele gemuri pentru dezvoltarea mobilă: fastlane, cocoapods (dependențe iOS), xcodeproj (lucrul cu .xcodeproj).
# Gemfile pentru proiectul mobil
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 — nu este singurul instrument de automatizare. Să-l comparăm cu principalele alternative după criterii importante pentru o echipă mobilă.
| Criteriu | Fastlane (Ruby) | Bitrise (web) | Xcode Cloud (Apple) | GitHub Actions (YAML) |
|---|---|---|---|---|
| Flexibilitate | Maximă (cod) | Medie (steps) | Scăzută (limitat) | Ridicată |
| iOS | Suport complet | Complet | Complet (încorporat) | Prin self-hosted macOS |
| Android | Suport complet | Complet | Nu | Complet |
| Certificate (match) | Încorporat | Prin Code Signing | Automat | Prin fastlane |
| Lansare locală | Da | Nu (doar CI) | Nu | Prin act |
| Pluginuri | 500+ | 200+ integrări | Nu | 20 000+ acțiuni |
Fastlane rămâne cel mai flexibil instrument pentru pipeline-uri complexe. Bitrise este convenabil pentru echipele fără un dezvoltator Ruby. Xcode Cloud — pentru proiecte iOS simple. GitHub Actions — dacă echipa folosește deja GitHub.
Întrebări frecvente
Ruby nu este folosit pentru scrierea aplicațiilor mobile, ci pentru automatizarea proceselor de compilare, testare și implementare prin Fastlane. Fastlane este standardul de facto pentru CI/CD în dezvoltarea iOS și Android.
Fastlane funcționează pe macOS, Linux și Windows, dar pentru compilarea iOS este necesar Xcode și macOS. Compilările Android se execută pe orice platformă. Local, dezvoltatorii folosesc macOS, pe CI — macOS pentru iOS și Linux pentru Android.
Înțelegerea de bază a Ruby este suficientă pentru a lucra cu Fastlane. Fastlane folosește un DSL asemănător Ruby în Fastfile. Pentru sarcinile tipice, este suficientă cunoașterea gemurilor, blocurilor do-end și a sintaxei de bază. Cunoștințele profunde de Ruby nu sunt necesare.
Alternative: Gradle pentru Android (încorporat), Xcode Cloud (Apple), Bitrise (interfață web), GitHub Actions (YAML). Fastlane rămâne cel mai flexibil instrument datorită ecosistemului bogat de acțiuni și pluginuri.
Da, Fastlane este folosit de companii mari. Toate acțiunile și fișierele de configurare sunt versionate în depozit, iar match asigură stocarea sigură a certificatelor în depozit sau S3.
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și