An ad hoc or development build only installs on the iPhones listed in its provisioning profile. When a tester can't install, the first thing to check is whether their UDID is in that list.
Where the profile is
- On its own, it's a
.mobileprovisionfile you download from the Apple Developer website or that Xcode manages for you. - Inside a build, it's called
embedded.mobileprovision. An .ipa is a zip file, and the profile sits atPayload/YourApp.app/embedded.mobileprovision. - App extensions have their own
embedded.mobileprovisioninside each.appexin thePlugInsfolder.
1. In your browser
Drop a .mobileprovision file on our provisioning profile viewer, or a whole .ipa on the IPA inspector. Both run in your browser and show the devices, expiry date, team and entitlements. Paste a UDID to see if it's included.
2. With Quick Look on a Mac
With Xcode installed, select the .mobileprovision file in Finder and press the Space bar. The preview shows the app ID, expiry date, certificates, devices and entitlements.
3. In Terminal
Decode the profile, then list its devices:
security cms -D -i embedded.mobileprovision -o profile.plist plutil -extract ProvisionedDevices xml1 -o - profile.plist
To check one UDID, search for it:
grep -i 00008110-001A2B3C4D5E6F7A profile.plist
For an .ipa, unzip it first:
unzip -q MyApp.ipa -d MyApp security cms -D -i MyApp/Payload/MyApp.app/embedded.mobileprovision -o profile.plist
Reading the result
| What you see | What it means |
|---|---|
ProvisionedDevices with a list of UDIDs | Development or ad hoc. Only those devices can install it. |
ProvisionsAllDevices | An enterprise (in-house) profile. Any device can install it. |
| Neither | An App Store profile. It can't be installed on test devices at all. |
Also check:
- ExpirationDate. Builds stop installing and opening once the profile expires.
- application-identifier under Entitlements. It must match the app's bundle ID, or end in
*as a wildcard.
If the UDID is missing
Registering the device isn't enough, because a profile only lists the devices it had when it was generated.
- Register the UDID in your Apple Developer account, under Devices.
- Edit the profile and regenerate it, or let Xcode's automatic signing do it.
- Export or re-sign the build with the new profile and send it again.
You can't add a UDID by editing the file. Apple signs every profile, and the iPhone checks that signature.
BuildFerry does those three steps for you. A tester opens your link, you approve their iPhone, and it's registered, added to the profile and the build re-signed in the cloud. Try it free.
Questions
How do I see which devices are in a provisioning profile?
Open it in a provisioning profile viewer, press Space on it in Finder with Xcode installed, or run security cms -D -i on it and read the ProvisionedDevices list.
Does registering a device add it to my existing profiles?
No. Profiles keep the device list they were generated with. Regenerate the profile after registering a device, then export or re-sign the build.
Can I add a UDID to a .mobileprovision file myself?
No. Apple signs each profile and the iPhone checks the signature, so any edit makes it invalid. Add the device in your developer account and regenerate the profile.
How do I check the profile inside an IPA?
Unzip the .ipa and open Payload/YourApp.app/embedded.mobileprovision, or drop the .ipa on an IPA inspector that reads it for you.