Next build: open its App Store Connect status details before changing invitations. If the status is “Not Available for Testing,” Apple identifies a Provisioning Profile without the app identifier as the cause; create a profile that includes the identifier, rebuild, and upload again.
This applies when your uploaded build has that specific status. If it is still processing, needs export compliance information, or has expired, follow that status’s instructions instead.
For developers whose first TestFlight upload cannot be tested.
For small teams checking which signing profile was used to archive a build.
For release owners who need to verify a replacement build and tester access before announcing a test.
Start with the status, not the tester list
A TestFlight build can be unavailable for different reasons. The label matters. Apple’s App Store Connect build status definitions describe “Not Available for Testing” as a build whose Provisioning Profile does not include the application identifier. Apple’s stated remedy is to upload a new build that includes the identifier in its profile.
That is a specific diagnosis, not a catch-all explanation for every build that testers cannot open. Re-sending an invitation will not add an identifier to a profile. Nor does an upload-success message prove the build is already eligible for testing. Read the status shown for that exact build in App Store Connect, then choose the matching action.
What does “Not Available for Testing” mean in TestFlight? It means Apple has marked that build as unavailable because its Provisioning Profile lacks the application identifier. Check the signing material used for that build, then archive and upload a corrected build; don’t treat this status as proof that a tester’s invitation is broken. See Apple’s build status explanation before changing project settings.
| Status or situation | What it points to | Next action |
|---|---|---|
| Not Available for Testing | The profile does not include the application identifier | Check the identifier and the profile used to sign; rebuild with a suitable profile |
| Processing | The uploaded build is still being processed | Wait for the status to change before diagnosing a signing failure |
| Missing export compliance information | Required export compliance information is outstanding | Provide the information requested for the beta build |
| Expired | The build is no longer available for testing | Upload a current build and check its eligibility |
| Build is testable but absent from a tester’s view | The build may not be assigned to the relevant group, or the tester may lack access | Check the group assignment and tester access |
Apple’s status definitions distinguish build states. Its separate export compliance guide explains the action for builds that need compliance information. Use the status displayed for your build rather than inferring the cause from what a tester reports.
A quick decision path
- If the build says Not Available for Testing, inspect the profile’s application identifier and the identifier used by the app, then create a corrected build.
- If the build says Processing, follow the processing state. Don’t make a profile change based on a status that does not identify a profile problem.
- If App Store Connect asks for export compliance information, complete that request; it is a separate task from correcting a Provisioning Profile.
- If the build is expired, upload a current build and confirm its status before assigning it.
- If the build is testable but a person cannot access it, check the testing group and that person’s access rather than rebuilding immediately.
This branch prevents two common wastes: repeatedly sending invitations while the build itself is ineligible, and changing signing settings when App Store Connect is waiting on a different action.
Check the profile and identifiers before rebuilding
Which Provisioning Profile should you check for an untestable build? Check the profile actually used to sign the archived app that you uploaded, not a profile with a similar name or one selected in a different target. Compare the app’s Bundle Identifier with the application identifier represented in the profile. A matching display name is not evidence that the identifiers match.
Start with the app target that produced the uploaded artifact. In Xcode, inspect its signing settings and the Bundle Identifier configured for the target. Then establish which Provisioning Profile was used for that archive. If the project has extensions or multiple app targets, check each target involved in the build; confirming the main app target alone may not explain a mismatch in another signed product.
Apple’s App Store Provisioning Profile creation instructions require choosing an App ID when creating the profile. That makes the selected App ID a useful point of verification: check that it belongs to the app you intend to distribute, rather than assuming that a profile name or certificate label proves the relationship.
The key settings and artifacts to compare are:
- The app target’s Bundle Identifier in the project.
- The application identifier represented by the profile used for the archive.
- The signing configuration for the target and build configuration you archived.
- The profile associated with the archived app, not merely the profile currently visible in project settings.
The values must describe the same app. If the project’s Bundle Identifier has changed since the profile was created, or if the archive used a different profile from the one you inspected, the settings you see today may not describe the artifact App Store Connect received.
How do you fix a Provisioning Profile that lacks the application identifier? Create or select an App Store profile for the correct App ID, make sure the build uses that profile, and archive and upload a new build. Apple provides instructions for creating a profile and for editing, downloading, or deleting profiles. A profile edit alone does not repair an archive that has already been uploaded.
First step: establish what signed the artifact
A frequent source of confusion is the gap between project configuration and the archive. A project can show one signing choice while an automation job uses another configuration, another target, or another profile. The archive and its build logs are stronger evidence of what was actually produced than a screenshot of settings taken after the build.
For a manual Xcode archive, record the target, configuration, Bundle Identifier, and signing selection used for that archive. Inspect the archive’s signing information and compare it with the project settings. Apple’s Xcode distribution documentation describes the distribution workflow; follow the instructions that apply to the Xcode version and distribution method used by your project.
For an automated build, inspect the job that created the uploaded artifact. Confirm which commit and build configuration ran, what signing settings the job resolved, and which profile was available to the process. Read the relevant build log and compare it with the archive’s signing information. Do not infer the profile from a file that happens to exist on the machine.
A useful evidence chain is simple:
- The project settings identify the intended app and signing choices.
- The build log shows what the build process resolved.
- The archive shows what was actually signed.
- App Store Connect shows the status of the uploaded artifact.
If those records disagree, stop and identify where they diverge before creating another archive. Otherwise, you may upload a second build produced by the same incorrect signing path and see the same result.
Rebuild through the path that produced the upload
A corrected profile only helps if the archive uses it. Keep the repair controlled: change the relevant signing input, produce a new archive, then verify that artifact before you upload. Apple’s build upload guide covers uploading builds to App Store Connect, while its Xcode distribution guide covers preparing an app for distribution.
Use this sequence:
- Save the failing evidence. Record the App Store Connect status and the build identifier. Keep the archive, relevant build log, and project commit or revision associated with that upload.
- Confirm the target and Bundle Identifier. Check the target that generated the uploaded app, including any additional app targets involved in the archive.
- Inspect the profile used by that archive. Verify its selected App ID and compare the profile information with the app identifier. Do not substitute a profile based on a similar name.
- Correct the signing input. Create or select a profile for the intended App ID, then confirm that the manual or automated build path will use it.
- Archive again and inspect the result. Check the new archive’s signing information and compare it with the project settings and build log.
- Upload the new artifact. Follow Apple’s upload guidance, then return to the build record in App Store Connect.
- Wait for and verify the resulting status. Do not tell testers that the build is ready just because the upload step completed.
These checks are more reliable than changing several signing options at once. If you alter the Bundle Identifier, profile, and build path together, a successful outcome may not reveal which change fixed the problem. A controlled rebuild leaves a record your team can repeat.
For an automated archive, keep the same evidence chain in the job output: project revision, target and configuration, resolved signing information, and the resulting build record. If the build runs on a Mac that is shared across projects, verify that the job uses the intended signing assets rather than relying on an assumption about what is installed.
Treat the replacement build as a new decision point
An upload is not the final verification. Return to App Store Connect and inspect the new build’s status. If it is still processing, wait for the displayed state to resolve. If App Store Connect asks for export compliance information, follow the official beta-build compliance instructions. If the build is expired, use a current build instead of trying to solve that state by editing the old profile.
This distinction matters because a corrected signing profile addresses the specific “Not Available for Testing” diagnosis. It does not guarantee that a new build has completed processing, that compliance information is complete, or that a tester can see it. Those are separate checks.
After uploading a replacement TestFlight build, how can you confirm testers can use it? First verify that App Store Connect no longer shows the build as unavailable and that it has reached a state suitable for testing. Then check that the build is assigned to the intended testing group and that the tester has access through that group. Apple’s TestFlight overview and instructions for adding testers to builds describe the testing workflow. A build-level signing problem and an external tester’s review or access requirement are different issues.
Once the build itself is eligible, inspect the group assignment before sending another round of instructions. Confirm that the intended build appears in the right group and that the person testing is included or otherwise has the required access. For an external test, check the status shown for that testing setup; do not treat a testing review requirement as evidence that the Provisioning Profile still lacks an identifier.
Keep the final confirmation tied to what App Store Connect shows, not only to what the upload tool reported. A successful transfer says the artifact was uploaded; the build record and group assignment establish whether you have made it available to the intended testers.
Keep a repair record your team can reproduce
When the replacement build is ready, leave a short record with the project revision, build identifier, build entry point, signing configuration source, and final App Store Connect status. Add the relevant profile and target details, but avoid storing secrets such as private keys or credentials in the record. The purpose is to let another developer verify the path, not to copy sensitive signing material.
A useful release note for the team answers four questions:
- Which project revision produced the replacement artifact?
- Was it archived manually in Xcode or by an automated job?
- Which target and profile were used, and how did you verify them?
- What status did App Store Connect show after processing, and which group received the build?
This record also separates a genuine fix from a lucky retry. If a later build fails, you can compare its signing inputs with the build that worked instead of repeating changes without knowing what changed.
For occasional releases, running the corrected archive on a Mac you already control can be the simplest choice. If your present setup relies on a borrowed machine or an automation host with unclear signing state, you may have to spend time locating profiles, reconciling logs, and confirming which artifact was uploaded. A dedicated Mac avoids some shared-environment ambiguity but ties you to hardware, upkeep, and local disk capacity. Remote Mac access shifts the build environment to a hosted machine, but it does not fix a mismatched Bundle Identifier or an incorrectly selected profile; you still need the same signing checks.
If you need a temporary, verifiable macOS environment for a release repair, compare the trade-offs in Mac rental options and review a remote Mac environment before moving the build. Renting through VpsHold can be a more flexible way to run a short rebuild than buying a Mac solely for a one-off release. If you publish builds continuously, need physical peripherals, or depend on a stable machine for sustained work, keeping a dedicated Mac may be the better fit.
Further reading
Run Your iOS Release Checks on a Dedicated Mac
Use a dedicated physical Mac to review signing settings and prepare replacement builds.
