iOS code の署名には2つの要素が必要です。 証明書 アプリの作成者を証明するもので、 プロビジョニングプロファイル は、どのアプリか、どのデバイスで実行可能か、どの機能(capabilities)を使用できるかを定義します。証明書、秘密鍵、および対応するプロファイルがすべて一致していない限り、Xcodeはデバイスへのビルドを拒否し、App Store Connectはアップロードを拒否します。
このガイドでは、各要素の詳細、開発用、ad hoc、TestFlight、App Store、およびエンタープライズビルドに必要な組み合わせ、Macの有無にかかわらず作成する方法、そして遭遇するエラーの解決策について解説します。
なぜAppleは code の署名を必要とするのか
Appleは、既知の開発者に紐付けられた code のみをiPhoneで実行することを許可しています。署名によって、Appleは以下の3つの保証を得られます:
- 識別性: バイナリが特定のApple Developerチームのメンバーによって署名されていること。
- 完全性: 署名後にバイナリが改ざんされていないこと。1バイトでも変更されると署名は無効になります。
- 認可: アプリがそのデバイス上で、指定された権限(push、iCloud、Sign in with Apple、App Groupsなど)を持って実行を許可されていること。
証明書が最初の2つ、プロビジョニングプロファイルが3つ目の要素を提供します。
構成要素
| 要素 | 概要 | ファイル | 所有者 |
|---|---|---|---|
| 秘密鍵 | マシン上で生成される、キーペアの秘密側 | Keychain内、または .key / .pem |
あなた自身。Appleが閲覧することはありません |
| CSR | 公開鍵を含むCertificate Signing Request | .certSigningRequest / .csr |
一時的な |
| 証明書 | チームに紐付けられたApple署名済みの公開鍵 | .cer |
Appleが発行し、ダウンロードするもの |
| 署名アイデンティティ | 証明書と秘密鍵のセット | .p12 エクスポート時 |
お客様 |
| App ID | Bundle Identifierと有効なCapabilitiesの組み合わせ | Developer Portal上のレコード | チーム |
| デバイス | 登録済みのiPhoneまたはiPadのUDID | Developer Portalのレコード | チーム |
| プロビジョニングプロファイル | App ID、許可された証明書、デバイス、entitlementsのセット | .mobileprovision |
チーム |
最もよくある混同: .cer ファイル単体では機能しません。SigningにはCSRを作成した秘密鍵が必要です。鍵を紛失した場合は、新しい証明書を作成してください。
証明書の種類
Appleの開発用証明書
開発中にXcodeから自身のデバイスでビルドを実行するために使用します。Development証明書は個々の開発者に紐付けられ、Appleによってコンピュータ名がラベル付けされます。チーム内の各開発者が個別に保持できます。
Apple Distribution
Ad Hoc配布、TestFlight、App Store向けのビルド署名に使用されます。配布用証明書はチームに帰属し、作成できるのはAccount HolderまたはAdminロールのみです。チームが保持できる数には制限があるため、各開発者が個別に作成するのではなく、安全な場所で共有するようにしてください。
以前のアカウントでは、 iOS開発 と iOS配布用 が表示されることがあります。これらはXcode 11以前のタイプです。現在はApple DevelopmentとApple Distributionがこれらに代わっており、iOS、iPadOS、macOS、tvOS、watchOS、visionOSのすべてに対応しています。
その他に遭遇する可能性がある証明書タイプ:
- Developer ID Application / Installer: Mac App Store以外で配布されるMacアプリ用。iOSでは使用しません。
- Apple Push Notification service SSL: レガシーなプッシュ通知用証明書。現在は APNs認証キー (
.p8), 毎年更新の必要がなく、チーム内のすべてのアプリで使用可能です。詳細は当社の APNs証明書ガイド. - Apple Pay Merchant Identity, Pass Type ID, ウェブサイト Push ID: 特定のサービス用。
プロビジョニングプロファイルのタイプ
| プロファイルタイプ | 証明書 | デバイス | 用途 |
|---|---|---|---|
| iOSアプリ開発 | Apple開発 | 登録済みデバイスのみ | Xcodeからの実行・デバッグ |
| Ad Hoc | Apple Distribution | 登録済みデバイスのみ(デバイスファミリーごとに年間最大100台) | リンクやファイル経由でテスターのデバイスにリリースビルドをインストール |
| App Store Connect | Apple Distribution | Apple経由で全デバイスに対応 | TestFlightおよびApp Store |
| 社内配布用 | エンタープライズ配布用証明書 | 組織内のすべてのデバイス | Apple Developer Enterprise Program限定 |
プロファイルは以下に紐付けられます: 1つのApp ID。アプリに拡張機能(ウィジェット、通知サービス拡張、シェア拡張など)がある場合、各ターゲットに独自のbundle IDが必要であり、それぞれに専用のプロファイルが必要です。
各要素の仕組み
Xcodeやビルドサービスが Capacitor アプリに署名する際、以下の項目を確認します:
- ターゲット内のbundle ID(例:
com.example.app)が、プロファイルのApp IDと一致していること。 - 署名に使用される証明書が、プロファイルに記載されている証明書のいずれかであること。
- その証明書の秘密鍵はキーチェーンに保存されています。
- 開発用および ad hoc ビルドの場合、プロファイルにデバイスの UDID が含まれます。
- Entitlements ファイル(push、associated domains、App Groups)は、App ID とプロファイルで許可されている内容のサブセットです。
チェックに失敗した場合は、実行時のクラッシュではなく署名エラーが発生します。これは、リリース前に問題に気づけるため好ましい挙動です。
どの組み合わせが必要ですか?
| 目的 | 証明書 | プロファイル | デバイス登録 |
|---|---|---|---|
| Xcode から自分の iPhone で実行 | Appleの開発用証明書 | iOSアプリ開発 | はい |
| TestFlightを使わずに、少数のテスターにbuildを配信する | Apple Distribution | Ad Hoc | はい、全テスターのUDIDが必要です |
| TestFlightでベータテストを行う | Apple Distribution | App Store Connect | いいえ |
| App Storeでリリースする | Apple Distribution | App Store Connect | いいえ |
| 社内従業員用アプリ(App Store非公開) | エンタープライズ | インハウス(In-House) | いいえ |
TestFlightでは、 App Storeと 同じ署名を使用します。TestFlight専用のプロファイルは存在しません。1つのビルドをアップロードし、App Store Connect上でテスターへの配布、審査への提出、あるいはその両方にするかを決定します。
証明書とプロファイルの作成
オプション1:Xcodeに署名を管理させる
ローカル開発ではこれが最も簡単です。 ios/App/App.xcworkspace (または .xcodeproj お使いの Capacitor 8 プロジェクトで Swift Package Manager を使用している場合)、 App ターゲットを選択し、 Signing & Capabilitiesを開いて、 署名管理を自動化 にチェックを入れ、チームを選択します。Xcode が開発用証明書を作成し、接続されたデバイスを登録して、プロファイルを自動生成します。
CI では、ビルドマシンがチームアカウントにアクセスし、独自に証明書を作成する必要があるため、自動署名は厄介になります。多くのチームはリリースビルドでは、手動署名か、API のキーベース署名を備えたビルドサービスに切り替えています。
オプション 2: Mac で手動で作成する
- 開く キーチェーンアクセス > 証明書アシスタント > 認証局から証明書をリクエスト。メールアドレスを入力し、次を選択します ディスクに保存されました. これにより、キーチェーンに秘密鍵と
.certSigningRequestファイルが作成されます。 - Apple Developerポータルで以下に移動します: Certificates, Identifiers & Profiles > Certificates > +、次に Apple Distribution (または Apple Development) を選択し、CSRをアップロードします。
- 次に
.cerをダウンロードしてダブルクリックします。Keychain Accessが秘密鍵とペアリングします。 - CI用にエクスポートする場合:Keychain Accessの 証明書の設定、証明書を右クリックして、以下を選択します: Export、名前を付けて保存します。
.p12強力なパスワードを設定してください。
オプション3:Macを使わずに作成する
LinuxやWindows上のOpenSSLを使用して、一連の流れを完結できます:
# 1. Private key and CSR
openssl genrsa -out ios_distribution.key 2048
openssl req -new -key ios_distribution.key -out ios_distribution.csr \
-subj "/emailAddress=you@example.com/CN=Example Inc/C=US"
# 2. Upload ios_distribution.csr in the Apple Developer portal,
# download the certificate as distribution.cer
# 3. Convert the .cer (DER) to PEM
openssl x509 -in distribution.cer -inform DER -out distribution.pem -outform PEM
# 4. Build the .p12 (signing identity)
openssl pkcs12 -export -inkey ios_distribution.key -in distribution.pem \
-out ios_distribution.p12 -legacy
The -legacy フラグが重要です。これがないと、 .p12 が使用する暗号化アルゴリズムがmacOSのキーチェーンツールで拒否され、パスワードが正しくても「invalid password」エラーが発生します。
OpenSSLをインストールしたくない場合は、 iOS証明書ジェネレーター がCSRと秘密鍵を自動生成します。これらは、データを保存しないステートレスな Capgo エンドポイントから提供され、その .cer へ .p12 コンバーターは完全にブラウザ内で動作します。ポリシー上、キーを自分のマシンで生成する必要がある場合は、上記のOpenSSLコマンドを使用してください。
プロファイルの作成
- Identifiers > +: 使用するbundle IDを正確に指定してApp IDを登録し、使用する機能(Push Notifications、Sign in with Apple、Associated Domainsなど)を有効にします。
- Devices > +: 開発用およびad hocプロファイルの場合は、各テスターのUDIDを登録します。テスターは端末上で以下の iOS UDID finderを使用して、MacやケーブルなしでUDIDを取得できます。
- Profiles > +: プロファイルの種類、App ID、証明書、デバイスを選択します。名前は分かりやすく付けてください(例:
com.example.app AppStore 2026. - ダウンロード:
.mobileprovisionファイル。
後からデバイスや機能を追加した場合は、プロファイルを再生成して再度ダウンロードする必要があります。既存のプロファイルは自動的には更新されません。
プロファイルの検証
A .mobileprovision ファイルは署名済みのplistです。macOSでは以下で読み取れます:
security cms -D -i App_Store.mobileprovision > profile.plist
/usr/libexec/PlistBuddy -c "Print :Name" profile.plist
/usr/libexec/PlistBuddy -c "Print :ExpirationDate" profile.plist
/usr/libexec/PlistBuddy -c "Print :Entitlements" profile.plist
/usr/libexec/PlistBuddy -c "Print :ProvisionedDevices" profile.plist
Linuxでは、 openssl smime -inform der -verify -noverify -in App_Store.mobileprovision がplistを表示します。
ビルドされたものが何で .ipa 署名されているかを確認するには:
unzip -q App.ipa -d ipa
codesign -dvv ipa/Payload/App.app
codesign -d --entitlements :- ipa/Payload/App.app
有効期限と更新
- 証明書 は作成から1年間有効です。
- プロビジョニングプロファイル 1年で期限切れになります。また、含まれる証明書の期限が切れたり失効したりした場合も、それより早く期限切れとなります。
- App Storeのアプリは動作し続けます 配布用証明書の期限が切れても、AppleがApp Storeのダウンロード分を再署名するためです。新しいビルドをアップロードする際にのみ、新しい証明書が必要になります。
- Ad Hocおよび開発用ビルドは起動できなくなります プロファイルの期限が切れると、テスターはアプリの起動時にクラッシュを確認することになります。
- TestFlightのビルドは 証明書の期限に関わらず、アップロードから90日で期限切れになります。
- Enterpriseアプリは動作しなくなります Enterprise証明書の期限が切れるか失効すると、すべてのデバイスで利用できなくなります。期限が切れる前に更新してください。
- デバイススロット メンバーシップの更新年に1回リセットされます。デバイスを削除しても、次のメンバーシップ年度が始まるまでスロットは解放されません。
証明書の有効期限を共有カレンダーに登録しておきましょう。当社の 証明書管理ガイドでは 監視やローテーションについて詳しく解説しています。
よくあるエラーと解決策
「iOS Distribution」の署名証明書が見つかりません または 「Signing certificate is invalid」: プライベートキーがこのキーチェーンにありません。キーを .p12インポートするか、誰もキーを持っていない場合は新しい証明書を作成してください。
「Provisioning profile に署名用証明書が含まれていません」: プロファイルが別の証明書で作成されています。ポータルでプロファイルを編集し、現在の証明書にチェックを入れて、再生成してダウンロードしてください。
「Provisioning profile に現在選択されているデバイスが含まれていません」: UDIDを登録してから、プロファイルを再生成してください。TestFlightやApp Storeでは不要です。
「Provisioning profile が Push Notifications の capability をサポートしていません」: App IDでCapabilityを有効にし、プロファイルを再生成してください。プロファイルはスナップショットです。
「この実行ファイルに対応する有効なプロビジョニングプロファイルが見つかりませんでした」 インストール時:デバイスがad hocプロファイルに含まれていないか、プロファイルが期限切れです。
アプリをインストールするとすぐに終了してしまう: iOS 16以降では、開発用およびad hocビルドにデバイスの「デベロッパモード」が必要です。詳細は iOSでデベロッパモードを有効にする方法.
Extensionの署名に失敗する: 各Extensionターゲットに独自のApp IDとプロファイルが必要です。Appだけでなく、Signing & Capabilities内のすべてのターゲットを確認してください。
Linuxで作成した.p12をインポートする際に“Invalid password”と表示される: 次のコマンドで再ビルドしてください: openssl pkcs12 -export ... -legacy.
SDK バージョンのアップロードが拒否されました: 2026年4月より、App Store ConnectではXcode 26およびiOS 26 SDK で作成されたビルドが必須となります。XcodeまたはCIイメージを更新してください。Capacitor 8では、すでにXcode 26が必要です。
チーム向けのベストプラクティス
- チームごとに1つのApple Distribution証明書を用意し、
.p12パスワードマネージャーやシークレットストアに保存してください。パスワードは別途管理します。 - 絶対にメールで
.p12ファイルを送ったり、gitにコミットしたりしないでください。 - アップロードにはApple IDのパスワードではなく、App Store Connect API キー(
.p8)を使用してください。 - プロファイル名は、bundle ID、タイプ、年度を含めて命名してください。
- チームを離れるメンバーの証明書は失効(Revoke)させてください。
- アプリが使用するすべてのbundle ID、extension、capabilityのリストを文書化して保持してください。
Capacitor アプリのクラウド署名
iOSビルドをリリースするために、全開発者のデスクにMacを用意する必要はありません。 Capgo Build Capgo のmacOSマシンを使用して Capacitor アプリをビルドし、 .p12 提供されたプロファイルと証明書を使用します。認証情報はビルドにのみ使用され、Capgo のサーバーには保存されません。CLI から一度保存してください:
bunx @capgo/cli@latest build credentials save --appId com.example.app --platform ios
bunx @capgo/cli@latest build request com.example.app --platform ios --path .
以下の Capgo Build iOS ドキュメント には、TestFlightへのアップロード用 App Store Connect API キーや、 ad_hoc テスター向けビルド用のモードなど、正確な認証情報のオプションが記載されています。
最初のビルドが TestFlight に入れば、修正のたびにバイナリを再署名することなく、 Capgo の Live Update で JavaScript やアセットの変更をユーザーに配信できます。ただし、Native code の変更や新しい機能の追加には、引き続きストア経由の署名済みビルドが必要です。
次のステップ
- 先にアカウントが必要ですか? AppleとGoogle Playの開発者アカウント作成方法.
- テスターにビルドを配布する準備はできましたか? iOSとAndroidアプリをテスターに配布する方法.
- 申請を行う前に、こちらの iOSアプリ申請ガイドを読んでください.