11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProvisioningProfileって何なの?iOSアプリ開発における役割について

Last updated at Posted at 2023-11-26

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にインストールし、アプリのビルド時にプロビジョニングファイルを使用するという以降の流れに続きます。

  1. この目的を果たすためにCodeSigningの仕組みはつくられました。筆者個人としてはもっとよい設計があるのではないかと考えていますが、現実の問題としてこの手続きと向きあわない限りiOSアプリをリリースすることはできません。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?