The honest answer is the one most guides skip: you cannot truly delete a build from TestFlight. App Store Connect has no delete button for builds. What you can do is expire a build, which stops testers from installing it, and every build expires on its own after 90 days anyway. So "delete old builds" really means "expire the ones you do not want tested and let the rest age out." Here is exactly how that works and why the old builds stay listed.
Short answer
You cannot delete a build from TestFlight; App Store Connect does not provide a delete option for builds. Instead you expire a build, which stops internal and external testers from installing it, and builds also expire automatically 90 days after upload. Per Apple's guidance on stopping testing, you expire a build by selecting it in the Builds table and clicking Expire Build. The build record remains visible in App Store Connect marked as expired, since there is no way to remove it entirely. So the practical goal is to expire the builds you do not want available and accept that the history stays.
What you should know
- No true delete: App Store Connect has no button to delete a build.
- Expire is the action: expiring a build stops testers from installing it.
- 90-day auto-expiry: every build becomes unavailable 90 days after upload.
- Records remain: expired builds still show in the list, marked expired.
- New builds get a fresh 90 days: each upload starts its own expiry clock.
Can you actually delete a TestFlight build?
No. There is no function in App Store Connect to permanently delete a build, so the list of builds you have uploaded is effectively a history you cannot prune. Developers regularly ask for this, but the only control Apple exposes is expiration, which changes a build's availability to testers rather than removing it. The build, its number, and its upload date stay in the Builds table even after it expires. So if your goal was a clean, empty build list, that is not achievable today, and the realistic aim is to manage which builds are installable, not to erase the record of past uploads.
Expire vs delete
The two are easy to conflate, so the table draws the line.
| Action | What it does | Available? |
|---|---|---|
| Expire a build | Stops testers installing it; marks it expired | Yes, manually or after 90 days |
| Auto-expiry | Build becomes unavailable 90 days after upload | Yes, automatic |
| Stop testing a group | Removes a build from a specific tester group | Yes |
| Delete a build | Removes the build record entirely | No, not supported |
The takeaway is that expiration is the lever you have, and it controls availability, not existence. An expired build is still there in your history; it simply can no longer be installed.
How to expire a build
Use the Expire Build action in the Builds table. Open your app in App Store Connect, go to the TestFlight tab, and find the build in the Builds table; clicking the build string or icon opens it, where Expire Build immediately stops internal and external testers from installing that build. This is useful when a build has a bug you do not want testers using, or when you want to push everyone onto your latest build. If you would rather just stop a build for one audience, removing it from a specific tester group is the narrower option. Either way, the build remains recorded, now flagged as expired, and any build you do nothing with will expire on its own at the 90-day mark.
What to watch out for
The first trap is expecting a tidy build list; since builds cannot be deleted, expired entries accumulate, and that is normal rather than a problem to solve. The second is confusing expiring a build with removing the app or its data, which it does not do. The third is letting an important test build silently hit its 90-day expiry, which can interrupt testers, so upload a fresh build before the old one ages out if testing must continue. Build housekeeping is unrelated to your app's security, so it sits apart from a pre-submission scan such as PTKD.com (https://ptkd.com), which reads the compiled IPA against OWASP MASVS; what matters there is that the specific build you promote to release was scanned, not how many expired builds linger in the list.
What to take away
- You cannot delete a build from TestFlight; App Store Connect has no delete option, so the build history stays.
- Expiring a build stops testers from installing it, and every build also expires automatically 90 days after upload.
- Expired builds remain listed and marked expired; expiration controls availability, not existence.
- Upload a fresh build before an important one hits its 90-day expiry, and scan the exact build you promote to release with a pre-submission scan such as PTKD.com.




