Install iOS App Directly from Website - No Password, No Itunes, No Udid

Install iOS app directly from website - no password, no iTunes, no UDID

They seem to have an Enterprise Developer Account that allows over the air distribution to any iPad without the need to add each device's UDID.

The process to provide such an app is similar to providing an AdHoc Distribution with your "normal" Developer Account. You build your app for distribution and upload the .ipa bundle and a manifest .plist file to your server. Then you can use a link like this to make the app downloadable to users:

<a href="itms-services://?action=download-manifest&url=http://example.com/manifest.plist">Install App</a>

The only difference with an Enterprise Developer Account is, that you do not have to provide the UDID for each device you want to use. The link works with any device.

Can I distribute my App for any device without UDID?

"Private company". There's the clue.

App store developers can only distribute apps to (up to 100) devices with known UDIDs. That's the $100 plan most of us have. We can only create signing profiles for ad-hoc distribution to our 100 devices, or for sending to Apple. ([eta:] Or, now, for time-limited distribution to specific AppleIDs through the new Apple TestFlight.)

There also exists the enterprise developer program, a $300 annual plan open to businesses (currently, any business with a DUNS number; the requirements used to be more stringent.) Enterprise developers can't submit to the app store, but they can sign apps for installation onto any device, without knowledge of UDIDs.

The enterprise developer contract includes an agreement not to install such apps on devices not associated with the organization or business. Devices do verify the signing certificate with Apple, so if you try to sell enterprise-signed apps to the public, Apple will notice and shut you down. Also, enterprise provisioning profiles expire annually, so devices have to be refreshed with new profiles or the apps stop working.

[Edit to add, later:] A third, excellent, option (really just a feature of the first) is the B-2-B App Store. We've found this to be a much better fit for most user cases where we had been setting up enterprise accounts for clients before. It works almost the same as regular app store distribution, except that the app isn't public - it's visible only to a list of client AppleIDs that you, the developer, specify on upload. Those clients, who must sign up with Apple Business Manager (it's free), may then "purchase" as many copies of the app as they want, in the form of redemption codes, and distribute them to end user devices however is convenient.

It's very slick. Watch the WWDC video on it (a little outdated now but it'll give you the gist). B2B apps may cost anything you like, including $0. Downloads and updates use the normal app store mechanisms. Redemption codes may be assigned by device instead of by AppleID if the client uses Apple Configurator to provision their devices. There are some limitations but they aren't onerous. Highly recommended.

Is there a way to install iPhone App via browser?

Yes, safari will detect the *.ipa and will try to install it, but the ipa needs to be correctly sign and only allowed devices would be able to install it.

http://www.diawi.com is a service that will help you with this process.

All of this is for Ad-hoc distribution and not for production apps.

How to distribute ios application wirelessly without managing UDIDs and recompilation

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.

Install .ipa file without iTunes?

  • Attach the device
  • XCode -> Window -> Devices
  • Select the device
  • Right click -> Show Provisioning Profiles
  • Add your file, done.
  • Under the Applications box, click +
  • Select the .ipa file


Related Topics



Leave a reply



Submit