iOSアプリ開発の証明書周りがよくわかっていないので自分なりに整理してみた

iOSアプリの証明書周り、非常にわかりにくい。

開発時に毎回どうだったっけ?って忘れてしまうので、自分なりに整理してみました。

証明書周りの構成

証明書周りの構成は4つに分類されています。

  1. App ID
  2. 証明書
  3. 端末
  4. プロビジョニングファイル

developmentとdistribution

証明書やプロビジョニングファイルには、開発時に使用するdevelopmentと、リリース時に使用するdistributionの2つの種類があります。

  • development
    • 自分のxcodeで開発をして、実機にインストールする時などはdevelopment
  • distribution
    • アプリをarchiveして配信する場合はdistribution

App ID

App IDはアプリごとに発行するIDです。

xcodeのプロジェクト内のBundle IDと、このApp IDを合わせる必要があります。

このIDに対して、そのアプリ上で使用するサービスを選択します。(プッシュ通知や、Apple Payなど)

証明書

開発時にはdevelopment用の証明書を使用して、実機にインストールしたりします。

配信用にipaファイルを作成する場合は、production用の証明書が必要です。

この証明書を作る時に、キーチェーンを使って秘密鍵やらなにやらを用意する必要があります。

証明書作成後、Appleの管理画面からは証明書自体はDownloadできますが、秘密鍵はDownloadできませんので、必ず無くさないようにする必要があります。

※アプリ配信用の証明書の他にも、Push通知用の証明書など複数種類があります。

端末

Ad Hoc版の際にインストール可能な端末を指定するために、端末を登録する必要があります。

端末の登録には端末ごとに発行されているUDIDが必要です。

端末は最大で100件まで登録が可能。

端末を指定してDisableにすることは可能だが、削除することは基本的にできない。(100件登録してしまうと、新しい端末を登録できなくなってしまう。)

1年に1度更新のタイミングで、端末を整理することができ、そのタイミングのみ端末の削除が可能になる。

プロビジョニングファイル

プロビジョニングファイルは、下記のデータにひも付き、アプリごとに発行します。

  • App ID
  • 証明書
  • 端末

プロビジョニングファイルがいろいろな情報を持っており、アプリをビルドする時にそのプロビジョニングファイルを指定してビルドさせます。

ただ、プロビジョニングファイルだけでビルドできてしまうと、セキュリティ的によろしくないため、プロビジョニングファイルに紐付いている証明書を持っていなければビルドができない、という仕様です。

また、プロビジョニングファイルが持っているApp IDと、ProjectのBundle IDが一致しないとビルドができません。

持っている情報が変わればプロビジョニングファイルも変わる

検証する端末が増えたりした時など、管理画面からプロビジョニングファイルの編集を行います。

この結果、新しいプロビジョニングファイルには新しいデータが書き込まれているため、古いプロビジョニングファイルと交換する必要があります。

よく、管理画面で端末を追加したのにインストールできない、というケースがありますが、これはビルド時のプロビジョニングファイルが変わっていない可能性が高いです。

Ad Hoc

本番の証明書を使用して、限られた端末にのみインストールできるようにするものを、Ad Hoc版といいます。

Test flightやCrashlyticsで検証用のアプリを配信する際には、Ad Hoc版のプロビジョニングファイルを作成して指定する必要があります。

ものすごいざっくりですが、概念をまとめてみました。