いさぽん部屋(isapon.com)

ゲーム系プログラマによる特に方針のないブログ。技術系とカレー、ラーメンネタ多めだったはずが、最近はダイエットネタ多め。

iOS向けAdhocアプリをWEB経由で配信する

ちょっとハマったのでメモ。


iOS向けの開発をしていると、iTunesConnectやらAppleDevelopperCenterやら色々なところに飛ばされます。


もう、それだけで頭が禿そうになるのに、さらにそれをxcodeが無い人に向けて配信しようと思ったらTestflightにアカウントを登録して……など、もうこの上ないほどアカウントまみれでストレスがマッハです。Googleの開発し易さを見習っていただきたいものです。


と、いうわけで適当なサーバーにダウンロード用の窓口を作ってみます。今回はapacheを使う&動作テストと言うことで、深く考えないようにします。


WEBサーバーでの事前準備1(証明書)

まず、iOS向けアプリの配信をする場合はsslで接続できるようにしておく必要があります。加えて、自己著名でも良いので、改ざん防止のための証明書が必要です。


証明書をダウンロード(Aタグでリンクを張ればよいです)できるようにして、iPhoneからリンクを選べば証明書をダウンロードできます。ちゃんと検証済みになっていればOK。SANパラメータはなくてもOKです。


f:id:no-operand:20180521155230p:plain

WEBサーバーでの事前準備2(MIME)

.ipaファイルと、.ipaファイルを指定するための.plistファイルに対するMIMEの設定が必要です。とりあえず htaccess にでも書いておきます。


一応これで準備OKです。


AddType  application/octet-stream .ipa
AddType text/xml .plist

manifest.plist を作る

manifest.plistというテキストファイルを作成します。ファイル名は必ず「manifest.plist」にして下さい。


昔はファイル名は自由だったと思うのですが、最近のアップデートでmanifest.plist以外を受け付けなくなりました。ファイル名が違うと「無反応」で終わり、何が何だかささっぱりわからなくなります。


最小限の中身は下のような感じになります。https://foo.bar/hoge.ipaと書いてあるところはipaファイルのURL、com.isapon.hoge.fugaには、xcodeで設定したBundle Identiferを書きます。titleはとりあえず何でもよいのですが、無いとダウンロードできないので、てきとーに埋めておきます。


<?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://foo.bar/hoge.ipa</string>
                </dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
                <string>com.isapon.hoge.fuga</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>とりあえずなんでも良い</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>

manifest.plist へのリンクを用意する

ダウンロードページに以下のようなリンクを張ります。


あとは、iPhoneからダウンロードページを開けばOKです。


<a href="itms-services://?action=download-manifest&url=https://foo.bar/manifest.plist">だうんろーど</a>