iOS code の署名には2つの要素があります。1つは 証明書 アプリをビルドしたのが誰かを証明し、 プロビジョニングプロファイル は、どのアプリか、どのデバイスで実行できるか、どのケイパビリティを使えるかを定義します。証明書、その秘密鍵、対応するプロファイルがすべて揃っていない限り、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 | 公開鍵を含む証明書署名要求 | .certSigningRequest / .csr |
一時的 |
| 証明書 | チームに紐付くApple署名済み公開鍵 | .cer |
Appleが発行し、あなたがダウンロード |
| 署名ID | 証明書と秘密鍵のセット | .p12 エクスポート時 |
お客様 |
| App ID | Bundle Identifierと有効なCapabilityの組み合わせ | Developer Portal上のレコード | チーム |
| デバイス | 登録済みの iPhone または iPad の UDID | Developer Portal上のレコード | チーム |
| プロビジョニングプロファイル | App ID、許可された証明書、デバイス、エンタイトルメントをまとめたもの | .mobileprovision |
チーム |
最もよくある誤解: .cer ファイルは単体では役に立ちません。署名には、CSR を作成した秘密鍵が必要です。その鍵を失った場合は、新しい証明書を作成してください。
証明書の種類
Appleの開発用証明書
開発中に Xcode から自分のデバイスでビルドを実行するために使用します。開発証明書は個人開発者に属し、Apple はコンピュータ名でラベル付けします。チームの各開発者がそれぞれ自分のものを持てます。
Apple Distribution
Ad Hoc 配布、TestFlight、App Store 向けのビルドに署名するために使用します。配布証明書はチームに属し、Account Holder または Admin ロールのみが作成できます。Apple はチームが保持できる数に制限を設けているため、各開発者が個別に作成するのではなく、セキュアストア経由で 1 つを共有してください。
まだ見かけることがあります 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 加盟店アイデンティティ, Pass Type ID, Webサイト 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と一致すること。 - 署名に使用される証明書が、プロファイルにリストされた証明書の1つであること。
- その証明書の秘密鍵がキーチェーンに存在すること。
- 開発ビルドやad hocビルドの場合、デバイスのUDIDがプロファイルに含まれていること。
- エンタイトルメントファイル(プッシュ、関連ドメイン、App Groupsなど)が、App IDとプロファイルが許可する範囲のサブセットであること。
これらのチェックのいずれか1つでも失敗すると、ランタイムクラッシュではなく署名エラーが発生します。これは良いことで、リリース前に問題が発見できるからです。
どの組み合わせが必要ですか?
| ゴール | 証明書 | プロファイル | デバイスの登録 |
|---|---|---|---|
| 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非公開) | エンタープライズ | 社内配布用 | いいえ |
TestFlightでは、 同じ App Storeと同じ署名を使用します。TestFlight専用のプロファイルはありません。1つのビルドをアップロードし、App Store Connectでテスターに配布するか、審査に提出するか、その両方かを決めます。
証明書とプロファイルの作成
オプション1:Xcodeに署名を任せる
ローカル開発ではこれが最も簡単です。開く ios/App/App.xcworkspace (または .xcodeproj Capacitor 8 プロジェクトで Swift Package Manager を使っている場合は、 アプリ ターゲットを選択し、 Signing & Capabilitiesを開き、 署名管理を自動化 にチェックを入れ、チームを選択します。Xcode が開発用証明書を作成し、接続されているデバイスを登録して、プロファイルを生成します。
CI では、ビルドマシンがチームアカウントにアクセスし、自分で証明書を作成する必要があるため、自動署名は厄介になります。リリースビルドでは、多くのチームが手動署名に切り替えるか、API のキーによる署名に対応したビルドサービスを利用しています。
オプション 2: Mac で手動で作成する
- 開く キーチェーンアクセス > 証明書アシスタント > 認証局に証明書を要求。メールアドレスを入力し、次を選択します: ディスクに保存しました。これにより、キーチェーンに秘密鍵が作成され、
.certSigningRequestファイル。 - Apple Developer ポータルで、以下に移動します: 証明書、識別子 & プロファイル > 証明書 > +を選択し、 Apple Distribution (または Apple Development)を選択し、CSR をアップロードします。
- ダウンロード
.cerをダブルクリックします。Keychain Access が秘密鍵とペアリングします。 - CI用にエクスポートするには、Keychain Access の 自分の証明書で証明書をクリックし、 書き出すを選択して、
.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
この -legacy OpenSSL 3 ではフラグが重要です。指定しないと、 .p12 macOS のキーチェーンツールが「無効なパスワード」として拒否する暗号化アルゴリズムを使用します(パスワードが正しくても)。
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 検索ツール、Macやケーブルは不要です。
- Profiles > +: プロファイルの種類、App ID、証明書、デバイスを選択します。分かりやすい名前を付けてください(例:
com.example.app AppStore 2026. - ダウンロード
.mobileprovisionファイル。
後からデバイスやCapabilityを追加した場合は、プロファイルを再生成して再ダウンロードする必要があります。既存のプロファイルは自動更新されません。
プロファイルの確認方法
ある .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’ が見つかりません」 または 「署名証明書が無効です」:秘密鍵がこのキーチェーンにありません。 .p12 をインポートするか、誰も鍵を持っていない場合は新しい証明書を作成してください。
「プロビジョニングプロファイルに署名用証明書が含まれていません」:プロファイルが別の証明書で作成されています。ポータルでプロファイルを編集し、現在の証明書にチェックを入れて、再生成してダウンロードしてください。
「プロビジョニングプロファイルに現在選択されているデバイスが含まれていません」:UDIDを登録してからプロファイルを再生成してください。TestFlightやApp Storeには不要です。
「プロビジョニングプロファイルがプッシュ通知機能に対応していません」:App IDで機能を有効にしてからプロファイルを再生成してください。プロファイルはスナップショットです。
「この実行可能ファイルに有効なプロビジョニングプロファイルが見つかりません」 インストール時: デバイスが ad hoc プロファイルに含まれていないか、プロファイルの有効期限が切れている。
アプリをインストールするとすぐに閉じる: iOS 16 以降では、開発ビルドおよび ad hoc ビルドにはデバイス上で Developer Mode を有効にする必要があります。詳細は iOSでデベロッパモードを有効にする方法を.
Extension の署名に失敗する: 各 Extension ターゲットには独自の App ID とプロファイルが必要です。App だけでなく、Signing & Capabilities ですべてのターゲットを確認してください。
Linux で作成した .p12 をインポートする際に「無効なパスワード」と表示される: 以下で再ビルドしてください openssl pkcs12 -export ... -legacy.
SDK バージョンのアップロードが拒否されました: 2026年4月より、App Store ConnectではXcode 26およびiOS 26 SDK で作成されたビルドが必須となります。XcodeまたはCIイメージを更新してください。Capacitor 8 では既にXcode 26が必須です。
チーム向けのベストプラクティス
- チームごとにApple Distribution証明書を1つ、次の場所に保存します:
.p12パスワードマネージャーやシークレットストアに保存し、パスワードは別に管理してください。 - 絶対にメールで
.p12ファイルを送ったり、gitにコミットしたりしないでください。 - アップロードにはApp Store Connect API キー(
.p8)を使い、Apple IDのパスワードは使わないでください。 - プロファイル名は、bundle ID、タイプ、年を含めて命名してください。
- チームを離れるメンバーの証明書は失効(Revoke)させてください。
- アプリが使うbundle ID、extension、capabilityの一覧を文書で残しておいてください。
Capacitor アプリのクラウド署名
iOSビルドをリリースするために、開発者全員のデスクにMacを用意する必要はありません。 Capgo のビルド 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に入ったら、JavaScriptやアセットの変更をユーザーに配信できます Capgo Live Updates 修正のたびに新しいバイナリへ再署名する必要はありません。ただし、Native code の変更や新しい機能には、ストア経由の署名済みビルドが必要です。
次のステップ
- 先にアカウントが必要ですか? AppleとGoogle Playのデベロッパーアカウントの作成方法.
- テスターにビルドを渡す準備はできましたか? iOSとAndroidアプリをテスターに配布する方法.
- 提出しますか?こちらをお読みください: iOSアプリ提出ガイド.