ProvisioningProfileとは
ProvisioningProfile(略称Profile)とは、iOSアプリのコード署名に必要とされるファイルです。
Profileはアプリのビルド時に使用されます。一般にProfileはXcodeにインポートされて使われます。
Profileには以下の情報が格納されており、これらがXcodeを介してアプリバイナリに格納されます。
- アプリ発行元の証明書(公開鍵) (=Certificate)
- アプリID (=Identifier)
- 開発実機端末のUUID (=Device) ※開発用Profileのみ
ProvisioningProfileの目的
ProvisioningProfileが果たす主な役割は、以下の二つです。
- アプリバイナリの開発元が本物であることを証明する。
- 開発者が指定した端末にのみアプリをインストールできるようにする。※開発版アプリのみ
これらの目的を達成するために、開発元の証明書やデバイスの情報をProfileにパッケージ化し、アプリに組み込まれる仕組みになっています1。
「iOSアプリにおけるProvisioningProfileの役割と、開発者がどのように対応するのか」に焦点を当てた概略図を、以下に示します。
ProvisioningProfileの構成要素
ProvisioningProfileは Certificate x Identifier x Device x Profile区分 の組み合わせによって定義されています。
以降の節はhttps://developer.apple.com/account/resources (要ログイン) を眺めながら読んでもらうことを想定しています。
Certificates - 証明書
Certificate(証明書と訳される)とは、アプリの発行元を証明するものです。
Certificateは開発者個人であったり、企業のような機関であったりします。
Certificateは製品版か開発版かの区分があります。
- Distribution(発行元。AppStoreへのリリース等配布用)
- Development(開発者。開発用)
システム的にはCertificate≒公開鍵であり、開発者はCertificateを発行時の秘密鍵とセットで持つ必要があります。
Development区分のCertificateは概念の上では開発者個人に紐付けられているようですが、
メンバー毎に異なるCertificateを定義し直す運用は管理が複雑になる為、チームで1つの秘密鍵を共有したほうが開発効率がよいです。
また、Certificateには有効期限があり、発行から1年後に失効するようになっているため、定期的な再発行とキーチェーンへの再インストールが必要です。
ProfileはCertificateに依存しているので、Profileも同様にXcodeへの定期的な再インストールが必要です。
Identifiers - アプリID
AppStore内で一意となるアプリIDのこと。
たとえばブラウザのSafariであれば com.apple.mobilesafari がアプリIDです。
Devices - 実機端末
デバイスIDの情報をProvisioningProfileに載せることによって、開発版のアプリが開発者の指定した端末上でしか動作しないように制限しています。
DeviceはDevelopment区分のプロファイルでのみ設定される項目です。
Profiles区分とは
前述したとおり、プロビジョニングプロファイルは Certificate x Identifier x Device x Profile区分 の組み合わせによって定義されています。
用途によって以下のProfile区分があります。
- AppStore(AppStoreへのリリース用)
- Development(開発用)
- AdHoc(アドホック)
プロビジョニングプロファイルはAppleサーバー上で生成されるので、開発者はそれを開発機のローカルに落とした上でXcodeにインストールし、アプリのビルド時にプロビジョニングファイルを使用するという以降の流れに続きます。
-
この目的を果たすためにCodeSigningの仕組みはつくられました。筆者個人としてはもっとよい設計があるのではないかと考えていますが、現実の問題としてこの手続きと向きあわない限りiOSアプリをリリースすることはできません。 ↩