iOS証明書とプロビジョニングプロファイル|Expo
著者:Mehdi Azizi
公開・9 分
証明書は誰が署名したかを、プロファイルはどのアプリがどのiPhoneで動くかを示します。ExpoならEASが両方を作成・更新します。
iOSの開発者証明書は、誰がアプリに署名したかを証明するものです。プロビジョニングプロファイルは、その証明書を特定のアプリに結びつけ、アプリをどこで動かしてよいかを示します。Expoを使えば、これらを手作業で作ることはほとんどありません。ビルドを実行すると、EASが作成・保管し、期限が来れば更新してくれます。
それでも、各ファイルの役割を理解しておくことは役に立ちます。ビルドがインストールできない、アップロードが止まる、そんな日にこの知識があれば丸一日を節約できます。このガイドでは4つの要素、それぞれの有効期間、Appleの制限、よくあるエラーとその解決策を順に見ていきます。
僕はSolysやTradaZenを含むiOSアプリをExpoとEASで公開しています。全体の流れはMacなしでiOSアプリを公開するにまとめました。ここでは署名の中身を開けて見ていきます。
Appleが署名を求める理由
iOSアプリは、iPhoneにインストールするにもApp Store Connectに送るにも、署名が必要です。署名によって、そのアプリがAppleの把握している開発者から来たもので、その後誰にも改ざんされていないことが保証されます。
App Storeについては安心できる点があります。AppleのテクニカルノートTN3161によると、App Storeはアップロード時に配布用証明書が有効かを確認し、そのあとアプリを再署名します。以降、アプリはあなたの証明書の有効期限に左右されません。つまり証明書が有効である必要があるのはアップロードの時点で、アプリの寿命全体ではありません。
知っておくべき4つの要素
Expoの認証情報に関するドキュメントでは、iOS向けに3つを挙げています。配布用証明書、プロファイル、そしてプッシュ通知キーです。僕はこれにApp IDを加えます。App IDがなければプロファイルは存在できないからです。
配布用証明書
これは開発者としてのあなたの署名です。Appleの証明書に関するヘルプでは2つの種類に分けています。
- Apple Developmentは、開発中に自分のデバイスでアプリを動かすためのものです。個人に属します。
- Apple Distributionは、指定したテスト用デバイスへの配布やApp Store Connectへのアップロードに使います。チームに属し、作成できるのはアカウント所有者か管理者だけです。
配布用証明書は特定のアプリに紐づきません。同じ1枚ですべてのアプリに署名します。証明書には秘密鍵がセットになっていて、署名を可能にしているのはこの秘密鍵です。TN3161によると、Appleの証明書は通常、作成から1年間有効です。
App ID
App IDは、プロファイルの中でアプリを識別するものです。バンドルID、たとえばcom.exemple.monapp(架空の例)をそのまま使います。Appleのヘルプによると、許可された機能(プッシュ通知、App Groups、Sign in with Appleなど)のリストも持っています。
Expoでは、設定ファイルのios.bundleIdentifierフィールドがこれにあたります。一度決めたら変えないでください。設定ファイルでもApp Store Connectでも、すべての場所で同じでなければなりません。App IDに有効期限はありません。またExpoのiOS機能に関するドキュメントによると、EASはビルドのたびにその機能を設定ファイルと同期します。
プロビジョニングプロファイル
プロファイルは、すべてをつなぐ役割を持ちます。App ID、証明書、そして種類によっては許可されたデバイスのリストを含みます。関係するのは次の3種類です。
- 開発用:登録済みの自分のデバイスで動かすテスト用アプリ。
- Ad hoc:UDIDで識別した特定のデバイスのリストにだけインストールできるビルド。EASでいう「内部配布」です。
- App Store:App Store ConnectとTestFlight用。TN3125の説明どおり、デバイスのリストは含みません。
どのプロファイルにも有効期限があります。Appleによれば通常は最長1年、Expoによれば12か月です。
プッシュ通知キー(APNs)
APNsキーは、あなたのサーバー(またはExpoのサーバー)がアプリに通知を送ることを許可します。.p8ファイルで、ダウンロードできるのは1回だけです。Appleはアカウントに保管しません。1つのキーですべてのアプリに使え、有効期限もありません。
まとめの表
| 要素 | 用途 | 有効期間 | Expoでの管理者 |
|---|---|---|---|
| 配布用証明書 | ビルドに署名する | 通常1年 | ログイン後はEAS |
| App ID | アプリを識別する | 期限なし | あなた、次にEAS |
| App Storeプロファイル | Appleに送る | 最長12か月 | EAS |
| Ad hocプロファイル | 自分のiPhoneに入れる | 最長12か月 | EASとあなたのデバイス |
| APNsプッシュキー | 通知を送る | 期限なし | EASまたはあなた |
| 無料アカウントのプロファイル | Xcodeでテストする | 7日 | XcodeでありEASではない |
「あなた、次にEAS」は、バンドルIDはあなたが決め、機能はEASが扱うという意味です。「EASとあなたのデバイス」は、テスト用iPhoneを1台ずつあなたが登録し、プロファイルはEASが作るという意味です。最後の行は無料のAppleアカウントの話です。Appleのアカウントに関するヘルプによると、そのプロファイルは作成から7日で期限切れになります。
知っておくべきAppleの制限
- 配布用証明書:1アカウントにごくわずかです。Appleのヘルプでは配布の種類ごと・チームごとに1枚、Expoの表では上限2枚とされています。覚えておくべきルールは、ビルドのたび、パソコンごとに新しい証明書を作らないことです。
- APNsキー:Expoによると、1アカウント最大2つ。
- プロファイル:Expoによると、上限なし。
- デバイス:Appleのデバイスに関するヘルプによると、製品ファミリーごと・メンバーシップ年ごとに最大100台。デバイスを無効にしても枠は空きません。デバイスを削除しておけば、次のメンバーシップ年の初めにカウンターが100に戻ります。
EASがやってくれること
Expoの管理された認証情報のページによると、最初のiOSビルドで、足りないものを生成するか尋ねられます。Apple Developerアカウントにログインすると、EASが配布用証明書、プロファイル、プッシュキーを作成し、自社のサーバーに保管します。以降のビルドではそれが再利用されます。
役立つポイントを3つ挙げます。
- Appleのパスワードは自分のマシンから出ません。Expoのセキュリティページには、パスワードはサーバーに送信されず、保管された認証情報は暗号化されると明記されています。
- **
eas credentialsですべて確認できます。**証明書、プロファイル、プッシュキー。このコマンドで置き換えや削除もできます。 - EASで削除してもAppleからは削除されません。枠を空けるには、Appleのポータルで失効させる必要があります。
ローカルの認証情報で自分で管理することもできます。credentials.jsonファイルで証明書(.p12)とプロファイル(.mobileprovision)を指定します。Expoはこれらのファイルを.gitignoreに追加するよう求めています。ExpoアプリのAPIキーと同じルールで、秘密情報は絶対にリポジトリに入れません。
よくあるエラーと解決方法
プロファイルの期限切れ
Ad hocビルドはプロファイルを内蔵しているので、期限が切れるとテスト用iPhoneでアプリが開かなくなります。一方App Storeでは、期限切れは本番のアプリに何の影響もないとExpoが明言しています。解決策:ビルドし直してください。EASが新しいプロファイルを生成します。eas credentialsで自分で作ることもできます。そのあと、新しいビルドをデバイスに再インストールします。
TestFlightと混同しないでください。TestFlightのビルドは、証明書に関係なく90日で期限切れになります。詳しくはTestFlightでiPhoneアプリをテストするを見てください。
証明書の期限切れ・失効
Appleの説明は明確です。メンバーシップが有効なら、すでにApp Storeにあるアプリは影響を受けません。ただし、その証明書で署名したビルドはもうアップロードできません。アップロード済みで未提出のビルドは、証明書が失効していればInvalid Binaryになることがあります。そして失効した証明書を含むプロファイルは無効になります。
**解決策:eas credentialsから、または次のビルド時に新しい証明書を作成してください。**そのあとプロファイルの作り直しはEASに任せます。そして、動いている証明書を反射的に失効させるのは絶対にやめましょう。
Ad hocプロファイルにデバイスが含まれていない
インストールリンクが自分の端末では動くのに、テスターのiPhoneでは動かない。原因は、Expoの内部配布に関するドキュメントにあるとおり、ビルド時にプロファイルに入っていたデバイスしかアプリをインストールできないことです。
解決策:
eas device:createでデバイスを登録します。- Appleアカウントにログインした対話モードでビルドし直し、EASにプロファイルを更新させます。または
eas build:resignで既存のビルドを再署名すれば、全部をコンパイルし直さずに済みます。 - CI環境では、非対話モードはプロファイルをリストを更新せずに再利用します。
--refresh-ad-hoc-provisioning-profileオプションを付けてください。
新規または更新したばかりのアカウントでは、Appleが新しいデバイスを処理するのに24〜72時間かかることがあります。そのため、そのデバイスを含む最初のビルドが失敗することもあります。待ってから、ビルドし直してください。
証明書の上限に達した
Appleが新しい配布用証明書の作成を拒否します。多くの場合、別のMacのXcodeや別のビルドサービスで作った古い証明書が残っています。.p12ファイルがあるなら既存の証明書を再利用してください。なければ、使っていない証明書をAppleのポータルで失効させます。失効させても公開中のアプリには影響しませんが、その証明書を含むプロファイルは無効になります。
「Provisioning profile doesn't include signing certificate」
このXcodeのメッセージは、手元のマシンに秘密鍵がある証明書がプロファイルに含まれていないという意味です。典型的な原因は、Xcodeの自動署名とEASの認証情報を混在させることです。信頼できる情報源は1つに絞ってください。管理された認証情報を使うEASビルドか、ローカルの認証情報か、どちらか一方です。
キーの失効後に通知が止まった
APNsキーを失効させると、そのキーを使うすべてのアプリで通知が届かなくなるとExpoは警告しています。新しいキーを作り、eas credentialsでアップロードしてください。ユーザーのExpo Pushトークンは変わりません。
機能を追加したらプロファイルが無効になった
プッシュ通知やApp Groupsなどのサービスを有効にすると、プロファイルは無効になります。再生成が必要です。EASなら、機能の同期はビルドのたびに行われます。それでもプロファイルが拒否される場合は、eas credentialsで新しく生成できます。
署名のあとは
署名済みビルドは1つのステップにすぎません。ストアページ、スクリーンショット、プライバシー、審査への提出はApp Storeでアプリを公開するにまとめています。まだメンバーシップがないなら、Apple開発者アカウントから始めてください。初心者にExpoを勧める理由はモバイルアプリのためのReact NativeとExpoを読んでください。
初めての公開を準備しているなら
最初のアップロードの前に、無料の診断を受けてください。プロジェクトで本当に詰まっている点がわかり、僕のApple審査リジェクト対策チェックリストも届きます。
アプリを作り、サブスクリプションを組み込み、署名に悩まされずに公開するなら、iOS & Android Kitが4ステップの流れを、僕のアプリのスターターコード付きで、自分のペースで案内します。
よくある質問
プロビジョニングプロファイルとは何ですか?
アプリを動かしたり、Appleに送ったりすることを許可するファイルです。App ID、証明書、そして種類によってはデバイスのリストを結びつけます。App Storeプロファイルにはデバイスが含まれず、Ad hocプロファイルには数台がリストされます。
iOSの開発者証明書は無料ですか?
証明書単体の料金はありません。配布用証明書は年額99ドルのApple Developer Programに含まれています。無料のAppleアカウントでも、Xcodeで最大3台のデバイスでテストできますが、プロファイルは7日で期限切れになり、公開はできません。
Appleの配布用証明書の有効期間はどれくらいですか?
Appleによると、通常は作成から1年です。プロビジョニングプロファイルも最長12か月です。一方、プッシュ通知キーに有効期限はありません。
配布用証明書が期限切れになるとどうなりますか?
メンバーシップが有効な限り、すでにApp Storeにあるアプリには何も起きません。その証明書で署名した新しいビルドをアップロードできなくなるだけです。EASなら、次のビルド時かeas credentialsで新しい証明書が作成されます。
iOS証明書の作成にMacは必要ですか?
EASを使うなら不要です。コマンドラインからAppleアカウントにログインすれば、WindowsでもLinuxでも、EASが証明書とプロファイルを生成します。EASを使わない従来の方法では、MacのXcodeかキーチェーンアクセスが必要です。
Ad hocプロファイルには何台のデバイスを入れられますか?
アカウントにはメンバーシップ年ごとにiPhoneを最大100台、ほかのデバイスファミリーもそれぞれ同じ台数まで登録できます。無効にしたデバイスもカウントされたままです。もっと多くの人とテストするなら、TestFlightを使ってください。

