Quick answer: Upload a build to App Store Connect, test it with up to 100 internal testers (members of your team, no review needed), then add up to 10,000 external testers by email or a public link once the build passes Beta App Review. Builds expire after 90 days. Testers can send screenshot and crash feedback through TestFlight, but most will not, so add automatic crash capture and an in-game report button to the beta build.
TestFlight is the standard way to beta test an iOS game, and it is free with your Apple Developer membership. Getting a build to testers is the easy part. Getting useful information back from a few hundred people playing on devices you do not own is where most betas fall short.
Internal and external testers
| Internal testers | External testers | |
|---|---|---|
| Who | Members of your App Store Connect team with an Account Holder, Admin, App Manager, Developer or Marketing role | Anyone with an email invite or your public link |
| Limit | 100 | 10,000 |
| Review | None | Builds go through Beta App Review when added to a group |
| Best for | Your team and close collaborators, every build | Wider playtests and pre-launch betas |
Setting up the beta
- Export and upload. Build the Xcode project from Unity, Unreal or Godot, archive it, and upload from Xcode's Organizer or Apple's Transporter app. Answer the export-compliance question, or set
ITSAppUsesNonExemptEncryptionin your Info.plist so you are not asked every time. - Wait for processing. The build appears under TestFlight in App Store Connect once processed.
- Add internal testers and let them install through the TestFlight app.
- Create an external group, add the build, fill in the “What to Test” notes, and submit it for Beta App Review.
- Invite testers by email or enable a public link. Public links can be limited to a number of testers and to device and OS criteria.
Builds expire 90 days after upload, so long betas need a fresh build at least every three months. If processing stalls, see TestFlight builds stuck in processing and the missing compliance question.
Getting feedback that is actually useful
TestFlight lets testers take a screenshot, mark it up and send it, and after a crash they are offered the chance to share a comment; both appear in the TestFlight section of App Store Connect. In practice only a small share of testers ever do. Plan for the silent majority:
- Capture crashes and errors automatically. An in-game SDK files exceptions and errors without the tester doing anything, with the stack trace, recent log lines, device, OS and build.
- Put a report button in the game. A “Report a bug” option in the pause menu catches bugs that do not crash, with a screenshot and the device attached.
- Make builds distinguishable. TestFlight builds often share a version number and differ only in build number. If your crash reporter groups by version (Unity, for example, reports
Application.version), bump the version for each beta build or put the build number in it, so you can tell which build a crash came from. - Write specific “What to Test” notes. “Play the new tutorial and the first boss” gets more feedback than “test everything”.
- Close the loop. Tell testers what you fixed in the next build's notes; it keeps them testing.
Adding Bugnet to a TestFlight build
Create a free Bugnet project, add the SDK for your engine, and ship it in the beta build. Crashes and errors are filed automatically, testers report everything else from the in-game widget, and repeat reports stack onto one bug, so a hundred testers hitting the same crash shows up as one bug with a count. Run Android testing alongside with a Google Play closed test, and compare beta platforms in the best beta testing platforms for indie games.
Frequently asked questions
How many testers can a TestFlight beta have?
Up to 100 internal testers from your App Store Connect team and up to 10,000 external testers invited by email or a public link.
Do TestFlight builds need review?
Builds for internal testers do not. Builds for external testers go through Beta App Review when you add them to an external group.
How long does a TestFlight build last?
Builds are available for testing for 90 days after upload.
How do I get crash reports from TestFlight testers?
Testers can share crash feedback through TestFlight, but most do not. Add an SDK that captures crashes and errors automatically, and an in-game report button for bugs that do not crash.
Can I use TestFlight for a Unity, Unreal or Godot game?
Yes. Export the Xcode project from the engine, archive it in Xcode and upload it to App Store Connect, then distribute it through TestFlight like any iOS app.
Most testers will never press the feedback button. Capture what happens to them anyway.