fastlane
Bestehende fastlane-Setups weiter nutzen: fastlane supply für Google Play oder eine eigene Lane für Android und iOS, mit Installations-Assistent.
Die Build Station lädt ohne fastlane in die Stores hoch, direkt über die APIs von Google Play und App Store Connect. Pflegst du in einem Projekt aber schon fastlane, oder brauchst du mehr als „Datei hochladen”, kannst du stattdessen fastlane nutzen.
Welcher Modus wofür
| Plattform | Modus | Braucht | Gut für |
|---|---|---|---|
| Android | fastlane supply | fastlane und eine Service-Account-JSON als Datei | bestehende supply-Setups ohne eigene Fastfile |
| Android | Eigene fastlane-Lane | fastlane und eine Fastfile | Release Notes, Staged Rollout, eigene Abläufe |
| iOS | Eigene fastlane-Lane | fastlane und eine Fastfile | eigene Abläufe rund um TestFlight |
Den Modus wählst du im Projekt-Editor im Abschnitt Upload, getrennt für Android · Play Console und iOS · App Store Connect.
fastlane installieren
Der Knopf fastlane im Abschnitt Upload des Projekt-Editors öffnet den Assistenten Upload einrichten. Er prüft unter Voraussetzungen, was fehlt, und installiert fastlane auf Wunsch selbst.
Ist Homebrew vorhanden, führt Jetzt installieren
brew install fastlane
in einem Fenster mit Live-Ausgabe aus und prüft danach automatisch nach. Das dauert ein paar Minuten und braucht keine Administratorrechte.
Ohne Homebrew installiert die Station nicht selbst, und das ist Absicht: Der Homebrew-Installer und sudo gem install fragen nach dem Administrator-Passwort und brauchen ein echtes Terminal. Der Assistent zeigt dann beide Befehle zum Kopieren und öffnet mit Terminal im Projekt öffnen ein Terminal:
# erst Homebrew …
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# … oder ganz ohne Homebrew
sudo gem install fastlane -NV
Findet die Station fastlane nicht, obwohl es installiert ist? Eine aus dem Finder gestartete App erbt den PATH aus
~/.zshrcnicht. Die Station startet Prozesse deshalb über eine Login-Shell. Einstellungen › Toolchain zeigt, was gefunden wird. Notfalls ergänzt du unter Zusätzliche PATH-Einträge den Ordner, in dem fastlane liegt.
supply: Service-Account als Datei
fastlane supply meldet sich mit einem Google-Service-Account an.
- Play Console › Nutzer und Berechtigungen › API-Zugriff öffnen.
- Ein Google-Cloud-Projekt verknüpfen, dort einen Service-Account anlegen und einen JSON-Schlüssel herunterladen.
- Zurück in der Play Console dem Service-Account Zugriff auf die App geben, Rolle Releases verwalten. Ohne diesen Schritt existiert der Account, darf aber nichts.
- Die JSON-Datei außerhalb des Repositorys ablegen oder per
.gitignoreausschließen. Sie ist ein vollwertiger Zugang zum Play-Konto. - Im Projekt-Editor unter Android · Play Console den Modus fastlane supply wählen, bei Service-Account-JSON mit Datei … die Datei wählen und den Track festlegen.
In der Konfiguration steht bei supply nur der Pfad zur Datei, nie ihr Inhalt. Anders als beim direkten API-Upload liegt die Datei also nicht im Schlüsselbund.
Der Track ist standardmäßig internal. production veröffentlicht für alle Nutzer, die Station weist darauf hin.
Nur das Artefakt hochladen ist voreingestellt. Die Station hängt dann --skip_upload_metadata, --skip_upload_images, --skip_upload_screenshots und --skip_upload_changelogs an. Ohne diese Flags lädt supply auch Store-Texte, Bilder und Changelogs hoch und überschreibt womöglich gepflegte Einträge.
Eigene Lane
Mit Eigene fastlane-Lane trägst du unter Lane den Namen ein, z. B. android internal oder ios beta. Die Station ruft dann:
fastlane android internal aab:/pfad/zum/app-release.aab
fastlane ios beta ipa:/pfad/zur/Runner.ipa
Der Pfad zum Artefakt kommt als Option herein, damit die Lane genau die Datei nimmt, die im Verlauf ausgewählt wurde. Die Lane soll deshalb nicht selbst bauen. Gebaut hat die Station, und ein zweiter Build wäre ein anderer Stand.
Wo die Fastfile liegen darf
Die Station sucht die Fastfile zuerst je Plattform in android/fastlane/ bzw. ios/fastlane/, danach in fastlane/ an der Projektwurzel. fastlane läuft dann in dem Ordner, der den gefundenen fastlane/-Ordner enthält. Liegt dort eine Gemfile, ruft die Station bundle exec fastlane auf. Fehlt die Appfile oder das Gemfile.lock, gibt es nur eine Warnung, kein Abbruch.
Vorlagen anlegen
Gibt es im Projekt noch keine Fastfile, legt Fastfile und Appfile anlegen im Assistenten minimale Vorlagen unter android/fastlane/ bzw. ios/fastlane/ an. Bestehende Dateien überschreibt der Assistent nie.
# android/fastlane/Fastfile
default_platform(:android)
platform :android do
desc "Lädt ein fertiges AAB in den internal-Track"
lane :internal do |options|
upload_to_play_store(
track: "internal",
aab: options[:aab],
skip_upload_metadata: true,
skip_upload_images: true,
skip_upload_screenshots: true,
skip_upload_changelogs: true
)
end
end
# ios/fastlane/Fastfile
default_platform(:ios)
platform :ios do
desc "Lädt eine fertige IPA zu TestFlight"
lane :beta do |options|
upload_to_testflight(
ipa: options[:ipa],
skip_waiting_for_build_processing: true
)
end
end
Was im Browser bleibt
Unter Schritte im Browser listet der Assistent, was kein Werkzeug automatisieren kann: Schlüssel in App Store Connect oder der Play Console anlegen und berechtigen, mit direkten Links. fastlane-Doku öffnet die offizielle Anleitung.
Hochladen
Danach steht unter einem fertigen Build Jetzt hochladen · fastlane … bzw. Jetzt hochladen · Play Console (internal) bei supply. Die Rückfrage zeigt den exakten Befehl. Der Upload läuft über die Warteschlange und steht mit Log im Verlauf, wie jeder andere Upload. Release Notes überträgt die Station bei fastlane-Wegen nicht, die gehören dann in deine Lane.
Typische Fehler
| Meldung | Ursache |
|---|---|
fastlane: command not found |
fastlane fehlt, oder die Login-Shell findet es nicht. Siehe oben. |
The provided entity is not authorized |
Der Service-Account existiert, hat aber in der Play Console keine Rechte auf diese App (Schritt 3). |
Google Api Error: applicationNotFound |
Der Paketname passt nicht, oder die App wurde noch nie von Hand hochgeladen. Der allererste Upload muss über die Play Console laufen. |