16
votes

Anyway to match the provisioning profile in Xcode's organizer or online developer site with the crazy serial/id number given under Xcode's code signing preferences?

enter image description here

I want to make double sure I am building my app with the correct (Ad Hoc) provisioning profile -- Xcode gives me a long ID (as seen above), but the online developer site and the Xcode preferences that list my provisioning profiles don't list this number.

4
You can always delete all the provisioning profiles and re-add this one to make sure it's the only one...Lord Zsolt
You are seeing the provisioning profile "Profile Identifier" and not "Profile Name" in Xcode as Xcode is unable to find the provisioning profile matching these "Profile Identifier". Once these are resolved, you will start seeing the "Profile Name". Make sure you have downloaded and installed the correct provisioning profiles. After installing, select the "Up-Down Arrows" right to "Profile Identifier" in Xcode to select the profile by name. I am using "iPhone Configuration Utility" to see all provisioning profiles installed with their names and identifiers: support.apple.com/kb/DL1465gagarwal
I see no way to add or delete provisioning profiles in Xcode anymore -- there's merely a refresh button under Preferences -> Accounts --> View Details. So is this all handled through the web portal? Is so, what's the point of downloading a provisioning profile?wcochran

4 Answers

20
votes

What's being displayed in Xcode is the guaranteed to be unique UUID of the provisioning profile. To verify that it is the profile you want. Go to the Apple Developer "Certificates, Identifiers & Profiles" site.

  • Look at the code signing detail to get the name of the provisioning profile

Code Signing Detail

Code Signing Details Zoomed In

Download Provisioning Profiles

  • Download the provisioning profile you think it should be
  • Peek inside the provisioning profile file using ether the command line or a plain text editor. Do not use Xcode (Personally I just, drag and drop the file into TextMate 2)

enter image description here

  • Compare the UUID in the file and your setting in Xcode

FYI: Provisioning profiles and development certificates die.

You can create new certificates in the the portal but it is way easer to use Xcode. (I personally would not use the Beta Xcode 6 and all the following screenshots are from Xcode 5.1) As you can see my Testflight distribution certificate and provisioning profile have expired. Expired certificates are not a huge problem they do not affect your apps in the store. The apps people buy are signed by Apple. You have to sign the app to submit it for review to prove the app came from you. It could be a problem if the certificate expires while your in review, but all you need to do is resubmit. If your Ad Hoc distributed app certificate expires then your beta testers will no longer be able to run it. You will have to distribute them all a new version with a new certificate and updated provisioning profile.

  • Use Xcode to update Distribution Certificate - Xcode - Preferences - Accounts Tab - Select Account - "View Details ..." button

enter image description here

  • Add new distribution certificate

enter image description here

  • This will take some time, ~ 30 sec ? be patient

  • Success

enter image description here

  • You can now use the portal to edit or create a new provisioning profile and completely control who can access your Ad Hoc Distributed App

Certificates and Provisioning Profiles Explained

It’s just security and private key/public key cryptography. Like setting up ssh keys the devil is in the details. One thing missing, one incorrect permission, one bit changed and nothing works.

Provisioning Profile diagram

The Players

  • Your private key - Required to sign objects that can then be validated with your certificate
  • Your iPhone Certificate (Created by Apple the signing authority using your public key)
  • Apple's Intermediate Certificate - The certificate identifying the signing authority required to validate your certificate
  • A Provisioning Profile - containing
    • An App ID
    • Certificate
    • List of Device ID's

The Requirements

  • Identify the developer
  • Identify the iPhone Development Team (Apple iOS Developer Membership)
  • Identify the application
  • Identify the individual authorized devices
  • Ensure not a single byte of the application has changed on the user's device

Common Issues:

  • App ID in provisioning profile is not compatible with the Bundle Identifier defined in the application's info plist. Yes, it’s unfortunate Xcode calls it a bundle identifier and the portal calls it an App ID. The default app templates link the bundle identifier to a mutated version of the app name so changing the name breaks everything but the simulator. See: Team Provisioning Profiles in Depth - https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/LaunchingYourApponDevices/LaunchingYourApponDevices.html#//apple_ref/doc/uid/TP40012582-CH27-SW10
  • New machine: No developer account in Xcode so no Certificate and Provisioning Profile
  • New machine: No private key for the Certificate
    • When Xcode creates a Certificate for you. It first creates a private key / public key pair. The private key is saved in the keychain. A certificate signing request is uploaded to apple. Your Certificate is created and downloaded automatically. You can always re-download your certificate or provisioning profile but your private key is only in your keychain and more then likely only on one computer. Unless you enable keychain syncing or explicitly save it to a file and sneaker-net it to another machine.
  • New machine: Missing Intermediate Certificate from Apple's Worldwide Developer Relations Certificate Authority
  • Certificate and/or Provisioning Profile Expired
  • Keychain access not "Allow Always". Certificates are securely stored in the keychain so Xcode always needs keychain access

Reference: Apple's Application Distribution Guide - https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AppDistributionGuide.pdf

15
votes

This clue is buried in a comment by wcochran but if all you need is to view the UUID of the mobileprovision file run this:

grep -a -A 1 'UUID' <PATH_TO_MOBILEPROVISION_FILE>

That will print something like:

<key>UUID></key>
<string>1a1a1a1a-2b2b-3c3c-4d4d-5e5e5e5e5e5e</string>

With the value between the <string> tags being the UUID you need.

You can also open the file in vim or some other text editor that doesn't mind non UTF-8 chars. (Brackets doesn't work for this reason).

3
votes

This is a very handy tool: https://github.com/chockenberry/Provisioning

It's a Quick Look plug-in that lets you view the info about a .mobileprovision profile file, including its UUID. Another bonus is that it will show you the devices that are configured for that profile file.

0
votes

I couldnt find a Windows answer anywhere, so here it is:

If you using windows, you can just open the downloaded provisioning profile with a text editor (I used Notepad++) to identify privisioning profile's UUID