Xcode8でテスト用のiOSアプリをAdHocビルドでOTA配信する

開発中のiOSアプリをテストするときにどうやって配布するかが悩ましいところだけど、AdHocビルドしたアプリをOTA(Over The Air)で配信する手順を改めてまとめてみた。
アプリをAdHocビルドで作成する
Test AdHocと表示するだけのアプリを作って、これを配信してみる。 ios_adhoc1
"Generic iOS Device"を選択する。
ios_adhoc2
Xcodeのメニューから[Product]-[Archive]を選択する。
ios_adhoc3
Archiveが作成されたら"Export"をクリックする。
ios_adhoc4
"Save for Ad Hoc Deployment"を選択して"Next"をクリックする。
ios_adhoc5
Teamを選択する。
ios_adhoc11
インストールできるデバイスの種別を選択できるみたいだけど、通常は"Export one app for all compatible devices"を選択して"Next"をクリックする。
Provisioning ProfileにアプリをインストールしたいデバイスのUDIDが含まれていないと、アプリインストール時に失敗するので注意。 ios_adhoc6
ここで"Include manifest for over-the-air installation"を選択しておくとmanifestファイルを作成してくれる。自分で作る事も出来る。"Next"をクリックする。
ios_adhoc7
manifestファイルを作成するのに必要な項目を入力したら"Export"をクリックする。
ios_adhoc8
任意の場所に作成するフォルダ名を指定して"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>
ios_adhoc9
最終的に作成したファイルは全部で5個のファイルになる。
Webサーバーにアップロードしてインストールできるか確認する
必要なファイル一式が作成出来たらWebサーバーにアップロードするんだけど、今はSSL化されていないサーバーからはダウンロードできないので、httpsで接続できるサーバーを用意する必要がある。Webサーバーに置いたダウンロード用のHTMLに接続してダウンロードできるか確認する。 ios_adhoc10
無事インストール成功。
注意点のまとめ
インストールできない場合は、大抵は以下のどれかではないかと思う。
  • アプリをAdHocビルドした時のProvisioning ProfileにインストールしたいデバイスのUDIDが含まれていない。
  • WebサーバーがSSL化されていない。
  • manifestファイル作成時の入力ミス。
    この記事で書かれている製品やソフトについて
  • Xcode 8.2.1