What is a provisioning profile?
A provisioning profile is a signed property list (plist) file that contains:- Certificate references - Which certificates can sign this app
- Device UDIDs - Which devices can run this app
- App identifier - Which app this profile is for
- Entitlements - What permissions the app has
- Expiration date - When the profile becomes invalid
- Team identifier - Your Apple Developer team ID
Think of a provisioning profile as a “permission slip” from Apple. It tells your iOS device: “This specific app, signed by this specific certificate, is allowed to run on this specific device with these specific permissions.”
Profile structure
Provisioning profiles use a special format:Profile types
Development Profile
- Created by Impactor
- Limited to registered devices
- 7 days (free) or 1 year (paid)
- Can use development certificates
Distribution Profile
- For App Store submissions
- Not used by Impactor
- Works on any device
- Requires paid developer account
Ad Hoc Profile
- For beta testing
- Limited device list
- Not typically used for sideloading
Enterprise Profile
- For organization distribution
- Not used by Impactor
- Requires enterprise account ($299/year)
How Impactor uses provisioning profiles
Request profile from Apple
After registering your app and device, Impactor requests a provisioning profile:
Merge with app entitlements
The profile’s entitlements are merged with those requested by the app:This ensures the app only gets entitlements it requests AND that are authorized by Apple.
Entitlements
Entitlements are special permissions that apps can request:Common entitlements
Common entitlements
Advanced entitlements
Advanced entitlements
Some apps request special capabilities:
- Push Notifications:
aps-environment - iCloud:
com.apple.developer.icloud-services - App Groups:
com.apple.security.application-groups - Associated Domains:
com.apple.developer.associated-domains - Increased Memory:
com.apple.developer.kernel.increased-memory-limit - HealthKit:
com.apple.developer.healthkit - HomeKit:
com.apple.developer.homekit
Entitlement extraction from apps
Entitlement extraction from apps
Impactor reads entitlements directly from the app’s main executable:This ensures the app gets exactly the permissions it was compiled with.
Profile expiration
Provisioning profiles have expiration dates:- Free Account
- Paid Account
- Profiles expire after 7 days
- Apps stop working after expiration
- Must re-sign and reinstall apps weekly
- Certificates last 365 days, but profiles don’t
The 7-day limit on free accounts is Apple’s way of discouraging sideloading and encouraging App Store distribution or paid developer memberships.
Bundle identifier matching
Provisioning profiles are specific to app bundle identifiers:- Impactor registers the app’s bundle ID (e.g.,
com.example.app) - Apple creates a profile for
TEAM_ID.com.example.app - The profile authorizes only that specific app
If you change an app’s bundle identifier, you need a new provisioning profile. Impactor handles this automatically by registering a new App ID.
Troubleshooting profiles
Profile not valid for device
Profile not valid for device
This means your device UDID isn’t included in the profile’s authorized device list.Solution: Ensure your device is registered with Impactor. It should automatically register devices, but you can verify in Apple’s developer portal.
Profile expired
Profile expired
Free accounts have 7-day profiles that expire quickly.Solution: Re-sign and reinstall the app. Consider using auto-refresh features if available.
Entitlements not permitted
Entitlements not permitted
The app requests entitlements your account type doesn’t support.Solution: Use a paid developer account, or modify the app to remove restricted entitlements.
Profile/certificate mismatch
Profile/certificate mismatch
The profile references a certificate you don’t have the private key for.Solution: Delete the profile and let Impactor create a new one, or ensure you’ve copied the correct
key.pem file.Profile in app signing
When Impactor signs your app, the provisioning profile is used to:- Determine entitlements - What permissions to embed in the code signature
- Verify authorization - Confirm your certificate can sign this app
- Embed in the app - Include the profile as
embedded.mobileprovision - Enable installation - Tell iOS this device is authorized