tezvyn:

iOS Provisioning Profiles: Your App's Passport

AI-drafted, machine-checkedSource: developer.apple.comadvanced
iOS Provisioning Profiles: Your App's Passport

A provisioning profile is a passport for your iOS app, bundling who can run it (devices), what it can do (entitlements), and who built it (certificate). It's required for running on physical devices and is a common source of build errors.

WHY IT EXISTS Apple needs to ensure that only trusted code from verified developers runs on user devices. Provisioning profiles are the mechanism to enforce this trust, preventing unauthorized apps from running and limiting what any given app is allowed to do on the system.

THE MENTAL MODEL Think of a provisioning profile as a manifest that gets embedded in your app, answering three questions for iOS. First, WHO made this app (your developer certificate)? Second, WHERE can it run (a list of device UDIDs for development, or the App Store for distribution)? Third, WHAT can it do (a list of entitlements like Push Notifications or iCloud access)? If the answers don't match the current context, iOS refuses to install or launch the app.

HOW IT WORKS During a build, Xcode selects a provisioning profile. It then uses your developer certificate's private key to sign the app's binary. The profile itself is copied into the final app bundle. When you try to install the app, an iOS service called installd verifies everything. It checks that the profile is valid and signed by Apple, that the app's code signature matches the certificate in the profile, and that the device's UDID is on the profile's list (for non-App Store builds). A failure at any step stops the process.

WHEN TO USE IT This system is non-negotiable for running code on a physical iOS, iPadOS, or watchOS device. You use a Development profile for debugging on your own devices, an Ad Hoc profile for distributing to a limited set of testers, and an App Store profile to submit to Apple for public release. Xcode's automatic signing manages this, but manual selection is often needed to resolve issues.

WHEN NOT TO USE IT You do not need provisioning profiles to run your app in the iOS Simulator. The Simulator runs on your Mac, which is already a trusted development environment, so it bypasses these on-device security checks for faster iteration.

ONE CANONICAL EXAMPLE The classic error "Failed to install... A valid provisioning profile for this executable was not found" means there's a mismatch. This often happens when trying to run a development build on a new iPhone. The fix is to add the new device's UDID to your developer account, regenerate the provisioning profile to include it, download the new profile to Xcode, and then rebuild the app. This directly demonstrates the link between the profile, the device hardware, and the developer's identity.

Read the original → developer.apple.com

Get five bites like this every day.

Tezvyn delivers a daily feed of 60-second tech bites with quizzes to lock in what you learn.