Installation errors
Fix a Bundle ID and Provisioning Profile Mismatch
Compare an IPA's bundle identifier, signed application identifier, App ID, entitlements, and embedded profile to find the first identity mismatch.
A bundle-ID/profile mismatch means the signed app identity falls outside the identity or entitlement authorization carried by the provisioning profile. A familiar profile name is not evidence that the profile belongs to this app.
Keep these identifiers separate:
CFBundleIdentifierin the app bundle;- the signed
application-identifierentitlement; - the Apple App ID registered to the team;
- the App ID prefix / team context;
- the profile’s
Entitlements.application-identifier; - the profile’s entitlement allowlist; and
- the bundle identifiers of extensions, widgets, App Clips, or nested apps.
profile name
!= App ID
main bundle ID matches
!= every signed entitlement is authorized
main app matches
!= every nested target matches
Preserve the exact IPA before changing anything
shasum -a 256 ClientBuild.ipa
mkdir ClientBuild-unpacked
unzip -q ClientBuild.ipa -d ClientBuild-unpacked
APP_PATH=$(find ClientBuild-unpacked/Payload -maxdepth 1 -name '*.app' -print -quit)
Record the checksum, version/build, intended Apple Developer team, and distribution method. Do not edit Info.plist inside the extracted app and re-zip it; changing signed content invalidates the existing signature.
Step 1: read the app’s bundle identifier
plutil -extract CFBundleIdentifier raw -o - "$APP_PATH/Info.plist"
This tells you the bundle identifier packaged in the app. It does not tell you whether the signed entitlements or provisioning profile authorize it.
Step 2: read the signed application identity and entitlements
codesign --display --entitlements :- "$APP_PATH" \
> /tmp/app-entitlements.plist 2>/dev/null
plutil -extract application-identifier raw \
-o - /tmp/app-entitlements.plist
plutil -p /tmp/app-entitlements.plist
The signed entitlements are what this artifact actually claims. Treat them as evidence from the final artifact, not as a copy of what the Xcode project intended to claim.
Step 3: decode the profile authorization
security cms -D \
-i "$APP_PATH/embedded.mobileprovision" \
-o /tmp/profile.plist
plutil -extract Entitlements.application-identifier raw \
-o - /tmp/profile.plist
plutil -extract Entitlements xml1 \
-o /tmp/profile-entitlements.plist \
/tmp/profile.plist
plutil -extract TeamIdentifier xml1 -o - /tmp/profile.plist
Apple describes a provisioning profile as an authorization that answers who may sign, what may be signed, where it may run, when it may run, and which entitlements it may claim. The profile plist is useful for diagnosis, but Apple explicitly warns that its internal format is not a stable product API.
Step 4: compare the identity layers
For an explicit App ID, the profile should represent the intended team/App ID context and match the app target’s bundle identifier. Apple’s current App ID documentation distinguishes explicit App IDs, which identify one app, from wildcard App IDs, which can identify a set of apps.
Do not reduce the comparison to a string suffix alone. Check:
CFBundleIdentifier;- signed
application-identifier; - profile
application-identifier; - team/App ID prefix context; and
- entitlement compatibility.
Apple’s current account help says the capabilities enabled for an App ID form an allowlist. If you modify an App ID’s enabled capabilities, provisioning profiles that contain that App ID become invalid and must be regenerated.
Wildcard profiles are not universal authorization
A wildcard App ID can represent a set of bundle identifiers, but that does not mean it authorizes every capability or every target. Apple’s current App Store Connect provisioning flow requires an explicit App ID, and capabilities can impose additional App ID requirements.
Do not “fix” a mismatch by selecting a broader wildcard solely because the bundle string appears to fit. Verify the capabilities the target actually claims and use the App ID model required by the current Apple workflow.
Compare entitlements, not just bundle IDs
A visible bundle identifier can match while the app still claims an entitlement that the profile does not authorize.
Compare the signed app entitlements with the profile’s entitlement allowlist. Focus on the exact capabilities present in the artifact rather than adding every possible Apple capability to the diagnosis.
If a capability was recently enabled or changed for the App ID, regenerate the affected profiles before rebuilding. A stale profile can preserve an older authorization set even though the bundle identifier itself never changed.
Common places the mismatch enters the workflow
- Staging vs production: the archive contains
com.example.app.stagingwhile export selects a production profile. - White-label targets: a reusable codebase archives one client’s bundle ID but the signing map points to another client’s App ID.
- Wrong Apple Developer team: the bundle string looks right but the App ID prefix/team context belongs to another organization.
- Capability change: the App ID was updated but the build used a stale profile.
- Manual export mapping: the export configuration selects a similarly named but incompatible profile.
- Post-archive mutation: someone changes
Info.plistor another signed file after signing. - Unauthorized re-sign: the replacement profile cannot authorize the original app’s identifiers or entitlements.
- Nested target mismatch: the main app matches while a widget, extension, App Clip, or nested app does not.
Inspect nested targets explicitly
find "$APP_PATH" -type d \
\( -name '*.appex' -o -name '*.app' \) -print
For every signed nested target, repeat the relevant checks:
CFBundleIdentifier;- signed
application-identifier; - signed entitlements;
- embedded provisioning profile where applicable;
- team/App ID context; and
- code-signature verification.
The main app matching its profile does not prove the whole IPA is internally consistent.
Decide between rebuild and authorized re-sign
Source available
Correct the Xcode target’s bundle identifier, team, capabilities, and signing configuration, then archive/export again. This is usually the safest option when multiple targets or capabilities are involved.
Source unavailable
Only consider an authorized re-sign when the app owner controls compatible signing assets and the new App ID/profile can technically and legitimately authorize every required identifier and entitlement. If the new team/App ID cannot represent the app’s signed capabilities, stop and obtain a correct build from the owner.
How to Re-sign an IPA Safely owns the re-sign boundary.
Distinguish this from certificate mismatch
If the bundle/App ID/entitlements align but the certificate that signed the app is not authorized by DeveloperCertificates, the problem is Profile and Signing Certificate Mismatch, not bundle identity.
If identity and certificate authorization both look correct but installation still fails, continue with App Integrity Could Not Be Verified or Unable to Install App using the exact device error.
Verify the replacement
After repair:
- checksum the replacement IPA;
- confirm
CFBundleIdentifier; - inspect signed entitlements;
- decode the embedded profile;
- compare application identifiers and team context;
- verify nested targets;
- verify code signatures; and
- acceptance-test the exact delivered checksum.
Run the iOS Distribution Checklist before client handoff. The objective is one artifact whose app identity, entitlement claims, profile authorization, signing identity, and distribution method all describe the same release.
Related next steps
- How to Re-sign an IPA Safely →
- Check an IPA’s Code Signature and Signing Certificate →
- Inspect a Provisioning Profile Inside an IPA →
- Fix a Provisioning Profile and Signing Certificate Mismatch →
- Fix “Integrity Could Not Be Verified” on iPhone →
- Unable to Install App on iPhone →
- tools ios distribution checklist →
Sources
- Apple Developer — Tn3125 Inside Code Signing Provisioning Profiles
- Apple Developer — Register An App Id
- Apple Developer — Enable App Capabilities
- Apple Developer — Provisioning Profile Updates
- Apple Developer — Create An Ad Hoc Provisioning Profile
- Apple Developer — Create An App Store Provisioning Profile