見出し画像

iOS アプリ開発に必要な準備 - App ID, Certificate, Provisioning Profile -

Build サービス推進チームで Solution Architect をしている t_maru です。

今回は Apple が提供している開発者向のプログラムと、iOS アプリを開発に必要な証明書まわりについてのお話をします。

ライセンスの種類

iOS アプリを開発して配布するためには Apple の開発者向けプログラムに登録する必要があります。
このプログラムには、主に App Store で配布するために必要な Apple Developer Program (以降、ADP) と、企業内でアプリをプライベートに配布するために必要な Apple Developer Enterprise Program (以降、ADEP) という 2 種類のプログラムがあります。

細かな部分を比較すると多くの違いがあるのですが、1 番大きな違いは App Store に公開するための機能を使えるのか、従業員向けにアプリを配布する機能が使えるのか、という点です。

ADP と ADEP の機能比較

※ TestFlight とは App Store に公開前のバージョンを一部の人に有効期限付きで配布してテストをしてもらうための機能です。

ADEP は App Store を経由せずに iOS アプリを配信できる機能 (In-House 配布) がありますが、配布対象は ADEP を契約した会社の従業員にに限定して許可され、インターネット上で誰もがアクセスできる場所でアプリを配布することは禁止されているので注意が必要です。

詳細は下記の公式サイトを確認してください。
https://developer.apple.com/jp/programs/enterprise/

今回は App Store 向けの開発/配信を行うことを目的としていますので ADP に関して説明をしますが、iOS アプリをビルドする際に必要となる証明書、Provisioning Profile などに関しての概念は ADEP を使っている場合も同様ですので、契約しているプログラムによらず参考にしていただけるかと思います。

App ID

iOS アプリを開発し、App Store に公開するためには先程紹介した Apple の Developer Program に加入 (有料の年間サブスクリプション) する必要があります (開発者が自分の端末で開発、動作確認するだけであれば Apple ID があればできます)。そして ADP 上で生成する App ID (Bundle ID) と Certificate, Provisioning Profile というものが iOS アプリをビルドするためには必要になります。

まず App ID についてですが、これはアプリを識別するために設定するための ID で、世界中で一意である必要があります。このため会社で所有しているドメインを逆から並べた文字列を使うことが多いのではないかと思います。

この App ID にはアプリが使用する権限やサービスなど (Push 通知や Apple Pay の使用など) も紐づきますので、App ID を作成する際に必要な権限などを有効にする必要があります。

App ID 登録方法については公式のドキュメントがありますので下記を参照してください。
https://developer.apple.com/jp/help/account/manage-identifiers/register-an-app-id/

App ID は Developer Console 上 (Web ブラウザ) で作成した後、Xcode の `Signing & Capabilities` の設定で `Bundle Identifier` の部分に記載する必要があります。

Certificate

次に Certificate です。ここで言う Certificate とは Apple が発行する開発、アプリ配布に必要なデジタル証明書で、配布に関する証明書と Push 通知などのサービスを使うために必要な証明書の 2 種類が存在します。

以下に、証明書作成時に選択できる証明書のタイプを参考として掲載します。

Certificate 作成画面のキャプチャ 1
Certificate 作成画面のキャプチャ 2

配布に関する証明書は主に開発用 (Development) と配布用 (Distribution) の 2 種類が主に存在します。Xcode 11 以降を使用している場合は新しく登場している `Apple Development`, `Apple Distribution` を使用することができますが、それより古い Xcode を使って開発する必要がある場合は `iOS App Development`, `iOS App Distribution (App Store and Ad Hoc)` を選択する必要があります。これらの違いとしては、Apple xxx となっている最近の証明書は iOS の他にも macOS, tvOS, watchOS を開発/配布する際にも使用できますが、iOS xxx となっている以前からの証明書は iOS アプリの開発/配布のみで使用することができます。

Service に関する証明書で 1 番利用頻度が高いのは Push 通知用の証明書ではないかと思います。Push 用証明書にも開発用 (Sandbox) と本番用 (Sandbox & Production) の 2 種類が存在しているため、状況によって使い分けをします。Push 用証明書は Xcode の自動署名機能を使っても作れないため Web の Console から作成する必要があるので注意が必要です。

配布用の Certificate はアプリをビルドする PC にインストールしておく必要があります。開発時は開発者がそれぞれの PC で実施すると思いますので開発者各自の PC、App Store へアップロードする本番用アプリをビルドする場合、そのビルドを実施する端末 (開発者の PC, CI のコンテナなど) に Certificate をインストールします。

Provisioning Profile

次に Provisioning Profile についてです。Provisioning Profile とは、Certificate と App ID (Bundle ID)、場合によっては Device を紐付けて作成されるものです。

App Store で公開する場合は App Store 用の証明書 (Distribution 証明書) と App ID (Bundle ID) を紐付けるだけで OK ですが、AdHoc 配信では配信対象となる Device もこの Provisioning Profile に紐付ける必要があり、紐付けされていない端末には AdHoc で配信されるアプリをインストールできないという点で注意が必要です。以下に作成できる Provisioning Profile の種類を掲載します。

※ AdHoc 配信とは App がインストールできる端末を指定した状態でビルドされたアプリを配信することを指します。主に動作確認、テスト目的で使用される配信方式で、この配信にはアプリの審査が不要です。

Xcode の自動署名機能を使う場合 Xcode が Provisioning Profile の生成を自動で行う動きをしますが、組織により自動的に証明書や Provisioning Profile を自動生成/更新されると運用上困るというケースもあるかと思います。

この場合は Xcode でプロジェクトの設定を開き、`Signing & Capabilities` の設定で `Automatically manage signing` のチェックを外した上で、Apple Developer の Console または Xcode の機能を使って該当の Provisioning Profile をダウンロードして開発を行う PC またはアプリの Archive を行う CI 環境にインストールする必要があります。

その後、`Signing & Capabilities` の設定で `Provisioning Profile` の項目がありますので、その項目で適切な Provisioning Profile を選択します。

因みにですが、開発 PC へのインストールはダウンロードした Provisioning Profile をダブルクリックするだけで、特に難しいインストール手順は不要ですのでご安心ください。

まとめ

今回は iOS アプリ開発をするために必要な Apple の開発者プログラムと、アプリの開発/ビルドに必要な App ID (Bundle ID), Certificate, Provisioning Profile がどのようなものなのか、どこで設定する必要があるのか概要を説明しました。

次回は CI コンテナ上でどのように iOS アプリをビルドするのかお話したいと思います。