# TestFlight vs Ad Hoc Distribution: Which Should You Use?

> TestFlight and ad hoc distribution both get beta builds onto iPhones. Here are the differences in review, tester limits, build expiry and setup, and when to use each.

Last updated: 2026-11-05
Canonical: https://buildferry.app/testflight-vs-ad-hoc-distribution

Apple gives you two ways to put a beta build on someone's iPhone: **TestFlight**, run through App Store Connect, and **ad hoc distribution**, where the build is signed for a list of registered devices.

## The differences

| | TestFlight | Ad hoc distribution |
| --- | --- | --- |
| Testers | 100 internal, 10,000 external | 100 devices per product family per membership year |
| App Review | The first build for external testers is reviewed | Never |
| Tester needs | The TestFlight app and an invitation or public link | A registered device and an install link |
| Build lifetime | 90 days | Until the provisioning profile expires, up to a year |
| Device IDs | Not needed | Each device's UDID must be in the profile |
| Upload | Archive uploaded to App Store Connect | Any host that serves the .ipa and manifest |
| Feedback | Screenshots and crash reports built in | Up to you |

## When to use TestFlight

- Public betas or anything with more than about a hundred people.
- Testers who are comfortable installing the TestFlight app.
- When you want crash logs and feedback in App Store Connect.

## When to use ad hoc distribution

- A build you want on a client's or colleague's iPhone today, with no review.
- Builds you can't send to App Review yet, like debug menus or staging servers.
- Testers who shouldn't need an app or invitation, just a link.

The usual pain with ad hoc is device IDs: every new tester means finding their UDID, registering it, regenerating the profile and rebuilding. [BuildFerry](https://buildferry.app/) does those steps for you, so ad hoc feels as simple as a link.

## Using both

Many teams send daily builds to the core team with ad hoc distribution and use TestFlight for the wider beta before release. The same app can use both, since each is just a different signing profile.
