Skip to content
Build Station

fastlane

Keep using your existing fastlane setups: fastlane supply for Google Play or your own lane for Android and iOS, with an installation assistant.

The Build Station uploads to the stores without fastlane, directly through the Google Play and App Store Connect APIs. But if you already maintain fastlane in a project, or you need more than “upload a file”, you can use fastlane instead.

Which mode for what

Platform Mode Needs Good for
Android fastlane supply fastlane and a service account JSON as a file existing supply setups without your own Fastfile
Android Eigene fastlane-Lane (custom fastlane lane) fastlane and a Fastfile release notes, staged rollout, your own workflows
iOS Eigene fastlane-Lane fastlane and a Fastfile your own workflows around TestFlight

You choose the mode in the project editor in the Upload section, separately for Android · Play Console and iOS · App Store Connect.

Installing fastlane

The fastlane button in the Upload section of the project editor opens the Upload einrichten (set up upload) assistant. Under Voraussetzungen (requirements) it checks what’s missing and, if you like, installs fastlane itself.

If Homebrew is available, Jetzt installieren (install now) runs

brew install fastlane

in a window with live output and checks again automatically afterwards. This takes a few minutes and doesn’t need admin rights.

Without Homebrew, the Station does not install it itself, and that’s deliberate: the Homebrew installer and sudo gem install ask for the administrator password and need a real terminal. The assistant then shows both commands for copying and opens a terminal with Terminal im Projekt öffnen (open Terminal in project):

# 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

The Station can’t find fastlane even though it’s installed? An app launched from the Finder doesn’t inherit the PATH from ~/.zshrc. That’s why the Station starts processes through a login shell. Einstellungen › Toolchain (Settings › Toolchain) shows what’s found. If needed, add the folder containing fastlane under Zusätzliche PATH-Einträge (additional PATH entries).

supply: service account as a file

fastlane supply signs in with a Google service account.

  1. Open Play Console › Users and permissions › API access.
  2. Link a Google Cloud project, create a service account there and download a JSON key.
  3. Back in the Play Console, give the service account access to the app with the Release management role. Without this step the account exists but isn’t allowed to do anything.
  4. Store the JSON file outside the repository or exclude it via .gitignore. It’s full-fledged access to the Play account.
  5. In the project editor under Android · Play Console, choose the fastlane supply mode, pick the file for Service-Account-JSON with Datei … (file) and set the Track.

With supply, the configuration only contains the path to the file, never its content. So unlike the direct API upload, the file isn’t stored in the keychain.

The track is internal by default. production publishes to all users; the Station points this out.

Nur das Artefakt hochladen (upload artifact only) is on by default. The Station then appends --skip_upload_metadata, --skip_upload_images, --skip_upload_screenshots and --skip_upload_changelogs. Without these flags, supply also uploads store texts, images and changelogs and may overwrite entries you’ve maintained.

Your own lane

With Eigene fastlane-Lane, enter the name under Lane, e.g. android internal or ios beta. The Station then calls:

fastlane android internal aab:/pfad/zum/app-release.aab
fastlane ios beta ipa:/pfad/zur/Runner.ipa

The path to the artifact comes in as an option, so the lane uses exactly the file selected in the history. That’s why the lane should not build by itself. The Station did the building, and a second build would be a different state.

Where the Fastfile may live

The Station looks for the Fastfile per platform in android/fastlane/ or ios/fastlane/ first, then in fastlane/ at the project root. fastlane then runs in the folder that contains the fastlane/ folder it found. If there’s a Gemfile there, the Station calls bundle exec fastlane. A missing Appfile or Gemfile.lock only causes a warning, not a failure.

Creating templates

If the project doesn’t have a Fastfile yet, Fastfile und Appfile anlegen (create Fastfile and Appfile) in the assistant creates minimal templates under android/fastlane/ or ios/fastlane/. The assistant never overwrites existing files.

# 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

What stays in the browser

Under Schritte im Browser (steps in the browser), the assistant lists what no tool can automate: creating keys and granting permissions in App Store Connect or the Play Console, with direct links. fastlane-Doku (fastlane docs) opens the official guide.

Uploading

After that, a finished build shows Jetzt hochladen · fastlane … (upload now), or Jetzt hochladen · Play Console (internal) with supply. The confirmation shows the exact command. The upload runs through the queue and is listed in the history with its log, like any other upload. The Station doesn’t transfer release notes on fastlane routes; those belong in your lane.

Common errors

Message Cause
fastlane: command not found fastlane is missing, or the login shell can’t find it. See above.
The provided entity is not authorized The service account exists, but has no rights for this app in the Play Console (step 3).
Google Api Error: applicationNotFound The package name doesn’t match, or the app was never uploaded by hand. The very first upload has to go through the Play Console.