How to distribute ios application wirelessly without managing UDIDs and recompilation

IphoneObjective CXcode

Iphone 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.

https://stackoverflow.com/questions/3098290/ios-4-wireless-app-distribution-for-in-house-applications

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:

  1. 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.
  2. The server automatically does a few things (either by screen scraping, or through some Enterprise API if there is one):
  3. Add the device UDID to Apple's list of devices.
  4. Tell apple to generate the provisioning profile.
  5. 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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmktoView Question on Stackoverflow
Solution 1 - IphoneDavidoView Answer on Stackoverflow
Solution 2 - IphoneJon MarksView Answer on Stackoverflow
Solution 3 - IphoneSimon WhitakerView Answer on Stackoverflow
Solution 4 - IphonejmansView Answer on Stackoverflow
Solution 5 - IphoneFreeAsInBeerView Answer on Stackoverflow
Solution 6 - Iphonetc.View Answer on Stackoverflow
Solution 7 - Iphonefisch2View Answer on Stackoverflow