Quick path
Build via EAS → eas submit --platform ios → appears in App Store Connect > TestFlight → add internal testers instantly, submit for beta review to unlock external testing → iterate daily on internal, weekly on external.
Internal vs external testing
| Dimension | Internal | External |
|---|---|---|
| Max testers | 100 | 10,000 |
| Beta review required | No | Yes (first build) |
| Build availability | Minutes | 24–48h first time |
| Public link | No | Yes |
| Tester requirements | Apple ID + ASC role | Apple ID only |
| Build expiry | 90 days | 90 days |
| Best for | Team, early testers | Waitlist, community launch |
Setting up from an EAS build
eas build --profile production --platform ios— produce a signed IPA.eas submit --platform ios --latest— uploads to App Store Connect.- Wait 5–15 minutes for processing. You’ll get an email when the build appears in TestFlight.
- App Store Connect → TestFlight → select build → fill in “What to Test” notes.
- For internal: add testers to a group, they get an invite email immediately.
- For external: submit for beta review. First build only needs the approval; subsequent builds go live quickly.
Inviting testers efficiently
- Internal (up to 100): add via App Store Connect > Users and Access with the “Developer” or “Marketer” role. They install via the TestFlight app once the build is live.
- External by email: type or paste up to 200 addresses per group. Testers get an invite email with a code.
- Public link: generate a shareable URL. Anyone with the link installs the build. Best for waitlist email blasts and launch-day traffic.
- Groups: create tester groups (e.g., “power users,” “paying customers”) and release different builds to different groups.
Getting feedback that actually helps
Generic “what do you think?” produces opinions, not insights. Ask for specific behaviors:
- “Complete the onboarding and let me know if anything felt unclear.”
- “Log a habit every day for 3 days. Screenshot anything that confused you.”
- “Try to find the paywall without being told where it is.”
- “Use the app with one hand. Are any buttons hard to reach?”
Use TestFlight’s built-in “Send Beta Feedback” feature — it captures the current screenshot + device info automatically. Much higher signal than asking users to describe bugs in email.
Iteration cadence
- Active bug-fix phase: 1–3 internal builds per day. No external builds until bugs settle.
- Early feedback phase: 2–3 external builds per week to your waitlist group. Each build has clear “What to Test” notes.
- Stabilization phase: 1 build per week, wider distribution.
- Just before launch: freeze external builds 4–7 days before App Store submission. Let testers live on a stable build.
TestFlight review vs App Store review
TestFlight beta review is lighter than App Store review. Apple checks for:
- Basic functionality (app launches, core flow works)
- No crashes on the default flow
- Privacy manifest and usage descriptions present
- No explicit content or fraud
App Store review is stricter — full guidelines compliance, metadata checks, in-app purchases, etc. Passing TestFlight beta review doesn’t guarantee App Store review will pass.
Common pitfalls
- Missing usage description strings (camera, location, notifications). Automated rejection.
- Letting builds expire. 90 days is shorter than you think; ship a new build monthly.
- Ignoring TestFlight feedback. Apple surfaces it in App Store Connect — read it.
- Inviting all 10k testers on day one. Ramp in groups; issues reveal themselves in smaller waves.
- Skipping internal testing and going straight to external. Internal catches most early bugs quickly.