development
Provisioning Profile
A configuration file that links a signing certificate, an App ID, and (optionally) device UDIDs to authorize an app to run on specific devices or be distributed through specific channels.
A provisioning profile is the bridge between your signing certificate and your app. It tells iOS which apps are allowed to run, on which devices, signed by which developer. Without a valid provisioning profile, code signing fails and your app cannot be installed.
Types of Provisioning Profiles
Development profile - allows your app to run on registered test devices. Linked to an Apple Development certificate and up to 100 device UDIDs.
App Store distribution profile - authorizes your app for submission to App Store Connect and distribution through the App Store and TestFlight. Linked to an Apple Distribution certificate. No device restrictions.
Ad Hoc profile - allows distribution to up to 100 specific registered devices without going through the App Store. Used for beta testing outside TestFlight.
Enterprise (In-House) profile - allows distribution to any device within an organization. Only available to Apple Developer Enterprise Program members.
Profile Contents
A provisioning profile contains:
- Your signing certificate’s public key
- Your App ID (bundle identifier)
- A list of enabled entitlements (capabilities)
- A list of authorized device UDIDs (development and Ad Hoc only)
- An expiration date (profiles expire after 1 year)
Common Issues
The most frequent provisioning profile problems:
- Expired profile - profiles must be regenerated annually
- Missing entitlement - adding a new capability (push notifications, iCloud) requires regenerating the profile
- Device not included - development and Ad Hoc profiles must list every test device’s UDID
- Wrong profile type - using a development profile for App Store submission or vice versa
Managing Profiles at Scale
For teams and CI/CD pipelines, tools like Fastlane Match store profiles in an encrypted Git repository so every team member and build machine uses the same profiles. This prevents the “works on my machine” problem that commonly occurs with manual profile management.