Apple Developer Enterprise ProgramのIn House配布でアプリを配布する手順

### In House配布について
Apple Developer Enterprise Programで利用可能な配布方法。AdHocでの配布と違い、インストール先の端末に制限がなく、Provisioning Profileに登録されていない端末にもインストールできる。
ただし、「ADEP契約主体の組織外の人が使う端末にインストールさせてはいけない」とのこと。
また、配布サイトを自作して配布するのが一般的で、配布手順がやや煩雑。
（In House配布に関するHowTo記事では自作サイトで配布する方法が紹介されていることが多かったです。deploygateなどの配布サービスのIn House配布対応については未確認です。）

参考サイト
https://www.micss.biz/2019/11/28/980/
https://medium.com/apps-studio/distributing-enterprise-ios-app-in-house-without-mdm-3ed015009893

Apple公式
https://support.apple.com/ja-jp/guide/deployment/depce7cefc4d/web

### 本記事におけるIn House配布で使うもの/作成するもの
- Apple Developer Enterprise ProgramにIdentifierが登録されたアプリ（後述の手順では作成しないので、ご用意ください）
- In House配布用のProvisioning Profile（後述の手順で作成します）
- Firebase Hostingで作成した配布用サイト（後述の手順で作成します）

### 手順
#### 1. Firebase Hostingで配布用サイトを作成
Firebaseにプロジェクトを追加（[https://console.firebase.google.com/](https://console.firebase.google.com/))、ガイドに従ってプロジェクトを追加
<img width="200" alt="Screen Shot 2020-04-18 at 13.21.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/be418e96-4a86-3056-5457-9e2f1dfc5af6.png">
Firebase Hostingを選択
<img width=140" alt="Screen Shot 2020-04-18 at 13.26.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/d13a75d7-4734-5f5b-c240-66b2f74298d4.png">
Firebase Hostingでサイト作成
（始めるボタンを押す）
<img width="260" alt="Screen Shot 2020-04-18 at 13.43.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/90956847-a49e-c6a6-2553-6fec832c561f.png">
ガイドに従ってサイトを作成
<img width="400" alt="Screen Shot 2020-04-18 at 13.43.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/898a50b1-eaa2-45ff-d2ea-ef0f4da41d64.png">
サイト作成では、ローカルでサイトのソースコードを作成/編集して、Firebaseにdeployする
（firebase-toolsで `firebase login` `firebase init` で `Hosting` を選択）
<img width="600" alt="Screen Shot 2020-04-18 at 17.59.56  masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/3527ee39-ead0-3574-e2ba-8b9c1636fb86.png">
`Use an exsting project` を選択
（ここまでの手順でプロジェクトが追加されているはずなので）
<img width="396" alt="Screen Shot 2020-04-18 at 13.49.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/afeedd1c-b1bc-7a5e-4f9a-2b09b66d01c2.png">
`public` ディレクトリを使うようにして、 `single-app` にする
（未確認ですが、single-appでなくても問題ないと思います）
<img width="520" alt="Screen Shot 2020-04-18 at 18.03.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/3fdca2a5-27d3-ec55-4cac-629f757bdc93.png">
`Firebase initialization complete!` したら `firebase deploy` でFirebase Hostingにサイトをdeplooyする。この後の手順で編集するが、一旦、配布用サイトの作成が完了
<img width="566" alt="Screen Shot 2020-04-18 at 18.07.53 masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/62fe76ae-0742-8ed8-518b-a3c1a1201c63.png">

　　
#### 2. In House配布用のProvisioning Profileを作成
Provisioning Profileを作成、`Distribution` に `In House` を選択
<img width="600" alt="Screen Shot 2020-04-18 at 13.08.26 masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/18f6fc66-147f-aabf-0437-5eaf67159381.png">

　　
#### 3. アプリをビルド
Xcodeでアプリをarchiveし、 `Select a method of distribution` で `Enterprise` を選択
<img width="540" alt="Screen Shot 2020-04-18 at 14.00.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/25c04c7a-ff13-177c-c183-c13f06420f4e.png">
任意でオプションを設定
<img width="540" alt="Screen Shot 2020-04-18 at 14.01.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/dba78c8e-6852-576b-4779-a7a42f542f23.png">
`Distribution manifest information` で以下のファイルのURLを入力（各ファイルは後の手順で配布用サイトに配置）
`App URL:` 配布用サイトに配置するアプリ（ipa）のURL
`Display Image URL:` 配布用サイトに配置するアプリのイメージ（任意の画像でOKです）
`Full Size Image URL:` 配布用サイトに配置するアプリのイメージ（任意の画像でOKです）
<img width="540" alt="Screen Shot 2020-04-18 at 18.53.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/fe176cde-905a-5a69-1437-6ede55140fb2.png">
`Select certificate and iOS In House profiles` で　In House配布用のProvisioning Profileを選択
<img width="540" alt="Screen Shot 2020-04-18 at 14.05.11 masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/e6aee8af-1f31-ef5c-ad34-d9d3aadee42d.png">
`export` すると、アプリ（ipa）やmanifest.plistがエクスポートされる
<img width="260" alt="Screen Shot 2020-04-18 at 19.10.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/07f880a0-b29a-ceb3-6e44-40ef84f18dbf.png">

　　
#### 4. 配布用サイトにアプリとmanifest.plistを配置
ローカルの配布用サイトのディレクトリにある `index.html` を編集して、配布用サイトにアプリのマニフェストへのリンクを設置。
ポイントはschemeに itms-services:// を指定すること。個人的に、ここで詰まりました。このschemeで起動されるアプリが、manifest.plistをダウンロードして、manifest.plistからアプリダウンロードしてくれるよう。

```
<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      .center {
        text-align: center;
        margin-top: 240px;
      }
    </style>
    <meta charset="utf-8">
    <title>install app</title>
  </head>
  <body>
    <div class='center'>
      <a href="itms-services://?action=download-manifest&url=https://YOUR-FIREBASE-SITE-ROOT-URL/manifest.plist" style="font-size: 36pt;">install app</a>
    </div>
  </body>
</html>
```

配布用サイトの `public` ディレクトリにアプリ（ipa）とmanifest.plistを配置
<img width="260" alt="Screen Shot 2020-04-18 at 23.01.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/168bd521-45cb-631b-c271-e75823f10e8f.png">
再度、`firebase deploy` を実行し、アプリ（ipa）とmanifest.plistを配布用サイトに配置
<img width="566" alt="Screen Shot 2020-04-18 at 18.07.53 masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/62fe76ae-0742-8ed8-518b-a3c1a1201c63.png">

　　
#### 5. インストール
配布用サイトに端末のSafariでアクセスし、install app をタップ
<img width="176" alt="Image from iOS (4) masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/0f6dd73e-790e-40c0-656c-43834584438c.png">
ポップアップが表示されたら、インストールをタップ、アプリがインストールされる
<img width="176" alt="Image from iOS (3) masked.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/47942/78ce4d03-5191-bcbb-3bbf-2be764cffdd7.png">