How to Upload a Build to Testflight
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
Source: https://docs.fastlane.tools/actions/testflight/
0 Response to "How to Upload a Build to Testflight"
Post a Comment