Gym (Fastlane) to narzędzie do kompilacji i podpisywania aplikacji iOS w formacie IPA za pomocą wiersza poleceń. W przeciwieństwie do Xcode, który wymaga ręcznego wyboru schematu i profilu, Gym automatyzuje cały proces eksportu i pakowania aplikacji. Według oficjalnej dokumentacji Fastlane (2026), Gym skraca czas kompilacji o 30% dzięki optymalizacji parametrów xcodebuild i równoległemu przetwarzaniu zasobów.
Najważniejsze
Gym (Fastlane) to komponent ekosystemu Fastlane, który zapewnia kompilację aplikacji iOS w formacie IPA za pomocą jednego polecenia terminala. Abstrahuje złożony proces wywoływania xcodebuild z dziesiątkami flag i udostępnia programiście prosty interfejs z rozsądnymi wartościami domyślnymi.
W Xcode do kompilacji IPA wymagane jest otwarcie projektu, wybranie schematu, skonfigurowanie Archive i Export, określenie metody dystrybucji i oczekiwanie na zakończenie. Automatyzacja kompilacji za pomocą Gym eliminuje ręczne kroki i gwarantuje, że każda kompilacja jest wykonywana z tymi samymi parametrami — jest to kluczowe dla przewidywalności pipeline’u CI/CD.
Według SwiftLee (2024), zespoły używające Gym do kompilacji spędzają o 40% mniej czasu na konfiguracji procesu wydania w porównaniu do ręcznego eksportu przez Xcode Organizer. Gym generuje również szczegółowe logi kompilacji z każdym krokiem xcodebuild, co ułatwia debugowanie nieudanych buildów i analizę błędów kompilacji.
Używaj Gym w dowolnym projekcie iOS, który wymaga regularnej kompilacji IPA do testowania lub publikacji — to jedyny sposób na zagwarantowanie identycznej konfiguracji kompilacji na wszystkich maszynach w zespole.
Kompilacja IPA przez Gym składa się z trzech kolejnych etapów: archiwizacja projektu przez xcodebuild, eksport archiwum do pakietu binarnego i pakowanie w formacie IPA z podpisem. Gym automatycznie określa typ projektu (single target lub workspace) i wybiera poprawną metodę kompilacji.
Na etapie archiwizacji Gym uruchamia xcodebuild archive z parametrami schematu i konfiguracji określonymi w projekcie. Po pomyślnym utworzeniu archiwum .xcarchive Gym uruchamia xcodebuild -exportArchive z wybraną metodą eksportu. Eksport IPA to proces konwersji archiwum .xcarchive na plik instalacyjny .ipa z uwzględnieniem wszystkich niezbędnych zasobów i podpisów.
Metoda eksportu określa typ Provisioning Profile, który zostanie użyty do podpisania IPA. Gym obsługuje cztery metody: development do debugowania na urządzeniach programistów, app-store do publikacji w App Store, ad-hoc do testów beta na ograniczonej liczbie urządzeń i enterprise do dystrybucji korporacyjnej.
Dodatkowe parametry obejmują określenie export_options_plist do precyzyjnej konfiguracji eksportu, wyłączenie Swift overlay w celu zmniejszenia rozmiaru IPA oraz zarządzanie bitcode. Gym obsługuje również kompilację dla symulatora za pomocą flagi --skip_package_ipa, co jest przydatne do szybkiego sprawdzenia kodu bez pełnego eksportu.
# Podstawowa budowa IPA przez Gym
fastlane gym --workspace "MyApp.xcworkspace" --scheme "MyApp"
# Budowa z określeniem metody eksportu
fastlane gym --export_method app-store
# Budowa tylko archiwum bez eksportu IPA
fastlane gym --skip_package_ipa
Gymfile to plik konfiguracyjny Fastlane, który przechowuje wszystkie parametry kompilacji w ustrukturyzowanym formacie Ruby. W przeciwieństwie do przekazywania flag przez wiersz poleceń, Gymfile pozwala utrwalić konfigurację w repozytorium i zagwarantować, że wszyscy programiści i CI używają identycznych ustawień kompilacji.
# Gymfile — konfiguracja budowy
workspace("MyApp.xcworkspace")
scheme("MyApp")
export_method(:app-store)
configuration("Release")
output_directory("./build")
output_name("MyApp.ipa")
include_symbols(true)
include_bitcode(false)
Parametr export_method w Gymfile odpowiada typom profili z Apple Developer Portal. Dla wydań App Store używany jest :app-store, do testowania — :development lub :ad-hoc. Parametr configuration określa konfigurację kompilacji: Release dla wydań lub Debug dla wersji debugowych.
Parametr include_bitcode steruje włączaniem bitcode do IPA. Apple wymagało bitcode dla aplikacji watchOS i tvOS, ale dla iOS ten parametr można wyłączyć w celu zmniejszenia rozmiaru pliku binarnego. include_symbols dołącza pliki symbolicznego debugowania .dSYM, które są niezbędne do symbolizacji logów crash z App Store Connect lub zewnętrznych usług monitorowania.
Dodatkowe parametry Gymfile obejmują export_options_plist dla niestandardowego pliku plist eksportu, silent do wyciszenia nadmiarowych danych w logach oraz build_path do określenia tymczasowego katalogu kompilacji. Te parametry są przydatne przy integracji Gym ze złożonymi pipeline’ami CI/CD ze specjalnymi wymaganiami dotyczącymi artefaktów.
Interfejs poleceń Gym zawiera podstawowe parametry dla typowych scenariuszy kompilacji oraz rozszerzone flagi do precyzyjnego dostrajania zachowania. Większość parametrów można przekazać zarówno przez wiersz poleceń, jak i przez Gymfile, przy czym argumenty wiersza poleceń mają priorytet nad plikiem konfiguracyjnym.
Polecenie fastlane gym bez parametrów używa ustawień z Gymfile lub automatycznie wykrywa projekt w bieżącym katalogu. Dla projektów z wieloma targetami należy określić --scheme i --workspace w celu prawidłowego wyboru docelowej konfiguracji kompilacji.
Do szybkiej kompilacji debugowej używane jest fastlane gym --export_method development — kompiluje IPA z profilem Development do instalacji na urządzeniach programistów. Kompilacja IPA dla App Store wymaga flagi --export_method app-store i użycia certyfikatu Distribution, który musi być wcześniej skonfigurowany w Match lub Keychain.
# Budowa dla App Store z niestandardową nazwą
fastlane gym --export_method app-store --output_name "Release_1.0.ipa"
# Budowa z czyszczeniem przed archiwizacją
fastlane gym --clean --configuration Debug
# Budowa dla symulatora bez IPA
fastlane gym --skip_package_ipa --destination "generic/platform=iOS Simulator"
Flaga --clean usuwa pliki tymczasowe poprzedniej kompilacji przed uruchomieniem, co zapobiega używaniu nieaktualnego cache i gwarantuje czysty build. Flaga --destination umożliwia określenie docelowej platformy kompilacji: iOS Simulator, iOS Device lub macOS Catalyst.
| Parametr Gym | Przeznaczenie | Przykładowa wartość |
|---|---|---|
| --scheme | Wybór schematu Xcode do kompilacji | MyApp |
| --export_method | Metoda eksportu profilu | app-store, ad-hoc |
| --configuration | Konfiguracja kompilacji | Release, Debug |
| --clean | Czyszczenie przed kompilacją | flaga |
| --output_name | Nazwa wyjściowego pliku IPA | App_1.0.ipa |
Integracja Gym z CI/CD to standardowa praktyka dla zespołów programistów iOS dążących do ciągłego dostarczania. Gym jest uruchamiany w pipeline’ach GitHub Actions, GitLab CI, Bitrise lub Jenkins po etapie testowania i przed wysłaniem do TestFlight lub App Store.
Typowy pipeline iOS CI/CD obejmuje: klonowanie repozytorium, instalację zależności przez CocoaPods lub SPM, konfigurację certyfikatów przez Match, kompilację IPA przez Gym i przesyłanie przez Pilot lub Deliver. GitLab CI to system ciągłej integracji od GitLab, który umożliwia uruchamianie kompilacji przy każdym pushu do repozytorium.
# Przykład kroku budowy w GitLab CI
fastlane gym --scheme "MyApp" \
--export_method app-store \
--output_directory "$CI_PROJECT_DIR/build"
# Zapisywanie IPA jako artefaktu budowy
cp "build/MyApp.ipa" "$CI_PROJECT_DIR/artifacts/"
Do poprawnego działania Gym w CI należy skonfigurować xcodebuild dostęp do Keychain z certyfikatami. Odbywa się to za pomocą polecenia security unlock-keychain przed uruchomieniem Gym. Jeśli używany jest Match, certyfikaty są instalowane automatycznie i oddzielna konfiguracja Keychain nie jest wymagana — Match sam tworzy tymczasowy pęk kluczy do kompilacji.
Po pomyślnej kompilacji IPA może zostać przekazany do kolejnych kroków pipeline’u: przesłanie do TestFlight przez Pilot lub wysłanie do App Store Connect przez Deliver. Skonfiguruj zmienne środowiskowe systemu CI do przechowywania danych uwierzytelniających Apple Developer, w tym FASTLANE_APPLE_API_KEY i MATCH_PASSWORD, aby wszystkie etapy pipeline’u działały bez interaktywnego wprowadzania danych.
Podczas używania Gym programiści często napotykają błędy związane z nieprawidłową konfiguracją xcodebuild, brakiem certyfikatów lub niezgodnością wersji Xcode. Diagnostyka błędów Gym rozpoczyna się od analizy pełnego logu kompilacji, który jest wyświetlany w konsoli po zakończeniu każdego polecenia.
Błąd „error: No matching provisioning profiles found” wskazuje na brak odpowiedniego Provisioning Profile dla wybranej metody eksportu. Rozwiązanie: upewnij się, że Match lub Keychain zawiera poprawny profil dla określonego export_method. Provisioning Profile musi odpowiadać identyfikatorowi aplikacji i typowi certyfikatu (Development lub Distribution) do pomyślnego podpisania IPA.
Błąd „error: Signing for requires a development team” występuje, gdy w projekcie nie określono zespołu programistycznego. Rozwiązanie: dodaj DEVELOPMENT_TEAM do konfiguracji kompilacji projektu lub określ team_id w Gymfile za pomocą parametru export_team_id. Jest to szczególnie istotne w przypadku projektów pracujących z wieloma kontami Apple Developer.
Przy błędzie „error: Multiple commands produce...” dochodzi do konfliktu plików wyjściowych między różnymi targetami w workspace. Rozwiązanie: skonfiguruj unikalne ścieżki wyjścia dla każdego targetu w Build Settings projektu Xcode lub użyj nowego systemu kompilacji, który jest domyślnie włączony w Xcode 14 i nowszych. Gym obsługuje oba warianty przez flagę --use_legacy_build_system.
Często zadawane pytania
Gym automatyzuje proces xcodebuild i eliminuje ręczne kroki Archive i Export. W przeciwieństwie do Xcode, Gym gwarantuje identyczne parametry kompilacji na wszystkich maszynach, generuje szczegółowe logi i integruje się z pipeline’ami CI/CD bez konieczności otwierania interfejsu graficznego.
Gym obsługuje cztery metody: development do debugowania, app-store do publikacji, ad-hoc do testów beta na ograniczonej liczbie urządzeń i enterprise do korporacyjnej dystrybucji In-House. Metodę określa się za pomocą parametru --export_method lub export_method w Gymfile.
Aby zmniejszyć rozmiar IPA, użyj --export_options_plist z parametrem thinning do generowania uniwersalnego pliku binarnego, wyłącz bitcode przez include_bitcode(false) i skonfiguruj stripping symboli przez parametr --include_symbols false, jeśli logi crash nie są potrzebne.
Błąd Code Signing w CI jest zwykle spowodowany brakiem certyfikatów w Keychain. Rozwiązanie: skonfiguruj Match do automatycznej instalacji certyfikatów lub dodaj polecenie security unlock-keychain przed uruchomieniem Gym. Upewnij się, że zmienna MATCH_PASSWORD jest przekazana do środowiska CI.
Tak, Gym obsługuje kompilację aplikacji macOS, tvOS i watchOS, nie tylko iOS. Dla macOS określ platformę za pomocą parametru --platform macos lub skonfiguruj odpowiedni schemat w Xcode. Gym automatycznie wybierze odpowiedni format archiwum dla docelowej platformy.
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ż