iOSアプリ委託開発でのAdHocリリース手順まとめ（配布編）

# はじめに
委託開発でiOSアプリの開発を行っている方向けのAdHocリリース方法の手順をまとめました。
初心者向けの内容になっています。

こちらの記事[iOSアプリ委託開発でのAdHocリリース手順まとめ（アカウント作成編）](https://qiita.com/j-kimu/items/3f4e68b6595b795c91f8)の続きです。

# 対象読者

- iOSアプリ開発に関して初心者
- iOSアプリの委託開発を請け負うことになったがリリース時の具体的な作業がよくわからない
- AdHocのリリースをしたいが作業がわからない

# 前提条件

開発環境は以下です。（2020/03→2021/03/23→2022/03/15）

- Xcode 13.2.1（11.3→12.4→13.2.1）
- macOS Monterey 12.2.1（10.14.5→11.2.3→12.2.1）
- iOS 13.6.1（13.3.1→13.6.1→変更なし）

顧客の社内で利用するiOSアプリの委託開発を請負で実施した作業です。
社内利用かつ利用台数も少ないため、配布方法にAdHocを選択しました。

2021/3/23追記
新しい中間証明書が必要となりました。新しい中間証明書を利用するにはXcodeのバージョンが11.4.1以上である必要があります。また、そのバージョンのXcodeを利用するためには、OSが10.15.2以上である必要があります。
※新しい中間証明書に関する情報：[Apple Worldwide Developer Relations Intermediate Certificate Expiration](https://developer.apple.com/de/support/expiration/)
※Xcodeのダウンロード：[More Software Download for AppleDevelopers](https://developer.apple.com/download/more/)

新しい中間証明書がない場合、5-③証明書の作成で.cerファイルをキーチェーンアクセスに反映させた際に、反映した証明書が有効ではないと表示され、6.端末への配布の際に、Xcodeのバージョンについて警告が発生し、ipaファイルをデプロイするとエラーが発生しデプロイできない状態となります。
![スクリーンショット 2021-03-23 20.51.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/7a51d1b3-a1d9-605b-5b96-79b4a1365d8d.png)

![スクリーンショット 2021-03-24 1.48.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/b422b859-e3f9-d9e9-081b-40a464d011ea.png)

新しい証明書でビルドをしたと認識していたが、ipaファイルのデプロイ時にはこのようなエラーが発生し、デプロイが完了しなかった。
![スクリーンショット 2021-03-24 1.49.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/198f9cdd-00e7-2a18-71d9-8f6d05e90d9f.png)

2022/03/15追記
MacOS、Xcodeを最新化したので、上記のようなエラーが発生することはありませんでした。
作業時はこれらを最新化すれば大丈夫そうです。

# リリース手順

1　AppleIDの作成
2　チームメンバに追加【アカウント管理者】
3　権限の付与【アカウント管理者】
4　アカウント情報の確認
5　[プロビジョニングプロファイルの作成と適用](#5プロビジョニングプロファイルの作成と適用)
 * [概要](#概要)
 * [①鍵ペアの作成](#鍵ペアの作成)
 * [②CSRの送付、③証明書の作成](#csrの送付証明書の作成)
 * [④Macへの証明書登録](#macへの証明書登録)
 * [⑤アプリケーションIDの登録](#アプリケーションIDの登録)
 * [⑥端末登録](#端末登録)
 * [⑦プロビジョニングプロファイル登録](#プロビジョニングプロファイル登録)
 * [⑧Macへのプロビジョニングプロファイル登録](#macへのプロビジョニングプロファイル登録)
 * [⑨ビルド設定](#ビルド設定)
 * [⑩ビルド、アーカイブ](#ビルドアーカイブ)

6　[端末への配布](#端末への配布)

本記事は、5〜6の作業をまとめています。プロビジョニングプロファイルの有効期限(1年)が来るたびに実施する必要があるので、これらは毎年発生する作業です（※）。1〜4は前の記事でまとめています。

※2021/3/24追記
更新の作業とし必要だったのは、5〜6の作業のうち一部でした。具体的には、以下となります。
また、更新時は同じ名前の証明書が多々作成されるので、古い証明書は削除して作業しましょう。
5　[プロビジョニングプロファイルの作成と適用](#5プロビジョニングプロファイルの作成と適用)
 * [①鍵ペアの作成](#鍵ペアの作成)
 * [②CSRの送付、③証明書の作成](#csrの送付証明書の作成)
 * [④Macへの証明書登録](#macへの証明書登録)
 * [⑦プロビジョニングプロファイル登録](#プロビジョニングプロファイル登録)
   ⑦の作業は新しく作成しなおすのではなく、すでに登録済のプロビジョニングプロファイルを編集し、有効期限が変更されたプロビジョニングプロファイルをダウンロードする作業になります。
 * [⑨ビルド設定](#ビルド設定)
 * [⑩ビルド、アーカイブ](#ビルドアーカイブ)

6　[端末への配布](#端末への配布)

## 5.プロビジョニングプロファイルの作成と適用
### 概要
iOS端末にアプリを配信するためには、プロビジョニングプロファイルというバイナリファイルを利用したビルドが必要です。
今回はAdHoc配布用のプロビジョニングプロファイルなので、App ID(Identifier)、デバイス識別子(Device)、正規開発者証明書(Certificate)をもとに作成されます。

ここからの作業は非常に混乱し、かつ、XcodeやWebサイトの画面・操作手順が頻繁に変わってしまうそうです。
そのため、概念を図にした分かりやすいサイトで作業のイメージをつけてください。
参考：[iOSアプリのプロビジョニング周りを図にしてみる](https://qiita.com/fujisan3/items/d037e3c40a0acc46f618)

サイトの手順を参考に、2020年3月現在のUIでの作業手順を説明します。
→2021/3/24時点の情報を追記しました。UIは大きく変更はなかったので、画像は2020年3月の状態のままとしています。

その他、参考：

* [[iPhone] iOS, Certificate 証明書を作ってみる](https://i-app-tec.com/ios/apply-application.html)
* [(初心者向け) Ad Hoc配信によるテスト](https://qiita.com/yokobonbon/items/d1f4f824ff1dbc738ad0)

:warning:<u>**"Automatically manage signing"を使う場合の注意点**</u>
Xcodeから簡単にプロビジョニングファイルを作成する方法として、プロジェクトの「TARGET」>「Signing&Capabilities」において、"Automatically manage signing"にチェックを入れる方法があります。

<img width="525" alt="スクリーンショット 2020-03-24 21.02.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/14c96328-082d-2072-848d-09db8edf41de.png">

開発時（Debug）に、無料のApple IDで実機デバックをする場合は、ここにチェックを入れて実施することになります。非常に楽にデバックができますが、ここで登録されるアプリケーションIDは、別のアカウントで利用できなくなるため開発用のアプリケーションIDを利用するように気を付けましょう。アプリケーションIDに利用されるのは、「Bundle Identifier」に入力する値です。
参考：[フリーのApple IDアカウントを使ってXcodeからアプリを実機転送できることで、App ID登録時にエラーを出してしまう可能性の問題](http://aryzae.hatenablog.com/entry/2017/04/22/030555)

また、リリース時（Release）どのプロビジョニングプロファイルを利用しているのか分かりにくく管理がしにくいので、同じチーム内でアプリが複数存在する場合は、自動作成する方法はおすすめしません。


### ①鍵ペアの作成
MacOSのキーチェーンアクセスを開き、「キーチェーンアクセス」>「証明書アシスタンス」>「認証局に証明書を要求」を選択します。

<img width="572" alt="スクリーンショット 2020-03-24 20.06.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/1cd23275-d1e1-6172-d240-8caca2a255bf.png">

「証明書アシスタンス」で、必要な情報を入力して「続ける」をクリック。

* 「ユーザのメールアドレス」には開発者のメールアドレスを設定してください。
* 「通称」は任意の値で問題ありません。未入力でエラーが起きたらしいという記述があるサイトもありました。最終的に、キーチェーンの鍵名に使われているようで、表面上、後で変更することもできますが、ビルド時にこの時に入力した値でログインを求められます。ユーザ情報とマシン名の組み合わせにしておくと無難。
 <img width="438" alt="スクリーンショット 2020-03-26 3.33.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/e2836a7c-562f-618d-ef65-52de5e56fddf.png">

* 「CAのメールアドレス」は未入力で大丈夫です。
* 「要求の処理」では、「ディスクに保存」、「鍵ペア情報を指定」にチェックを入れてください。

<img width=<img width="617" alt="スクリーンショット 2020-03-24 21.28.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/9aeaf395-dffe-1637-6a09-75e42e835b7a.png">

CertificateSigningRequest.certSigningRequestを保存します。

<img width="616" alt="スクリーンショット 2020-03-24 21.29.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/a2e2bb1e-0bf7-0788-a101-3c1e3ec3683d.png">

鍵ペア情報が以下の状態であることを確認して、「続ける」をクリック。

<img width="613" alt="スクリーンショット 2020-03-24 21.29.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/608b1bfb-460b-f2af-7a44-c8250e56adeb.png">

CertificateSigningRequest.certSigningRequestが作成されていればOKです。
この時点でMacの「キーチェーンアクセス」>「ログイン」の画面で作成した鍵ペアが登録されていることを確認できます。

### ②CSRの送付、③証明書の作成
[Certificates, Identifiers & Profiles-Apple Developer](https://developer.apple.com/account/resources/certificates/list)にアクセスして、作成されたCertificateSigningRequest.certSingningRequestファイルをアップロードします。アップロードが完了すると、選択したリリース方法用の証明書が作成されます。

「Certificates」の右横の「+」ボタンをクリックします。
<img width="588" alt="スクリーンショット 2020-03-30 11.35.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/316c3e26-ce2a-6a71-35b4-bec4970d9a15.png">

「Create a New Certificate」画面の「Software」で作成する証明書に紐づく配布方法を選択します。今回は、Ad Hoc用の証明書を作成するので、「iOS Distribution(App Store and Ad Hoc)」を選択し、「Continue」をクリックします。

<img width="1236" alt="スクリーンショット 2020-03-30 11.36.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/2f38de96-1f78-ed40-ce61-d3e615fd43aa.png">

「Choose File」のリンクをクリックして、作成したCertificateSigningRequest.certSingningRequestファイルを選択し、「Continue」をクリックします。

<img width="1246" alt="スクリーンショット 2020-03-23 15.55.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/6677749b-9609-7bee-e405-cf6a1d960e6b.png">

ダウンロード画面が表示されます。この時点で証明書（Certificate）は作成されています。

### ④Macへの証明書登録
証明書をダウンロードして、Macに登録します。

[Certificates, Identifiers & Profiles>Certificates-Apple Developer](https://developer.apple.com/account/resources/certificates/list)の一覧から、作成した証明書を選択して、以下の画面を表示します。「Download」ボタンを押して、証明書をダウンロードしてください。

<img width="1216" alt="スクリーンショット 2020-03-30 21.40.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/55ec93de-56f3-b092-2f27-56d1874c8dbd.png">

「ios_distribution.cer」ファイルがダウンロードされるので、ファイルをダブルクリックして、「キーチェーンアクセス」に反映させます。

また、今回は製品用のため、「ios_distribution.cer」ファイルというファイル名ですが、開発用の場合は、「ios_development.cer」となります。

<img width="500" alt="スクリーンショット 2020-03-30 21.45.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/c28cd669-6e50-2912-b5b3-df4b032c9854.png">

「キーチェーンアクセス」に登録されていれば、証明書の登録作業は完了です。

### ⑤アプリケーションIDの登録
[Certificates, Identifiers & Profiles>Identifiers-Apple Developer](https://developer.apple.com/account/resources/identifiers/list)で、「Identifiers」の右横の「+」ボタンをクリックします。
<img width="685" alt="スクリーンショット 2020-03-30 22.25.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/34fb837d-377b-86f1-0c33-70541b0b5686.png">

「Register a New Identifier」の画面で、「App IDs」を選択して、「Continue」をクリックします。

<img width="1219" alt="スクリーンショット 2020-03-30 22.26.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/8aa09866-e0e4-abf7-70a1-eb54c6289b10.png">

「Register an App ID」の画面でアプリケーションの情報を入力します。

* 「Description」にはアプリケーションの説明を入力します。
* 「Bundle ID」にはアプリを識別する世界で唯一のIDを設定します。リバースドメインで命名することが推奨されています。この値は[「5. プロビジョニングプロファイルの作成と適用」](#5.プロビジョニングプロファイルの作成と適用)の最初に説明したように、Xcodeでも作成でき、アカウントの枠を超えて一意でなければなりません。
* 「Capabilities」ではアプリケーションのオプションサービスを設定できます。必要ないものは外しましょう。

<img width="1222" alt="スクリーンショット 2020-03-30 22.27.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/1ba13f6a-e786-6502-9ad3-90c8dd565698.png">

:warning: <img width="1241" alt="スクリーンショット 2020-03-23 14.55.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/ab45ff9b-1d7a-7df3-ad8e-0e4f5c30b700.png">
App IDがすでに利用されていた場合、登録時に以下のエラーが表示されます、

<img width="506" alt="スクリーンショット 2020-03-23 13.43.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/05981bc4-a837-e51f-0572-e84e05d53ec2.png">

入力が完了したら「Contienue」をクリックします。Identifiersの一覧に登録した内容が表示されていれば完了です。

### ⑥端末登録
アプリをリリースする端末の情報を登録します。今回はiOSアプリなので、iOS端末になります。

[Certificates, Identifiers & Profiles>Devices-Apple Developer](https://developer.apple.com/account/resources/devices/list)で、「Devices」の右横の「+」ボタンをクリックします。

<img width="627" alt="スクリーンショット 2020-03-30 23.44.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/3fc8ce4c-56b2-f44d-c767-50a8f2e4c183.png">

### ⑦プロビジョニングプロファイル登録
App ID(Identifier)、デバイス識別子(Device)、正規開発者証明書(Certificate)をもとに、プロビジョニングプロファイルを作成します。

[Certificates, Identifiers & Profiles>Profiles-Apple Developer](https://developer.apple.com/account/resources/profiles/list)で、「Profiles」の右横の「+」ボタンをクリックします。
<img width="594" alt="スクリーンショット 2020-03-31 6.03.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/eabcd5d4-629d-17a5-b28f-8e8498292566.png">

「Register a New Provisioning Profile」の画面で、「Distribution」の「AdHoc」を選択し、「Continue」をクリックします。

<img width="1220" alt="スクリーンショット 2020-03-31 6.04.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/e6a901a3-45e9-faf7-be90-8a8c1ba38f4a.png">

App IDの選択画面で、[⑤アプリケーションIDの登録](#アプリケーションIDの登録)で作成したアプリケーションIDを選択して「Continue」をクリックします。

<img width="1162" alt="スクリーンショット 2020-03-31 6.10.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/1fe16574-d682-c86e-a5f9-3443fd408a7c.png">

証明書の選択画面で。[②CSRの送付、③証明書の作成](#csrの送付証明書の作成)で作成した証明書を選択します。有効期限の異なる別の証明書が表示される場合もあるので、有効期限を確認して選択し、「Continue」をクリックします。

<img width="1174" alt="スクリーンショット 2020-03-31 6.11.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/78cb5735-9619-d51a-1e05-c42f27c446fc.png">

端末選択画面で、[⑥端末登録](#端末登録)で登録した端末を選択し、「Continue」をクリックします。

<img width="1163" alt="スクリーンショット 2020-03-31 6.19.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/c43e83b7-82d7-7057-3887-0f98eb528c59.png">

プロビジョニングプロファイルの名前を設定します。ここで設定した名前でXcode上の選択欄に表示されるので、開発用、製品用、どのアプリケーション用など区別できるように入力しておくとよいです。

<img width="1161" alt="スクリーンショット 2020-03-31 6.28.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/5bbb4369-e04d-40c6-b336-f1f500affd4f.png">


登録が完了し、ダウンロード画面が表示されるので、プロビジョニングファイルをダウンロードします。

<img width="1241" alt="スクリーンショット 2020-03-23 14.55.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/a82d3af5-bfc0-120a-fe82-793281cffb46.png">

2021/3/24追記
更新時は、すでに作成されているプロビジョニングプロファイルを選択し、「Edit」ボタンを押して、以下の画面を表示して、新しい正規開発者証明書(Certificate)を選択してください。有効期限で判断可能です。
![スクリーンショット 2021-03-23 20.52.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/e09dceb1-7019-c2b4-b3b5-111e5a5b239e.png)


### ⑧Macへのプロビジョニングプロファイル登録
ダウンロードしたプロビジョニングプロファイルをMacに登録します。

ダウンロードされた.mobileprovisionファイルをダブルクリックすると、キーチェーンアクセスに登録されます。

### ⑨ビルド設定
Xcodeでプロジェクトにプロビジョニングプロファイルを適用します。

Xcodeでプロジェクトの「TARGETS」＞「Build Settings」で、「Code Signing Identity」の「Release」とその配下の「Any iOS SDK」の行で「iOS Distribution」を選択します。デフォルトでは
「iOS Developer」が選択されているようで、ここを変更せずにプロビジョニングプロファイルを適用すると、SigningのStatusに"Provisioning profile "(プロビジョニング名)" doesn't include signing certificate "iPhone Developer: (アカウント名)"とエラーメッセージが表示されます。

<img width="730" alt="スクリーンショット0331.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/a2d3ac16-4ae7-a66b-5182-525360952a01.png">


「TARGETS」＞「Signing & Capabilities」のSigning(Release)で、該当のプロビジョニングプロファイルを選択してください。Statusエラーが発生しなければOKです。
SigningがDebugとReleaseに分かれていない場合は、「Build Settings」で選択されている配布方法が同じ状態のためです。分けて利用したい場合は、「Build Settings」の状態を見直してください。

<img width="812" alt="スクリーンショット0331_02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/084d93aa-8a1c-1674-d5e5-946478cb7825.png">

### ⑩ビルド、アーカイブ
Xcodeでアーカイブファイルを作成します。

2022/03/15追記
ビルド時に「The run destination 実機名 is not valid for Running the scheme 'アプリ名’.」というエラーが発生した場合、配布端末（iPhoneなど）がMacを信頼していないことが原因ですので、再度、配布端末とMacをつなぎ直して信頼するという対応をしてください。
[【Xcodeでbuildエラー】The run destination 実機名 is not valid for Running the scheme ‘アプリ名’.](https://god48.com/xcode-the-run-destination-iphone-name-is-not-valid-for-running-the-scheme-app-name)

Xcodeで「Product」＞「Archive」を選択します。[①鍵ペアの作成](#鍵ペアの作成)で作成したキーへのログインを求められるので、パスワードを入力して許可してください。

<img width="433" alt="スクリーンショット 2020-03-31 9.04.18.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/66663ae4-8df5-dc3f-a4de-5a06bb09a3de.png">

2022/03/15追記
「Archive」が選択できない場合、Xcodeで接続した実機ではなく、エミュレータを選択している可能性があります。
対象の実機が選択されているか確認してください。

以下の画面が表示されるので、対象のArchiveを選択して「Distribute App」をクリックします。

<img width="1004" alt="スクリーンショット 2020-03-31 9.26.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/5c633ac3-ae13-17c5-41a0-c439d7344f94.png">

配布方法を選択する画面で、「AdHoc」を選択して、「Next」をクリックしてください。
<img width="748" alt="スクリーンショット 2020-03-31 9.17.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/03d90f26-3ab5-7ef4-e952-bd2bada0c19b.png">

オプションの選択画面です。特に制御が必要なければこのまま「Next」をクリックしてください。
<img width="743" alt="スクリーンショット 2020-03-31 9.22.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/6d3dd3d2-4c05-92ce-95cf-40b4ceee2dfe.png">

ビルド用のプロファイルを選択します。「Select Profile」で今回のアプリケーションのAdHoc用に作成したプロビジョニングプロファイルを選択してください。選択すると、「Next」がクリックできるようになります。
<img width="743" alt="スクリーンショット 2020-03-31 9.27.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/234e4753-7b3b-411b-d0ae-977b328e5b42.png">

ここでまたキーへのログインを求められるので、ログインしてください。
appファイルの詳細が表示された画面が表示されます。その画面で「Export」をクリックすると、ipaファイルが作成されます。

2021/3/23追記
ipaファイルができた後、そのアプリの証明書の有効期限は以下の方法で調べることができます。
ipaファイルと同じフォルダの中に作成された「DistributionSummary.plist」を開くと、「certificate>dateExpires」に記載されています。
![スクリーンショット 2021-03-24 7.05.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/901ddf09-3e68-6d97-a344-4706acf963ec.png)


## 端末への配布
ipaファイルができたら端末への配布を行います。

端末とMacを有線で接続し、Xcodeの「Window」＞「Devices and Simulators」を選択します。

Devicesタブに接続された端末の情報が表示されます。「INSTALLED APPS」にipaファイルをドラッグ＆ドロップするとアプリをインストールできます。
<img width="592" alt="スクリーンショット 2020-03-31 9.48.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427235/8095c8e8-9ddb-b5fb-9510-a162b87ef91a.png">

2022/03/15追記
配布後のバージョンを設定などから確認することはできないので、
アプリケーション内にバージョン情報を表記するようなつくりにしておくのがよいと思います。

以上が、AdHocリリース作業です。お疲れ様でした〜！