With the introduction of iOS 4, Apple finally gave enterprise users the ability to install or update applications wirelessly. This web-based approach greatly simplifies app deployment and even allows companies to create their own private app stores.
Starting with version 3.2 of XCode (Apple’s IDE for iPhone and OS X development), developers have a new build option for iOS 4 applications. In addition to the typical ‘Build’ and ‘Build and Run’ options, developers can now select ‘Build and Archive’. This new option packages the application executable and provisioning profile into an IPA file and generates an XML manifest file. XCode will prompt the developer to enter some basic information, such as the URL where the IPA file will be hosted, and the image that should be shown while the app is installing. This information will be populated in the manifest file.
The manifest file can be placed anywhere on the web server, but the IPA must be placed at the URL specified when the archive was created. To allow users to download the app, a webpage is created with an HTML anchor tag pointing to the location of the XML manifest file. By utilizing a framework like iWebKit (iwebkit.net), a company can very easily create an internal webpage which closely resembles and functions like Apple’s App Store.
Here’s an example link for an app named MyApp which is hosted on my local web server:
<a href=”itms-services://?action=download-manifest&url=http://thamer-d1/MyApp.plist” >MyApp</a>
Clicking that link in Mobile Safari will prompt the user to either install MyApp or cancel. If the user chooses to install, Safari will quit and the app will begin installing. This simplified process makes it much easier for employees to get app updates, and provides an install option for corporations with restrictive USB device policies.
This new app deployment method works for all apps, even those not built with an enterprise provisioning profile. The caveat is that any device on which the application will be installed must have its device ID included in the app’s provisioning profile. This will probably work just fine for deploying apps to a small number of friends, but a non-enterprise provisioning profile is limited to just 100 devices.
Registered iPhone developers can view more detailed documentation here