アプリをAdHocビルドで作成する
Test AdHocと表示するだけのアプリを作って、これを配信してみる。

"Generic iOS Device"を選択する。

Xcodeのメニューから[Product]-[Archive]を選択する。

Archiveが作成されたら"Export"をクリックする。

"Save for Ad Hoc Deployment"を選択して"Next"をクリックする。

Teamを選択する。

インストールできるデバイスの種別を選択できるみたいだけど、通常は"Export one app for all compatible devices"を選択して"Next"をクリックする。
Provisioning ProfileにアプリをインストールしたいデバイスのUDIDが含まれていないと、アプリインストール時に失敗するので注意。

ここで"Include manifest for over-the-air installation"を選択しておくとmanifestファイルを作成してくれる。自分で作る事も出来る。"Next"をクリックする。

manifestファイルを作成するのに必要な項目を入力したら"Export"をクリックする。

任意の場所に作成するフォルダ名を指定して"Export"をクリックする。
OTA配信に必要なファイルを作成する
アプリ本体とmanifestファイルは作成されているので、Webサーバーにダウンロード用のリンクを張ったHTMLを用意する。以下は、そのサンプル。
adhoc.html<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AdHoc Test</title>
</head>
<body>
<a href="itms-services://?action=download-manifest&url=https://example.com/apps/manifest.plist">アプリをインストール</a>
</body>
</html>
Xcodeで作成されたmanifestファイルに画像が指定されているので、何か適当な57x57と512x512の画像を用意しておく。ないとエラーになるので画像を作成するか、またはmanifestファイルの画像指定を削除しても大丈夫らしい。manifestファイルの内容は以下の通り。
manifest.plist<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>items</key>
<array>
<dict>
<key>assets</key>
<array>
<dict>
<key>kind</key>
<string>software-package</string>
<key>url</key>
<string>https://example.com/apps/TestAdHoc.ipa</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>url</key>
<string>https://example.com/apps/image_57.png</string>
</dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>url</key>
<string>https://example.com/apps/image_512.png</string>
</dict>
</array>
<key>metadata</key>
<dict>
<key>bundle-identifier</key>
<string>com.example.TestAdHoc</string>
<key>bundle-version</key>
<string>1.0</string>
<key>kind</key>
<string>software</string>
<key>title</key>
<string>TestAdHoc</string>
</dict>
</dict>
</array>
</dict>
</plist>

最終的に作成したファイルは全部で5個のファイルになる。
Webサーバーにアップロードしてインストールできるか確認する
必要なファイル一式が作成出来たらWebサーバーにアップロードするんだけど、今はSSL化されていないサーバーからはダウンロードできないので、httpsで接続できるサーバーを用意する必要がある。Webサーバーに置いたダウンロード用のHTMLに接続してダウンロードできるか確認する。

無事インストール成功。
注意点のまとめ
インストールできない場合は、大抵は以下のどれかではないかと思う。
- アプリをAdHocビルドした時のProvisioning ProfileにインストールしたいデバイスのUDIDが含まれていない。
- WebサーバーがSSL化されていない。
- manifestファイル作成時の入力ミス。
- この記事で書かれている製品やソフトについて
- Xcode 8.2.1