Fastlane — narzędzie do automatyzacji buildów i publikacji aplikacji mobilnych na iOS i Android. Fastlane zarządza podpisywaniem kodu, budowaniem, uruchamianiem testów, tworzeniem zrzutów ekranu i przesyłaniem do App Store Connect i Google Play Console. Jest standardem de facto dla CI/CD w tworzeniu aplikacji mobilnych.
Główne wnioski
Fastlane — to open-source narzędzie, które automatyzuje rutynowe zadania tworzenia aplikacji mobilnych: budowanie aplikacji, uruchamianie testów, tworzenie zrzutów ekranu, zarządzanie certyfikatami, przesyłanie buildów do TestFlight, App Store i Google Play. Fastlane jest napisany w Ruby i rozpowszechniany przez RubyGems komendą gem install fastlane.
Fastlane pojawił się w 2015 roku jako narzędzie dla iOS, ale szybko rozszerzył się na Androida. Dziś to ekosystem dziesiątek actions — wbudowanych komend, które można łączyć w scenariusze, nazywane lanes. Każdy lane wykonuje konkretne zadanie: na przykład build_release buduje wersję release, a deploy_beta przesyła build do TestFlight.
Fastlane jest używany przez takie firmy jak Uber, Airbnb, Snapchat, Twitter i Shopify. Według ankiety z 2024 roku, ponad 60% programistów iOS używa Fastlane w swoich projektach. Narzędzie wspiera zarówno lokalne uruchamianie, jak i integrację z chmurowymi systemami CI, co czyni go standardem de facto dla mobilnego CI/CD.
# Instalacja Fastlane
sudo gem install fastlane -NV
# Inicjalizacja w projekcie
fastlane init
Po inicjalizacji Fastlane tworzy katalog fastlane/ z trzema plikami: Fastfile (scenariusze), Appfile (ustawienia aplikacji) i Matchfile (ustawienia certyfikatów). Ta struktura pozostaje taka sama dla obu platform — iOS i Android.
Główny plik konfiguracyjny Fastlane — Fastfile. Znajduje się w katalogu fastlane/ w głównym katalogu projektu. Fastfile jest pisany w Ruby: każdy lane to nazwany blok z sekwencją actions. Lane może przyjmować parametry, wywoływać inne lanes i zwracać wartości.
# fastlane/Fastfile — przykład dla iOS
default_platform(:ios)
platform :ios do
desc "Build and upload to TestFlight"
lane :beta do
match(type: "appstore")
gym(scheme: "MyApp", configuration: "Release")
pilot(skip_waiting_for_build: true)
end
desc "Deploy to App Store"
lane :release do
ensure_git_status_clean
match(type: "appstore")
gym(scheme: "MyApp")
deliver(
skip_metadata: true,
skip_screenshots: true
)
push_to_git_remote(tags: true)
end
end
Każdy lane uruchamiany jest komendą fastlane ios beta lub fastlane ios release. Fastfile obsługuje zmienne, warunki, pętle i wywoływanie zewnętrznych skryptów — to pełnoprawny plik Ruby. Programiści mogą ponownie używać kodu poprzez private_lane (lokalne metody) i import z innych Fastfile.
Fastlane udostępnia ponad 200 wbudowanych actions dla większości zadań. Jeśli potrzebnego action nie ma, można napisać własny w Ruby lub wywołać komendę shell przez sh("..."). Actions mogą przyjmować parametry — ustawienia budowania, ścieżki, tokeny dostępu — i zwracać wynik do użycia w kolejnych krokach.
Fastlane dla iOS rozwiązuje trzy kluczowe problemy: zarządzanie certyfikatami i provisioning profiles, budowanie IPA przez Xcode oraz publikację w App Store Connect i TestFlight. Każde z tych zadań jest obsługiwane przez osobny action.
match — action do zarządzania certyfikatami. Przechowuje wszystkie certyfikaty i provisioning profiles w zaszyfrowanym repozytorium Git. Każdy programista i serwer CI używają tego samego zestawu plików, co eliminuje konflikty i problemy z wygasłymi certyfikatami. Match automatycznie aktualizuje profile przy dodawaniu nowych urządzeń.
sigh — tworzy i pobiera provisioning profile przez Apple Developer Portal. Używane, gdy trzeba szybko uzyskać profil dla konkretnego typu: development, ad-hoc lub appstore.
gym — budowanie IPA. Gym opakowuje xcodebuild z optymalnymi parametrami, automatycznie wybiera schemat, konfigurację, export options i tworzy podpisany IPA. Przykład: gym(scheme: "MyApp", export_method: "app-store").
pilot — zarządzanie TestFlight. Przesyła build, dodaje testerów, śledzi status recenzji. deliver — pełna publikacja w App Store, w tym metadane, zrzuty ekranu, cena i wersje.
# Budowa i publikacja aplikacji iOS
lane :deploy_ios do
cocoapods
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(changelog: "Bug fixes and performance improvements")
end
Do pracy z App Store Connect wymagane są tokeny dostępu. Fastlane obsługuje dwa sposoby autoryzacji: App Store Connect API Key (zalecany) i Apple ID z uwierzytelnianiem dwuskładnikowym. Klucze API są wygodniejsze dla CI/CD, ponieważ nie wymagają interaktywnego wprowadzania hasła.
| Action | Przeznaczenie | Ręczny odpowiednik |
|---|---|---|
match | Zarządzanie certyfikatami i profilami | Apple Developer Portal |
sigh | Tworzenie provisioning profile | Xcode + Developer Portal |
gym | Budowanie IPA | xcodebuild + xcrun |
pilot | Przesyłanie do TestFlight | Xcode Organizer |
deliver | Publikacja w App Store | App Store Connect Web |
scan | Uruchamianie testów UI | xcodebuild test |
Na Androidzie Fastlane automatyzuje budowanie przez Gradle, podpisywanie APK i AAB, przesyłanie do Google Play Console i Firebase App Distribution.
gradle — główny action do budowania na Androida. Wywołuje Gradle wrapper z potrzebnymi zadaniami: gradle(task: "assembleRelease") lub gradle(task: "bundleRelease") dla AAB. Można przekazywać flagi, zmienne środowiskowe i ścieżkę do gradle.properties.
supply — przesyłanie APK lub AAB do Google Play Console. Supply zarządza wersjami, ścieżkami (internal, alpha, beta, production), notatkami wydania, ceną i krajami dystrybucji. Przykład: supply(track: "beta", release_status: "completed").
screengrab — tworzenie zrzutów ekranu dla Google Play. Uruchamia testy instrumentation, które robią zrzuty ekranu aplikacji na różnych urządzeniach i językach. Uzyskane zrzuty są przesyłane przez supply.
# Budowa i publikacja aplikacji Android
lane :deploy_android do
gradle(task: "clean bundleRelease")
supply(
track: "beta",
release_status: "completed",
version_code: 42
)
end
| Action | Przeznaczenie | Ręczny odpowiednik |
|---|---|---|
gradle | Budowanie przez Gradle | ./gradlew assembleRelease |
supply | Przesyłanie do Google Play | Google Play Console Web |
screengrab | Tworzenie zrzutów ekranu | Ręczny zrzut + ImageMagick |
firebase_app_distribution | Dystrybucja przez Firebase | Firebase Console Upload |
Fastlane jest zaprojektowany do pracy w pipeline'ach CI/CD. Poprawnie obsługuje tryb non-interactive, zmienne środowiskowe i artefakty budowania. Poniżej — przykłady integracji z popularnymi systemami CI.
W GitHub Actions Fastlane uruchamiany jest jako skrypt Ruby. Typowy workflow: instalacja Ruby i Fastlane, konfiguracja kluczy (certyfikaty, tokeny API przez secrets), uruchomienie lane. Dla iOS wymagany jest runner macOS; Android działa na ubuntu-latest.
W GitLab CI Fastlane używany jest w .gitlab-ci.yml z podobnym schematem: instalacja zależności, uruchomienie fastlane, przekazanie artefaktów. GitLab CI obsługuje runner'y macOS i Linux.
Bitrise — specjalistyczne CI/CD dla aplikacji mobilnych — ma wbudowane wsparcie dla Fastlane. Bitrise Workflow może wywołać Fastlane Step lub uruchamiać dowolne skrypty z fastlane. Bitrise zarządza certyfikatami przez swój Code Signing Manager.
# Fastfile dla CI/CD z warunkowym uruchamianiem testów
lane :ci_test do
scan(scheme: "MyApp", code_coverage: true)
end
lane :ci_beta do
ensure_git_status_clean
version_bump_podspec(path: "MyApp.podspec")
match(type: "appstore", readonly: true)
gym(scheme: "MyApp", export_method: "app-store")
pilot(distribute_external: true)
end
Ważnym aspektem integracji CI/CD jest przechowywanie sekretów. Fastlane używa pliku .env przez dotenv i zmienne środowiskowe. Dla iOS krytyczne zmienne to: MATCH_PASSWORD, FASTLANE_APPLE_API_KEY, FASTLANE_APPLE_API_KEY_ID. Dla Androida: SUPPLY_JSON_KEY_DATA — zawartość konta serwisowego Google Play.
Fastlane zawiera ponad 200 wbudowanych actions. Poniżej — przegląd najpopularniejszych z podaniem platformy i przeznaczenia.
| Action | Platforma | Opis |
|---|---|---|
gym | iOS | Budowanie IPA z zoptymalizowanymi parametrami xcodebuild |
match | iOS | Synchronizacja certyfikatów i provisioning profiles przez Git |
pilot | iOS | Przesyłanie builda do TestFlight i zarządzanie testerami |
deliver | iOS | Publikacja aplikacji w App Store z metadanymi |
scan | iOS | Uruchamianie testów unit i UI z generowaniem raportu |
gradle | Android | Uruchamianie zadań Gradle: assemble, bundle, test |
supply | Android | Przesyłanie APK i AAB do Google Play Console |
screengrab | Android | Automatyczne zrzuty ekranu dla Google Play |
firebase_app_distribution | Android | Dystrybucja buildów przez Firebase |
snapshot | iOS | Automatyczne zrzuty ekranu na symulatorach dla App Store |
increment_build_number | iOS | Autoinkrementacja numeru build w projekcie Xcode |
appcenter_upload | Obie | Przesyłanie builda do App Center |
Do wyszukiwania potrzebnego action używa się komendy fastlane action [nazwa], która wyświetla dokumentację, parametry i przykłady. Pełna lista dostępna lokalnie: fastlane actions.
Fastlane obsługuje również plugins — rozszerzenia społecznościowe, które dodają nowe actions. Wtyczki instalowane są przez fastlane add_plugin [nazwa] i dostępne w rejestrze RubyGems. Przykłady popularnych wtyczek: fastlane-plugin-versioning (zarządzanie wersjami), fastlane-plugin-sentry (przesyłanie debug symbols do Sentry), fastlane-plugin-teams (powiadomienia w Microsoft Teams).
Frequently Asked Questions
Fastlane — to narzędzie do automatyzacji buildów i publikacji aplikacji mobilnych. Służy do zastąpienia ręcznych operacji — budowania, podpisywania, przesyłania do sklepów — jedną komendą. Fastlane skraca czas wydania z godzin do minut i eliminuje błędy ludzkie przy publikacji.
Tak. Fastlane obsługuje obie platformy niezależnie. Dla iOS wymagany jest macOS, dla Android wystarczy Linux. W jednym Fastfile można rozdzielić lanes według platform: platform :ios do ... end i platform :android do ... end.
Przez action match. Przechowuje zaszyfrowane certyfikaty i provisioning profiles w repozytorium Git. Każdy programista klonuje repozytorium, match odszyfrowuje pliki hasłem ze zmiennej MATCH_PASSWORD i instaluje je w pęku kluczy. Rozwiązuje to problem „na mojej maszynie się buduje”.
Tak. Fastlane ma wbudowany action firebase_app_distribution do przesyłania APK i IPA do Firebase App Distribution. Dostępny jest również firebase_app_distribution_add_testers do dodawania testerów. Alternatywą jest action appcenter_upload dla App Center.
Fastlane instaluje się przez RubyGems: gem install fastlane -NV. Dla iOS wymagany jest macOS z Xcode; dla Android — Linux lub macOS z JDK i Android SDK. W GitHub Actions jest gotowy action ruby/setup-ruby do instalacji Ruby i Fastlane. Zmienne środowiskowe przekazywane są przez secrets systemu CI.
Fastlane — to biblioteka i CLI do automatyzacji zadań budowania i publikacji. Bitrise i Jenkins — to platformy CI/CD jako całość. Fastlane działa wewnątrz nich: Jenkins uruchamia Fastlane jako krok pipeline'u, Bitrise wywołuje Fastlane przez specjalny Step. Fastlane nie zastępuje systemu CI, lecz uzupełnia go o specyfikę mobilną.
Summary
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ż