testflight

Alias for the upload_to_testflight activeness

The best style to manage your TestFlight testers and builds from your terminal

Pilot makes it easier to manage your app on Apple tree'south TestFlight. You tin can:

  • Upload & distribute builds
  • Add & remove testers
  • Retrieve information about testers & devices
  • Import/export all bachelor testers

pilot uses spaceship.airforce to interact with App Store Connect 🚀


Usage • Tips


pilot is office of fastlane: The easiest way to automate beta deployments and releases for your iOS and Android apps.

Usage

For all commands, you can either use an API Key or your Apple tree ID.

App Store Connect API Key

The App Store Connect API Primal is the preferred authentication method (if you are able to use it).

  • Uses official App Shop Connect API
  • No demand for 2FA
  • Meliorate performance over Apple ID

Specify the API key using --api_key_path ./path/to/api_key_info.json or --api_key "{\"key_id\": \"D83848D23\", \"issuer_id\": \"227b0bbf-ada8-458c-9d62-3d8022b7d07f\", \"key_filepath\": \"D83848D23.p8\"}"

Go to Using App Store Connect API for information on obtaining an API key, the fastlane api_key_info.json format, and other API cardinal usage.

Apple ID

Specify the Apple ID to use using -u felix@krausefx.com. If you execute pilot in a project already using fastlane the username and app identifier volition automatically be determined.

Uploading builds

To upload a new build, just run

          fastlane pilot upload                  

This will automatically expect for an ipa in your current directory and tries to fetch the login credentials from your fastlane setup.

You'll exist asked for any missing information. Additionally, yous can pass all kinds of parameters:

          fastlane action pilot                  

You lot can pass a changelog using

          fastlane pilot upload --changelog "Something that is new here"                  

You can also skip the submission of the binary, which means, the ipa file will only be uploaded and non distributed to testers:

          fastlane pilot upload --skip_submission                  

pilot does all kinds of magic for y'all:

  • Automatically detects the bundle identifier from your ipa file
  • Automatically fetch the AppID of your app based on the bundle identifier

pilot uses spaceship to submit the build metadata and the iTunes Transporter to upload the binary. Because iTunes Transporter'due south upload capability is only supported on OS 10, airplane pilot upload does not work on Linux, as described in this consequence

Listing builds

To listing all builds for specific application apply

          fastlane pilot builds                  

The outcome lists all active builds and processing builds:

          +-----------+---------+----------+ |      Great App Builds          | +-----------+---------+----------+ | Version # | Build # | Installs | +-----------+---------+----------+ | 0.ix.13    | 1       | 0        | | 0.9.xiii    | ii       | 0        | | 0.9.20    | 3       | 0        | | 0.ix.twenty    | iv       | iii        | +-----------+---------+----------+                  

Managing beta testers

List of Testers

This control volition list all your testers, both internal and external.

          fastlane pilot list                  

The output will look like this:

          +--------+--------+--------------------------+-----------+ |                    Internal Testers                    | +--------+--------+--------------------------+-----------+ | First  | Concluding   | E-mail                    | # Devices | +--------+--------+--------------------------+-----------+ | Felix  | Krause | felix@krausefx.com       | two         | +--------+--------+--------------------------+-----------+  +-----------+---------+----------------------------+-----------+ |                       External Testers                       | +-----------+---------+----------------------------+-----------+ | Showtime     | Last    | Electronic mail                      | # Devices | +-----------+---------+----------------------------+-----------+ | Max       | Manfred | email@email.com            | 0         | | Detlef    | Müller  | detlef@krausefx.com        | i         | +-----------+---------+----------------------------+-----------+                  

Add a new tester

To add a new tester to your App Store Connect account and to associate information technology to at least i testing group of your app, use the pilot add command. This volition create a new tester (if necessary) or add an existing tester to the app to exam.

          fastlane pilot add email@invite.com -g group-i,group-2                  

Additionally you lot tin specify the app identifier (if necessary):

          fastlane airplane pilot add email@electronic mail.com -a com.krausefx.app -one thousand group-1,group-ii                  

Find a tester

To find a specific tester employ

          fastlane airplane pilot notice felix@krausefx.com                  

The resulting output volition look like this:

          +---------------------+---------------------+ |            felix@krausefx.com             | +---------------------+---------------------+ | First proper name          | Felix               | | Last proper name           | Krause              | | E-mail               | felix@krausefx.com  | | Latest Version      | 0.9.fourteen (23          | | Latest Install Engagement | 03/28/fifteen 19:00      | | 2 Devices           | • iPhone half dozen, iOS 8.3 | |                     | • iPhone 5, iOS 7.0 | +---------------------+---------------------+                  

Remove a tester

This command will remove beta tester from app (from all internal and external groups)

          fastlane pilot remove felix@krausefx.com                  

You tin can also apply groups pick to remove the tester from the groups specified:

          fastlane pilot remove felix@krausefx.com -g group-1,grouping-ii                  

Export testers

To export all external testers to a CSV file. Useful if you need to import tester info to another arrangement or a new account.

          fastlane pilot export                  

Import testers

Add external testers from a CSV file. Create a file (ex: testers.csv) and fill it with the following format:

          John,Appleseed,appleseed_john@mac.com,group-1;grouping-2                  
          fastlane airplane pilot import                  

You tin can as well specify the directory using

          fastlane pilot consign -c ~/Desktop/testers.csv fastlane pilot import -c ~/Desktop/testers.csv                  

Tips

Debug information

If you run into any issues y'all can use the verbose mode to become a more than detailed output:

          fastlane pilot upload --verbose                  

Firewall Problems

pilot uses the iTunes Transporter to upload metadata and binaries. In case y'all are behind a firewall, y'all can specify a different transporter protocol from the control line using

          DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV" airplane pilot ...                  

If you are using pilot via the fastlane action, add the following to your Fastfile

          ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV" pilot...                  

Note, still, that Apple tree recommends you don't specify the -t transport and instead allow Transporter to use automatic transport discovery to determine the all-time transport mode for your packages. For this reason, if the t option is passed, nosotros will raise a warning.

Also notation that -t is not the only additional parameter that can be used. The string specified in the DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS environment variable volition be forwarded to Transporter. For all the bachelor options, cheque Apple tree'south Transporter User Guide.

Credentials Issues

If your countersign contains special characters, pilot may throw a disruptive error saying your "Your Apple ID or password was entered incorrectly". The easiest fashion to fix this fault is to change your password to something that does not contains special characters.

How is my countersign stored?

pilot uses the CredentialsManager from fastlane.

Provider Short Proper name

If you are on multiple App Shop Connect teams, iTunes Transporter may demand a provider short name to know where to upload your binary. pilot volition try to apply the long name of the selected team to observe the provider short name. To override the detected value with an explicit i, use the itc_provider option.

Use an Awarding Specific Password to upload

pilot/upload_to_testflight can utilize an Application Specific Countersign via the FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD surround variable to upload a binary if both the skip_waiting_for_build_processing and apple_id options are set. (If any of those are not set, it will use the normal Apple login procedure that might require 2FA hallmark.)

Role for App Shop Connect User

airplane pilot/upload_to_testflight updates build data and testers after the build has finished processing. App Store Connect requires the "App Managing director" or "Admin" part for your Apple account to update this information. The "Developer" part volition let builds to be uploaded but will non allow updating of build data and testers.


testflight
Supported platforms ios, mac
Author @KrauseFx

7 Examples

          upload_to_testflight                  
          testflight # alias for "upload_to_testflight"                  
          pilot # allonym for "upload_to_testflight"                  
          upload_to_testflight(skip_submission: true) # to only upload the build                  
          upload_to_testflight(   username: "felix@krausefx.com",   app_identifier: "com.krausefx.app",   itc_provider: "abcde12345" # pass a specific value to the iTMSTransporter -itc_provider option )                  
          upload_to_testflight(   beta_app_feedback_email: "email@email.com",   beta_app_description: "This is a description of my app",   demo_account_required: true,   notify_external_testers: false,   changelog: "This is my changelog of things that have changed in a log" )                  
          upload_to_testflight(   beta_app_review_info: {     contact_email: "email@email.com",     contact_first_name: "Connect",     contact_last_name: "API",     contact_phone: "5558675309",     demo_account_name: "demo@email.com",     demo_account_password: "connectapi",     notes: "this is review note for the reviewer <3 cheers for reviewing"   },   localized_app_info: {     "default": {       feedback_email: "default@e-mail.com",       marketing_url: "https://instance.com/marketing-defafult",       privacy_policy_url: "https://example.com/privacy-defafult",       description: "Default description",     },     "en-GB": {       feedback_email: "en-gb@electronic mail.com",       marketing_url: "https://case.com/marketing-en-gb",       privacy_policy_url: "https://example.com/privacy-en-gb",       description: "en-gb description",     }   },   localized_build_info: {     "default": {       whats_new: "Default changelog",     },     "en-GB": {       whats_new: "en-gb changelog",     }   } )                  

Parameters

Central Description Default
api_key_path Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-shop-connect-api/#using-fastlane-api-key-json-file)
api_key Your App Store Connect API Central information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-primal-hash-choice)
username Your Apple ID Username *
app_identifier The bundle identifier of the app to upload or manage testers (optional) *
app_platform The platform to use (optional)
apple_id Apple tree ID property in the App Information section in App Store Connect *
ipa Path to the ipa file to upload *
pkg Path to your pkg file *
demo_account_required Practise you demand a demo account when Apple does review?
beta_app_review_info Beta app review information for contact info and demo account
localized_app_info Localized beta app exam info for description, feedback email, marketing url, and privacy policy
beta_app_description Provide the 'Beta App Description' when uploading a new build
beta_app_feedback_email Provide the beta app electronic mail when uploading a new build
localized_build_info Localized beta app examination info for what's new
changelog Provide the 'What to Examination' text when uploading a new build
skip_submission Skip the distributing action of pilot and only upload the ipa file false
skip_waiting_for_build_processing If ready to truthful, the distribute_external option won't work and no build will be distributed to testers. (You might desire to use this option if you are using this action on CI and have to pay for 'minutes used' on your CI plan). If set to true and a changelog is provided, it will partially expect for the build to announced on AppStore Connect then the changelog can be set, and skip the remaining processing steps false
update_build_info_on_upload DEPRECATED! Update build info immediately later on validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default simulated
distribute_only Distribute a previously uploaded build (equivalent to the fastlane pilot distribute command) faux
uses_non_exempt_encryption Provide the 'Uses Non-Exempt Encryption' for export compliance. This is used if there is 'ITSAppUsesNonExemptEncryption' is not set in the Info.plist faux
distribute_external Should the build be distributed to external testers? If ready to truthful, use of groups option is required faux
notify_external_testers Should notify external testers? (Not setting a value will employ App Shop Connect'south default which is to notify)
app_version The version number of the application build to distribute. If the version number is not specified, then the well-nigh recent build uploaded to TestFlight will be distributed. If specified, the most contempo build for the version number will be distributed
build_number The build number of the awarding build to distribute. If the build number is not specified, the most recent build is distributed
expire_previous_builds Should expire previous builds? false
first_name The tester's first name
last_name The tester's terminal proper noun
electronic mail The tester's email
testers_file_path Path to a CSV file of testers ./testers.csv
groups Associate tester to one grouping or more than by group name / group id. Eastward.one thousand. -m "Team 1","Squad 2" This is required when distribute_external choice is set up to true or when nosotros want to add together a tester to one or more external testing groups
team_id The ID of your App Store Connect team if yous're in multiple teams *
team_name The proper name of your App Shop Connect team if you're in multiple teams *
dev_portal_team_id The short ID of your squad in the developer portal, if you're in multiple teams. Different from your iTC team ID! *
itc_provider The provider brusk proper name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To go provider short name run pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -5 off. The brusk names of providers should be listed in the 2nd cavalcade
wait_processing_interval Interval in seconds to wait for App Shop Connect processing 30
wait_processing_timeout_duration Timeout duration in seconds to wait for App Store Connect processing. If set, after exceeding timeout elapsing, this volition force stop to wait for App Store Connect processing and go out with exception
wait_for_uploaded_build DEPRECATED! No longer needed with the transition over to the App Store Connect API - Utilise version info from uploaded ipa file to determine what build to utilize for distribution. If set to false, latest processing or any latest build volition be used simulated
reject_build_waiting_for_review Elapse previous if it's 'waiting for review' false
submit_beta_review Send the build for a beta review true

* = default value is dependent on the user's system


Documentation

To bear witness the documentation in your terminal, run

          fastlane activity testflight                  

CLI

It is recommended to add together the above action into your Fastfile, however sometimes you lot might want to run 1-offs. To practise and so, yous can run the following control from your terminal

          fastlane run testflight                  

To laissez passer parameters, make utilize of the : symbol, for example

          fastlane run testflight parameter1:"value1" parameter2:"value2"                  

Information technology'due south of import to note that the CLI supports primitive types like integers, floats, booleans, and strings. Arrays tin can exist passed as a comma delimited string (e.k. param:"one,2,3"). Hashes are not currently supported.

It is recommended to add all fastlane deportment you use to your Fastfile.


Source code

This action, simply like the balance of fastlane, is fully open source, view the source code on GitHub


Back to actions