Pilot (Fastlane): Key Concepts, TestFlight, and Build Management for Mobile Projects

Author: IT Sectr Published: 2026-04-14 Reading time: 9 min

Pilot (Fastlane) is a tool for managing iOS app builds in TestFlight: uploading binary files, managing tester groups, and tracking build statuses. Unlike manual upload through App Store Connect, Pilot automates all operations with the TestFlight API. According to the official Fastlane documentation (2026), Pilot allows teams to reduce beta release publication time from 10 minutes to just a few seconds.

Key Takeaways

  • Pilot is a Fastlane utility for automatically uploading iOS builds to TestFlight and managing beta testing.
  • The tool supports uploading binary files, managing tester groups, and tracking build statuses through App Store Connect API.
  • Pilot allows distributing builds by groups: internal testers get builds instantly, external ones — after passing Beta App Review.
  • Pilot configuration is done through Appfile or command-line parameters, including apple_id, app_identifier, and team_id.
  • CI/CD integration allows automatically uploading a new build to TestFlight after successful Gym and test suite completion.

What Is Pilot (Fastlane)?

Pilot (Fastlane) is a component of the Fastlane ecosystem for automating work with TestFlight — Apple’s platform for beta testing mobile applications. Pilot handles all routine operations: uploading builds, adding testers, managing groups, and tracking build status.

Without Pilot, the beta distribution process looks like this: the developer manually opens App Store Connect, selects the app, uploads IPA via Xcode Organizer, configures a tester group, and sends invitations. TestFlight is Apple’s service for distributing beta versions of apps to testers before the official release on the App Store.

According to App Store Connect Help (2025), external testers must go through the Beta App Review process before the first build installation — this takes from 1 to 48 hours. Pilot automatically tracks the review status and notifies the team when the build is ready for distribution to external tester groups.

Use Pilot in any project that requires regular delivery of beta builds to testers — it is a standard tool for iOS CI/CD pipelines, ensuring a predictable delivery process.

Main Functions of Pilot for TestFlight

Pilot’s functionality covers the full lifecycle of beta build management: from uploading a binary file to notifying testers about a new version. Each function is implemented as a separate command with predictable behavior and detailed logging of every step.

Uploading Builds to TestFlight

The fastlane pilot upload command uploads the IPA file to App Store Connect and creates a new build in TestFlight. Pilot automatically checks the binary file validity, version compliance, and app identifier. App Store Connect is Apple’s platform for managing applications, including uploading builds, metadata, analytics, and sales reports.

After upload, Pilot waits for Apple to process the binary file — the process takes from 5 to 30 minutes depending on the build size. While waiting, Pilot displays a progress bar with information about the current processing status: Processing, Validating, or Ready. Upon successful processing, the build becomes available for assignment to tester groups.

Managing Tester Groups

Pilot supports managing both internal and external tester groups. Internal testers are members of your Apple Developer team who get access to builds instantly, without going through Beta App Review. External testers are users invited via email, who require review approval before the first installation.

The fastlane pilot add command adds new testers to a group by email or Apple ID. Pilot automatically sends invitations and checks whether the tester has accepted the invite. For bulk addition, you can pass a list of emails from a file using the --testers_file_path parameter, which is convenient when initially building a tester group of hundreds of participants.

bash
# Uploading a new build to TestFlight
fastlane pilot upload --ipa "build/MyApp.ipa"

# Adding a tester to a group
fastlane pilot add --email "tester@company.com" \
      --groups "QA Team"

Pilot Setup and Configuration

Pilot configuration does not require a separate config file — settings are passed through Appfile (the common Fastlane file) or command-line arguments. The main parameters include the app’s apple_id, app_identifier, team_id, and credentials for accessing the App Store Connect API.

For authentication, Pilot uses the App Store Connect API Key (recommended method) or Apple ID two-factor authentication. App Store Connect API Key is an access key generated in App Store Connect that allows interacting with the API without entering a password and confirmation code interactively.

ruby
# Appfile — Fastlane common configuration
app_identifier("com.company.app")
apple_id("developer@company.com")
team_id("TEAM123456")

# Environment variables for Pilot
# APP_STORE_CONNECT_API_KEY_PATH=/path/to/key.p8

The app_identifier parameter defines the Bundle Identifier of the app, which must match the identifier specified in the Xcode project and App Store Connect. The apple_id parameter is used for authentication in the two-factor scheme, and team_id — for selecting the development team if the account is linked to multiple Apple Developer teams.

For Pilot to work, you need to configure the App Store Connect API Key in the CI/CD environment. The key is generated in App Store Connect → Users and Access → Keys → Generate API Key. Save the .p8 file in CI system secrets and specify the path to it via the APP_STORE_CONNECT_API_KEY_PATH environment variable or the --api_key_path parameter in Pilot commands.

Pilot Commands for Build Management

The set of Pilot commands covers all TestFlight scenarios: uploading builds, managing testers, viewing statuses, and tracking metadata. Each command returns structured JSON output for further processing in CI/CD scripts.

Viewing Build Statuses

The fastlane pilot builds command displays a list of all app builds with version, processing status, and upload date. Build status can be one of: Processing — Apple is processing the binary file, Ready — the build is available for distribution, Rejected — the build was rejected due to validation errors.

bash
# Viewing the list of all builds in TestFlight
fastlane pilot builds

# Assigning a build to a tester group
fastlane pilot distribute --build_number 42 \
      --groups "QA Team" --notify

# Viewing information about a specific build
fastlane pilot build_info --build_number 42

The fastlane pilot distribute command assigns the build to specified tester groups and sends notifications. The --notify parameter enables sending email notifications to testers about a new available build — this is critical for engaging beta testers in the testing process and speeding up feedback.

To manage build metadata, use the --changelog parameter, which sets the description text of changes in the new version. This text is displayed to testers in the testing invitation in the TestFlight app. It is recommended to specify key changes, fixed bugs, and new features in each build.

Pilot CommandPurposeKey Parameters
pilot uploadUpload IPA to TestFlight--ipa, --skip_waiting
pilot distributeAssign build to groups--build_number, --groups
pilot addAdd testers--email, --groups
pilot buildsList all builds--app_identifier
pilot build_infoBuild info--build_number

Integrating Pilot into a CI/CD Pipeline

Pilot in CI/CD is the final stage of the iOS app delivery pipeline. After Gym has built the IPA and tests have passed, Pilot uploads the build to TestFlight and distributes it to tester groups. This allows QA teams to get the new app version within minutes after a commit to the repository.

A typical iOS CI/CD pipeline includes the sequence: Match (certificates), Gym (IPA build), Pilot (upload to TestFlight and distribution). Each stage depends on the previous one, ensuring that only valid and signed builds are delivered to testers.

bash
# Full pipeline in Fastfile
lane :beta do
    match(type: :appstore)
    gym(scheme: "MyApp", export_method: "app-store")
    pilot("build/MyApp.ipa", groups: ["QA", "PM"])
end

The skip_waiting parameter in the upload command allows not waiting for Apple’s binary file processing completion within a CI task — Pilot sends an upload request, receives the build identifier, and completes. This speeds up the pipeline since processing can take up to 30 minutes, which are not spent waiting in the CI runner.

For Pilot to work correctly in CI, you need to configure the App Store Connect API key. Save the .p8 key file in the CI system’s secure storage and pass the path via the APP_STORE_CONNECT_API_KEY_PATH environment variable. Pilot uses this key to authenticate in the API without two-factor authentication, which is critical for automated scenarios.

Common Problems When Working with Pilot

When using Pilot, developers most often encounter authentication errors, incorrect app configuration, and issues with binary file processing on Apple’s side. Pilot problem diagnosis starts with checking the build status in App Store Connect via the pilot builds command.

The error “Your app is not available for testing in TestFlight” occurs when the app is not configured for testing in App Store Connect. Solution: open the TestFlight section in App Store Connect, activate testing for the app, and make sure Export Compliance is filled in correctly for your encryption type.

The error “Missing iOS Distribution signing identity” indicates the absence of a Distribution certificate in Keychain. Solution: run Match to download the correct certificate before calling Pilot. A Distribution certificate differs from Development — it is used to sign builds intended for distribution via TestFlight or the App Store.

With the “Invalid Provisioning Profile” error, the build contains an incorrect profile for the selected export method. Solution: check that Gym uses the correct export_method matching the profile type in Match. If the build was built with a development profile, Pilot will not be able to upload it to TestFlight — an app-store or ad-hoc profile is required.

Frequently Asked Questions

What types of testers does Pilot support?

Pilot supports two types: internal testers (Internal Testers) — members of the Apple Developer team who get access instantly, and external testers (External Testers) — users invited via email who need to go through Beta App Review before installation.

How does Pilot handle builds with the same version number?

TestFlight requires a unique build number for each upload. Pilot automatically checks for duplicates and rejects the upload of a build with a number that already exists in App Store Connect. For a new upload, increase the build number in the Xcode project before building.

Can Pilot be used without Fastlane?

No, Pilot is a component of Fastlane and is not installed separately. However, you can call only Pilot without other Fastlane tools. To do this, install Fastlane via gem install fastlane and use only pilot commands, ignoring match and gym.

How do I cancel build distribution through Pilot?

Use the fastlane pilot reject command with the build number specified. Pilot disables tester access to the specified build but does not delete it from App Store Connect. The rejected build remains in TestFlight history with a Rejected status for release audit.

How do I set up tester notifications for a new build?

Use the --notify parameter in the pilot distribute command. Pilot sends email notifications to all testers in the specified groups with a link to install the new version via TestFlight. Without this flag, testers will see the new build only when opening the TestFlight app.

Summary

  • Pilot is a Fastlane tool for managing iOS builds in TestFlight: uploading binary files, managing tester groups, and tracking statuses.
  • Main commands: upload for uploading IPA, distribute for assigning builds to groups, and builds for viewing the status of all builds.
  • Pilot supports two types of testers: internal (instant access) and external (require Beta App Review before installation).
  • Authentication is done via App Store Connect API Key, configured in CI system secrets for automated operation without interactive input.
  • CI/CD integration allows automatically uploading new builds to TestFlight after Gym build and all tests pass.
  • Common Pilot errors are related to missing Distribution certificate, incorrect profile type, or TestFlight not activated in App Store Connect.

We will develop a mobile application turnkey

IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.

Discuss the project

Read also