Oct 24, 2019

How to do Over The Air (OTA) distribution? (This tutorial is written for Adhoc Version only)

Why OTA Distribution?

You might have wondered is it possible to distribute your iOS app easily through your website.
If you're just distributing iOS app within your organization, you get to skip Apple's iOS review process which it got its fame by its strictness. With OTA you can just start publishing iOS app without the worries being rejected by App Review.

2 Types of iOS OTA Distribution

Each one require different type of Apple Developer enrolment:
  1. Adhoc Distribution - Apple Developer license
  2. Enterprise Program - Require high cost program (Apple Developer Enterprise Program)
Caveat: For 2nd point above, OTA distribution is meant for the purpose of distributing iOS app within one organization. Distributing the iOS app publicly is an act against EULA of Apple.

Differences between adhoc and enterprise OTA distribution:
  1. Adhoc OTA distribution only allow devices registered under the Provision Profile used by iOS build
  2. Enterprise distribution require your device to manually permit and "to trust" the distribution publisher.

In this article, I would only explain how to do the OTA under adhoc build, as I haven't got the opportunity to be enrolled into Apple Enterprise Program.
Even so, if you had Googling around, you would find out the distribution steps has similarity, the only different is the available choices during ipa generating.

What do you need for Adhoc OTA distribution?

Requirements:
  • Apple Developer Program (USD 99 annually)
  • iOS Distribution Certificate & releasing Profile (to be created in Apple Developer platform)

Steps to start generating iOS app for OTA distribution


Step 1: Change your device target to "Generic iOS Device" and start "Archive"

Archive

Step 2: Once the app is successfully archived

Successful Archive

Step 3: Select distribution method (choose Ad Hoc for small group distribution)


Note: Ad Hoc distribution allows devices registered under the attached to the releasing Profile to install the iOS build (ipa) only.
Ad Hoc - Distribution Method choices

Step 4:  Enable OTA installation

This step would enable add OTA installation by adding extra script (manifest.plist) later in the exported outcome. The plist file is required to allow Safari browser identify the app and communicate with your iOS device later.
Enable OTA installation

Enter hosting URL


Step 5: Signing App With Certificate and Profile

Automatic signing - xcode will try to find a suitable signing setting, it'll create a proper certificates/profiles into the Developer account
Manual - you use back known & existing setting (next screenshot)
Re-sign app



Step 6: Compile and Export

Compilation

Final Step: Exporting

Exported Files

Step 7: Final, minimal content required for manifest.plist for hosting

From step 6 above, manifest.plist & TSAwesomeProj.ipa are the only required files for simple OTA installation. You can find a lot of information in the original manifest.plist file,
Part of the content from manifest.plist file


but what's required is just as below. This is the content enough to get OTA installation working.
Simplified Version


Finally, only a simple HTML code is needed for OTA installation to happen in Safari browser. You just need to add "href" attribute value below for hyperlink.
itms-services://?action=download-manifest&url=URL_TO_MANIFEST_FILE
Example: 
<a href="itms-services://?action=download-manifest&url=https://test.com/manifest.plist">TSAwesomeProj Sample</a>

2 comments:

  1. Hello, for every user I send the link, have to add the device?

    ReplyDelete
  2. Yup, the short answer is Yes!

    It's depending on if the device's UDID is available in the list (https://developer.apple.com/account/resources/devices/list).

    And fyi, if new UDID is added after you generate the ipa link, you need to re-generate the ipa with the updated profile (with the new UDID added: https://developer.apple.com/account/resources/profiles/list).

    ReplyDelete

Hey, thank you for spending time leaving some thoughts, that would be really helpful as encouragement for us to write more quality articles! Thank you!