How to distribute ios application wirelessly without managing UDIDs and recompilation
IphoneObjective CXcodeIphone Problem Overview
I need to know what methods people are using to distribute (internally) demo of iPad application wirelessly without having to manage UDID?
I do not need a solution like testflight or betabuilder, all these requires me to manage UDID in the apple provisioning profile portal.
I am asking this question because I am seeing another studio doing a much smarter way right now and I wish to know how they did it - With a link they gave to us, we can install their demo application from a simple HTML over the air, and a provisioning profile magically appears in my iPad. All this happened without me telling them the UDID of my iPad, and therefore definitely without them to recompile the project.
How did they do it?
Iphone Solutions
Solution 1 - Iphone
I've been distributing my apps wirelessly for several months now with no problems. Granted, I am distributing under the Enterprise license, which costs $299 a year and is intended for internal business use. This may work with a normal developer license, but you'd have to do some testing to make sure. I imagine the process is the same if it does work. I'm using XCode 4, so this may be slightly different if you're using a different version. Basically, you have to add an Entitlements.plist file to your resources:
New->File->Code Signing->Entitlements
and before you distribute, you have to change:
"Can be debugged" to NO
Make sure your project is set up with the correct Code signing profiles. Now go to:
Product->archive
then with your newly built entry, click on: Share
Select "iOS App Store Package (.ipa)"
and choose the proper distribution profile you want to use. Click next, then choose a location to save the .ipa file to. Before you click Save, you need to check
Save for Enterprise Distribution
The .ipa file needs to be saved on an FTP Server, or at least that's how I got it to work. For the "Application URL" field, use the path to the .ipa file you are going to save, for example,
ftp://ftp.company.com/Installers/myApp.ipa
Give it a Title, then in "Large Image URL" and "Small Image URL" give it a path to your large (512x512) and small (72x72) icon files, (I'm developing for iPad, so iPhone may be different). For example,
ftp://ftp.company.com/Installers/small.png
Save the .ipa file. Now you need to place your .mobileprovision file on the ftp server. Anyone that wants to run the app needs the file installed or they won't be able to run it. Now, I'm not sure if you will need a .mobileprovision file that has all of the device ID's built into it if you're not part of the enterprise program, but you can try and see. Once your files are all on the ftp server, you'll need to create an email that has links to the two files, but the link for the .ipa file has to be in a special format. For the provisioning file:
ftp://ftp.company.com/Installers/profile.mobileprovision
and for the .ipa file:
itms-services:///?action=download-manifest&url=ftp%3A%2F%2Fftp.company.com%2FInstallers%2FmyApp.plist
Now when you send this email to someone, they just need to first download and install the .mobileprovision file, then the .ipa file. Voila, they are running your program. Let me know if this works without the enterprise subscription. I imagine it would as long as the .mobileprovision file contained the device ID's.
##Edit:
I've found a much better way of distributing apps, but it requires you to have a PHP server. What you do is create a PHP file that generates the plist file on the fly and returns that. In the links for large image, small image and ipa file you pass in links to other PHP files that return those things for your specific program. When you want to install an app from a link, you just pass in the url like this:
itms-services:///?action=download-manifest&url=http://mycompany.com/php/installApp.php?app=myappname
In your PHP functions you would just insert myappname into the other PHP calls, which would pull the proper files from your server. Using this method, you don't need to store plist files for any of your apps as they are generated, which makes updating your apps easier since you don't need to retype the information every time, don't even check the checkbox for enterprise distribution, just save the ipa file over the old one and you're good to go. Also, it is easy to implement security and login features with this method. Also, you don't need to specifically install the mobile provision file, as it installs itself when you install the app. It is stored in the ipa file.
##Edit:
Just to clarify the PHP method, you create a php file that creates plist files. Copy a standard plist file created from an enterprise distribution build, then in your php file, set the headers like this:
$pathToAddFi = "installers/".$_GET['app'].".plist"; //points to the php server file location of your .ipa files. when you call this php script, you pass in the name of the ipa file you want to install. Note: this location doesn't actually contain any plist files!
$root = "http://yourserver.com/php/root/"; //path to this PHP file's directory
header('content-type: application/xml');
header('Content-Disposition: attachment; filename='.basename($pathToAddFi));
header('Content-Transfer-Encoding: binary');
Then you build a string replacing the urls for your items like this:
<string>".$root."ipa_serve.php?app=". $_GET['app']."</string>
and end it with one last header before you echo the xml string:
header('Content-Length: ' . strlen($myXml));
Lastly, you create a php file to serve your ipa file, one to serve your large image, and one to serve your small image. Should be fairly straight forward unless you aren't very familiar with PHP.
Solution 2 - Iphone
I've just been through the same thing. I think the big different is the Enterprise Distribution Profile ($299 per year) - if you have one of these, you don't need to have Device UDIDs in the list. If you have a normal $99 per year deal, you have to. Simple as that.
Good news is that Apple have recently dropped the "500 employee" restriction so any company can get one of these: http://blog.apperian.com/2010/10/apple-opens-ios-developer-enterprise.html
You just have to get a free DUNS Number from Dun and Bradstreet, which take 30 days. We've applied for ours and will see how it all pans out.
Solution 3 - Iphone
You do need a provisioning profile, but it's embedded in the .ipa file, it doesn't need installing via iTunes as a separate installable.
You should check out TestFlight, a web app for managing OTA Ad Hoc build distributions; it's fantastic. It does all kinds of clever stuff, including gathering the UDIDs of your user's devices for you. (You, the developer, still need to input these into the iPhone Dev Center's provisioning portal, but the user can remain blissfully unaware that UDIDs even exist, never mind that they have to send it to you. Maybe this is what your boss used previously.)
Solution 4 - Iphone
I don't know of a way to accomplish this without the UDID of the user. My guess is that the developer already had your boss' UDID from before and created/bundled a new provisioning profile, or your boss was testing a mobile web app.
You can do ad-hoc distributions a little more easily now with Wireless App Distribution.
Solution 5 - Iphone
The application you're referring to is called Beta Builder. My boss used it for the first time today and it worked great. Definitely worth $2.
Solution 6 - Iphone
> All this happened without me telling them the UDID of my ipad, and therefore definitely without them to recompile the project.
Little known fact: You don't need to recompile the app. You don't even need to resign the app. All that matters is there's an installed provisioning profile that's "similar enough" to the embedded.mobileprovision inside the app (profile name? bundle ID? bundle seed? Who knows).
Alternatively, they could be doing automated builds. Maybe. Maybe not.
What might be happening:
- The server sends you a "configuration profile" (see SCEP/enterprise whatever). Apparently this can be used to get your device's UDID. TestFlight does this.
- The server automatically does a few things (either by screen scraping, or through some Enterprise API if there is one):
- Add the device UDID to Apple's list of devices.
- Tell apple to generate the provisioning profile.
- Download the provisioning profile.
Solution 7 - Iphone
The accepted answer is pretty old, and I found a lot of confusing resources for distributing Enterprise apps, so I thought I'd respond with a better solution.
HockeyApp is free and allows you to upload your Enterprise (and Ad-Hoc) builds and serve as a public download page. Note that this will only work without registering users and provisioning their device's UDIDs if you have an Apple Enterprise account as others here have mentioned, but it is by far the simplest, quickest workflow for distributing apps to clients quickly without the overhead of device provisioning.