How to distribute Ad-Hoc Apps Xcode 4.3.2

If you want other people to test your app before releasing it in the app store, you can use the Ad-Hoc distribution system. It’s not well documented but it’s very easy to setup. Your beta testers and clients will be very happy because from now on they can just download the app from a link without the pain of connecting to iTunes, neither dealing with the app store. They can download the app directly from their devices.

What you need:

  1. Membership in Apple Development Program, to be able to distribute your app ($99…), if you are reading this I think you already know what I’m talking about.
  2. The device UDID.
  3. A Development Provisioning Profile with that UDID included
  4. A web site where you can upload the .ipa and .plist file containing your app data

The device UDID.
This is the only painful part for your beta-tester. The easiest way to get this number is asking your tester to download one of the many apps that easily email that number. For example this one.
There are many others, just pick up one you like. Personally I don’t like them, the previous one is the best I could find. I will code a free one with the options I think my testers would like to have. If you want something particular in this app tell me so I will add it.

Another way they can get that number is by connecting the device in iTunes go to Summary -> Edit -> Copy Identifier (UDID) or just Command+C and email that number to you. I found the app installation the easiest way.

Development Provisioning Profile

If you are developing apps you already know what is this. If you don’t know, please start learning how to develop for the iPhone and then come back here. I wrote an old post about good books and documentation to start.
Once you got the UDID, add a new device and either create a new provisioning profile only for testers or use your own one. It’s important that you add the device in the provisioning profile so they will be able to run the app.

Uploading the ipa to your web server.

We are almost ready. First we have to prepare our file for distribution and then create an html file with the link that the tester will use to download the provisioning profile and the app.

Instructions for XCode 4.3.2

Archive your app but DON’T forget to plug your device first so you can select it as the target for compilation or select the iOS Device, not the Simulator.

When the archive configuration window popsup select “Distribute

Select your code signing identity.

Here select: “Save for Enterprise or Ad-Hoc Deployment”

Don’t forget to select “Save for Enterprise Distribution”.
The Application URL has to be the same url where you plan to upload your app in the server. In this case the ipa file is located at (this is an example I have nothing in that location)

For title choose the same name or whatever you want.

Other fields are not necessary.

Choose a folder to save the .ipa and .plist file. Upload those files to your web server.

Finally we have to create an HTML file with a link for the .plist file.
The .plist file include the path for the .ipa file.

The HTML file:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
<html xmlns="" xml:lang="en" lang="en" dir="ltr">
<title> Your App Name</title>
<a href="itms-services://?action=download-manifest&url=">Install Application</a>

That’s all you have to do.
Just send an email to your tester with the URL of this HTML.
The beta-tester has to first download and install the provisioning file which will open the settings in the device and ask to accept.
Then coming back to the web site, click on the Install Application link and that’s all.

Let me know your experiences about this method.

This is the distribution method I use with clients and beta-testers.

Remember to read the disclaimer of this blog, which basically states that I’m not responsible of any damage, or inconvenience you might found doing what is written here. You are at your own risk.

Sources: Jeffrey Sambells

UPDATE: Thanks to fintel in the comments to point out that you actually don’t need to ask the user to download the provisioning profile. I already updated this post.