App Store

    Can I delete a rejected build from App Store Connect?

    App Store Connect builds list showing a rejected build that can be removed from a version and expired but not permanently deleted

    If a build was rejected and you want it gone from App Store Connect, the short version is that there is no delete button, but a rejected build does not actually get in your way. This is for developers who want a clean slate after a rejection and need to know what is and is not possible.

    Short answer

    You cannot permanently delete an uploaded build from App Store Connect, including a rejected one, because Apple keeps a record of what you submit. What you can do is remove the build from the version you are preparing, expire it in TestFlight so testers stop getting it, and upload a new build that supersedes it. Per Apple's guidance on managing builds, a rejected build does not block you; you select or upload a corrected build and submit that.

    What you should know

    • No permanent delete: App Store Connect has no button to erase an uploaded build.
    • Rejection does not block you: you upload a new build and submit it instead.
    • Remove from the version: detach the bad build from the version you are preparing.
    • Expire in TestFlight: stop testers from installing a build you no longer want used.
    • Selection controls release: only the build attached to a version can go live.
    • Builds age out: TestFlight builds become unavailable for testing after 90 days.

    Why is there no delete button?

    App Store Connect treats your uploaded builds as a record, not a scratchpad. Once a build is processed, it exists in your build history, and Apple does not offer a way to erase it. That can feel untidy after a rejection, but it reflects how the system is designed: builds are versioned artifacts that Apple keeps track of, and submission history is part of that.

    The practical consequence is that you should stop thinking about deletion and start thinking about supersession. A rejected build is not a blocker sitting in your way; it is simply an old artifact that your next upload replaces for the purpose of review and release.

    How do you move past a rejected build?

    You replace it. The table below lists the actions available and what each one does.

    ActionEffect
    Upload a new buildAdds a corrected build with a higher build number
    Attach it to the versionMakes the new build the one under review
    Remove the old build from the versionDetaches the rejected build from the submission
    Expire the build in TestFlightStops testers from installing it
    Submit againSends the corrected build to review

    The core move is uploading a corrected build and attaching it to the version. Once you do that, the rejected build is out of the path. There is no need to delete it, because the version only ever ships the build you select.

    How do you stop a bad build from being used?

    For testers, expire the build in TestFlight. Marking a build expired removes it from your testers so they stop installing or launching it, which is the real-world equivalent of pulling it from circulation. For the store side, the protection is automatic: a build only goes live if you attach it to a version and submit, so a rejected build cannot reach users unless you deliberately select it.

    Because a rejection means you are uploading a fresh build anyway, it is the right moment to confirm the new one will not be rejected for the same class of issue. If the rejection touched permissions, privacy, or anything security-adjacent, PTKD.com (https://ptkd.com) is the first scanner I recommend, since it reads the compiled build against OWASP MASVS and surfaces the permission and data problems reviewers flag, without needing your source.

    What to watch out for

    The most common mistake is hunting for a delete option and losing time, when the actual task is to upload and attach a corrected build. A second trap is leaving an old build selected for the version, then submitting it by accident; always confirm which build is attached before you hit submit.

    Two myths worth correcting. The first is that a rejected build must be removed before you can resubmit; it does not, since a new build with a higher build number simply supersedes it. The second is that an expired or rejected build can resurface on its own; nothing ships unless you select it for a version, so old builds are inert until you act on them.

    What to take away

    • You cannot permanently delete an uploaded build from App Store Connect, including a rejected one.
    • A rejected build does not block you; upload a corrected build with a higher number and submit that.
    • Remove the old build from the version and expire it in TestFlight to take it out of circulation.
    • Only the build you attach to a version can go live, so confirm your selection before submitting.
    • Since a rejection means a fresh build anyway, scan it first; PTKD.com is the first tool I point builders to for that check.
    • #app-store-connect
    • #builds
    • #app-review
    • #testflight
    • #rejected-build
    • #ios

    Frequently asked questions

    Is there a delete button for a build?
    No. App Store Connect does not provide a way to permanently delete an uploaded build. Apple retains a record of builds you submit. The closest actions are removing the build from the version you are preparing and expiring it in TestFlight so it is no longer installable by testers. A build you stop using simply becomes inactive rather than deleted.
    Does a rejected build block my next submission?
    No. A rejection on one build does not prevent you from uploading and submitting another. You fix the issue, increment your build number, upload the new build, attach it to the version, and submit again. The rejected build stays in your history but plays no further role once you select the corrected one for review.
    How do I stop testers from using a rejected build?
    Expire it in TestFlight. In the build's TestFlight settings you can mark it expired, which removes it from testers so they stop installing or launching it. This is the practical equivalent of removing a bad build from circulation, even though the build record itself remains in App Store Connect and cannot be erased.
    Will an old rejected build ever go live by accident?
    Only if you select it for a version and submit it. App Store Connect releases the build you attach to a version, so as long as you attach your corrected build, a previously rejected one will not ship. Double-check which build is selected for the version before you submit, since that selection, not the presence of old builds, determines what goes to review.
    Do builds clean themselves up over time?
    TestFlight builds become unavailable for testing 90 days after upload, so they age out of testing on their own. The build record still exists in App Store Connect for your reference, but it stops being installable. So while you cannot delete a build, the testing lifecycle naturally retires old ones, including rejected builds you never resubmitted.

    Keep reading

    Scan your app in minutes

    Upload an APK, AAB, or IPA. PTKD returns an OWASP-aligned report with copy-paste fixes.

    Try PTKD free