TestFlight Tutorial: iOS Beta Testing

TestFlight Beta Testing is an Apple product that makes it easy to invite users to test your iOS, iPadOS, watchOS, and tvOS apps before you release them to the App Store. By Michael Katz.

Leave a rating/review
Download materials
Save for later
Share
Update note: Michael Katz updated this tutorial for Xcode 11.5 and the corresponding TestFlight version. Dani Arnaout wrote the original post. Tom Elliott and Rony Rozen completed earlier updates.

This tutorial demonstrates how to seamlessly integrate TestFlight into your app release workflow. With TestFlight, you can effortlessly distribute your production-ready app to up to 10,000 testers via link sharing or email invitations, without having to collect device information. Moreover, these testers do not contribute to your development device limit.

In this tutorial, you’ll learn how to:

  • Submit your build to App Store Connect.
  • Add internal and external testers.
  • Start beta testing.
  • Receive feedback and crash reports.

You’ll also see how the process works from the testers’ point of view.

This is one of those rare tutorials where you don’t code. Follow the steps and you’ll be up and running with TestFlight in no time! :]

Getting Started

This tutorial uses an updated version of DropCharge, from 2D Apple Games by Tutorials, as the example. Because you’ll submit test builds to Apple for Beta App Review, follow along with a project of your own.

Note: You can use DropCharge to follow along for most of this tutorial, but you’ll have to change the bundle ID and app name to upload the build for internal testing. The app will not pass app review, so you can’t use it for external testing; you’ll have to use your own app for that.

This tutorial assumes your app is set up for provisioning and has an app ID created in both the Developer Portal and on App Store Connect.

This setup is outside the scope of this tutorial, but you can get all the information you need on submitting an app and getting it published on the App Store in our two-part tutorial How to Submit An App to Apple: From No Account to App Store.

Submitting Your Build to App Store Connect

Once you get the hang of it, the TestFlight process is simple. You need to perform the following steps:

  1. Archive your app.
  2. Upload the archive to the App Store.

You’ll walk through each of these steps next.

Archiving Your App

Open your project in Xcode. In the target editor, under Signing & Capabilities, make sure you have a Bundle Identifier and that your Team and Signing Certificate are set. If you’re not using an app of your own, you will have to change the bundle ID to something unique.

Set the Team and Bundle Identifier to your account.

Now, build and archive the app. This is a way of compiling the app and exporting it in a package that gets uploaded to the App Store.

First, choose Generic iOS Device in the Scheme chooser:

Scheme chooser with 'Generic iOS Device' highlighted

Then, create an archive using the Product ▸ Archive menu:

Product menu with the Archive option selected

If everything is OK with the build, Xcode will open the Organizer with your app in the Archives tab.

The archive entry in the Organizer.

Now, click Distribute App.

The Distribute App button highlighted with a red oval

Next, you’ll choose your distribution method. Select App Store Connect; this is how you distribute your app both when using TestFlight and when publishing on the app store. Click Next.

Distribution method screen with 'App Store Connect' selected

Now, select the destination. Leave Upload selected and click Next. The Export option is for saving the signed archive and uploading it later using a different tool.

Upload to the App Store option highlighted with a red oval

Xcode will prepare to submit your app; this includes checking your App Store credentials. App Store will show a prompt with distribution options; Xcode will select all the checkboxes by default. Leave them like this and click Next.

Default distribution options checked in the App Store distribution prompt

The two options shown above are:

  1. Include bitcode for iOS content: This allows the App Store to recompile and optimize your code for new devices later. It’s rare you’ll need to disable this.
  2. Upload your app’s symbols to receive symbolicated reports from Apple: This uploads debug symbols along with the app so that you get symbolicated crash reports. This is helpful when doing TestFlight testing.

The next screen asks for distribution signing options. You have the option to either use automatic signing or manually choose your distribution certificate and provisioning profile. Letting Xcode manage your signing makes life easier most of the time. But if you’re managing the signing yourself, select the second option along with the relevant certificates. When you’re ready, click Next.

Select the relevant signing option.

Prompt to generate an App Store certificate, if needed.

If prompted, export the signing certificate and store it in a safe place.

Note: You must already have an App Store distribution certificate. Otherwise, this prompts you to create one.

Uploading the Archive to the App Store

Once Xcode finishes doing some of its magic, it presents a summary page for the app you’re about to submit. Click Upload.

App summary page

App Store Connect error

Note: If you get a “[n]o suitable application records were found” error, this means one of two things: Either you didn’t create a new app in App Store Connect first, or the bundle identifiers do not match. Make sure you’ve agreed to all the terms and signed all the contracts within App Store Connect.

Your app will start uploading to App Store Connect. You’ll see various messages from Xcode as it compiles, verifies, and signs your app.

One step of the uploading screen.

When the upload finishes, you’ll see the following message:

Upload complete screen

You can now smile and click Done. :]

That’s all the work required from Xcode. Your beta build is now available on App Store Connect, which is where you’ll do the rest of the work to set up TestFlight.

Types of Testers

Your build is now ready for testing, but who’s going to test it?

Apple defines two types of testers for TestFlight:

  • Internal Tester: This is an App Store Connect user who has an Admin, App Manager, Legal, Developer or Marketer role with access to your app. This is usually a team member or a client for whom you’re developing an app. You can add up to 100 internal testers, and each member can test on up to 30 devices.
  • External Tester: This is any user outside of your team who wants to test your app. External testers have no access to your App Store Connect account, and they can only download and install the app. You can add up to 10,000 external testers.

Before your external testers can test your app, you must submit your app to Apple for review, just like you would with a regular App Store submission. These reviews tend to be quicker than normal app reviews, but there’s no guarantee. Once approved, you can send your app to external testers.

As soon as App Store Connect finishes processing a build, it notifies all internal testers. External testers get a notification after Apple finishes performing a beta app review to make sure the app follows the App Store Review Guidelines. To control who gets specific builds, use different external test groups. You’ll learn more about external testers and how to submit for beta app review later; for now, you’ll focus on internal testers.