ios 証明書周りのあれこれ
個人・組織どちらに置いても証明書まわりに苦手意識があるので、五月雨に読んだ記事や思ったことをメモします。
dist 用の証明書は 3 つまでだし ユーザーではなくインフラに与えるのが良い、というお話。
ただし、個人 or 組織 or Enterprise で上限数は変わるかも。
年1程度でやってくる更新作業について。
1, Development/Production Certificate
開発や配信用に必要な証明書で、1年間の有効期限があります。
有効期限が切れると、アプリのビルドや配信に影響が出るため、更新が必要です。2, Provisioning Profile
開発や配信用に必要なプロファイルで、1年間の有効期限があります。
証明書と同様に、有効期限が切れるとアプリのビルドや配信に影響が出るため、更新が必要です。
https://hirokuma.blog/?p=27833, Push Notification Certificate
プッシュ通知に必要な証明書で、1年間の有効期限があります。
有効期限が切れると、プッシュ通知が正常に動作しなくなるため、更新が必要です。4, Apple Developer Program Membership
Appleの開発者プログラムに参加するための有料のメンバーシップです。一番重要かもしれません。
1年間の有効期限があり、有効期限が切れると、開発者プログラムへのアクセスや証明書の更新ができなくなるため、更新が必要です。
Appはダウンロードできなくなり、すでにインストールまたはダウンロードしたユーザーも、そのAppを使用できなくなります
ADP公式のdocs。読む。
ADPが無料か有料か、有料でも組織か個人か、さらにユーザーの役割によってできることが変わる。
アカウントに表示されるセクションは、ユーザーが無料のアカウントを利用しているか、有料プログラム(Apple Developer ProgramまたはApple Developer Enterprise Program)に登録しているかによって異なります。さらに、表示されるセクションで実行できるアクションは、有料プログラムに個人として登録しているか組織として登録しているかと、組織内での役割に応じて異なります。
チームメンバー招待は Account Holder または Admin ができる。
証明書概要
- 開発用証明書(development certificates)
- デバイスでアプリを実行したり、アプリの機能を利用する為に必要。
- 個人が所有する。
- iOS用に2つ、Mac用に2つ作成できる。 → 一人当たりってことかな?最大何人の個人を登録できる??
- 配布用証明書(distribution certificates)
- アプリをテスト用に配信したり、 App Store Connect にアップロードする為に必要。
- チームが所有する。
- 1チームにつき1種類まで。 → 最大何チーム登録できる??多分 3 チームまで
https://zenn.dev/link/comments/dfa42d7565009b
証明書作成
以下の記事の方がわかりやすいアプリIDを登録する
- プロビジョニングプロファイル内でアプリを識別するのに使われている。
- 明示的に1つのアプリに対して作ることも(Explict App ID)、 ワイルドカードで複数アプリに対して作ることも(Wildcard App ID)できる。
- 作成時にアプリ機能(Capabilities)を有効にできる。あとで変更もできる。
ここら辺は使いそう。
- Push Notificationsを有効にする
- 「Appleでサインイン」を有効にする
デバイス登録
プロビジョニングプロファイル(Provisioning profile)、以下PP。
プロビジョニングプロファイルは、アプリに対して特定のアプリサービスの使用を許可するとともに、デベロッパがそのアプリを開発、アップロード、配信している既知のデベロッパであることを保証します。各プロビジョニングプロファイルには、1つまたは複数のアプリに合致するアプリIDが1つ、そして配布用証明書が1通含まれています。
わかるようなわからないような。
PP が既知のデベロッパーであることを保証 → なんとなくわかる。
PP は App ID + 配布用証明書 で作成 → なんとなくわかる。開発用証明書ではないのね、把握。(→ この後 開発用PPが出てくる。それは開発用証明書を紐づける。なんやねん。)
ここでは言及ないけど、端末のUDIDも含めているって他の記事で読んだ。
アプリに対して特定のアプリサービスの使用を許可するとともに... → わからん。PPがないと利用できないサービスがあるのかな、くらい。
「Development(開発用)」および「Ad Hoc(アドホック)」の配信用に署名されたiOS、iPadOS、tvOS向けのアプリを、最初のリリース時にPPQサービスにチェックインすることが義務付けられています。アプリの署名に使用された証明書を確認するには、デバイスがインターネットに接続されている必要があります。
アプリのビルドは、オフラインだと一部の作業できないのね、把握。
開発用PPがあれば、Xcodeでアプリに手動で署名できる。
Admin or Account Holder しか作れない。開発用証明書、登録ずみデバイス、開発対象のApp ID が必要。
開発用PPとは?
開発用プロビジョニングプロファイル
開発用プロビジョニングプロファイルによって、開発中に特定のデバイスでアプリを起動したり、特定のAppサービスを利用したりできるようになります。個人の場合、開発用プロビジョニングプロファイルによって、署名済みのアプリを登録デバイスで実行できるようにすることができます。組織の場合、開発用プロビジョニングプロファイルによって、チームが開発したアプリにチームメンバーの誰かが署名し、デバイスにインストールすることができるようになります。開発用プロビジョニングプロファイルは以下の要素で構成されています。
チームが開発するすべてのアプリに合致するWildcard App ID、または単一のアプリに合致するExplicit App ID
チームに関連付けられている、指定されたデバイス
チームに関連付けられている、特定の開発用証明書
紐づける開発用証明書は複数可。
自動署名ならXcodeが開発用PPを管理する。
一通り読了Done。
まとめていく
Apple Develper Program (ADP) の契約状態とユーザー権限
- ADP の契約状態、チームメンバーに付与された権限によってできることが変わってくる。
- ADP への参加は 1. 無料、 2. 有料-個人、3. 有料-組織, 4. エンタープライズ(ADEP) がある。
- ユーザー権限は Account Holder, Admin, Developer などがある。
- ただし Admin は 3ユーザーまで。
- ADP への参加は年1で契約更新する。 更新しないと App が利用できなくなる。
証明書とプロビジョニングプロファイル (Provisioning Profile: PP)
証明書
- 全体像を掴む必要がある。 https://qiita.com/fujisan3/items/d037e3c40a0acc46f618 を参照
- 証明書は開発用証明書と配布用証明書がある。
- どちらの証明書も1年更新。更新しないとアプリのビルドや配信ができなくなる。
- 作り方は https://i-app-tec.com/ios/apply-application.html を参照。
配布用証明書(distribution certificates)
- アプリをテスト用に配信したり、 App Store Connect にアップロードする為に必要。
- 最大3つまで。CIのインフラに割り当てるのが良い。
開発用証明書(development certificates)
- デバイスでアプリを実行したり、アプリの機能を利用する為に必要。
- 開発用は開発者個人に対して割り当てる。
PP
- PPも開発用と配布用がある。
- これも1年更新。
- App ID + 配布用証明書 + 端末のUDID で構成される。
- 実機ビルドに必要。シミュレータ実行は不要。
開発用PP
- どの権限でも作成可能。
- 開発用の実機で、信頼できる開発元かどうか保証する。
配布用PP
- Admin 以上で作成可能。
- App Store Connect にアップロードする為のビルドで必要。
良き記事
証明書やPPを諸々作って TestFlight まで Done。なんか警告メールきた。
ITMS-90078: Missing Push Notification Entitlement
以下にそって解決する。
PP を 1 つにまとめれば、組織外の人間が dist 用の ipa を作成することもできそうだが、
チームメンバーだけで開発を行うなら、チームに参加している時点でその人の証明はできているので PP の作成や 証明書の発行は不要ぽい。
途中経過:
まだよくわかってないが、全然わからない → ぼんやりとしかわからない にレベルアップした感じ。
最近読んだ 証明書まわりの記事:
p12 とは
chatgpt 「Provisioning Profile(Development)とProvisioning Profile(Distribution)の違いを説明して」(抜粋)