プロビジョニングプロファイルとは、「どの開発者が署名した、どのアプリを、どの端末で動かしてよいか」をAppleが証明するファイルです。開発者の証明書・アプリのApp ID・許可する端末のUDIDを1つにまとめ、iOSでは拡張子.mobileprovisionで配られます。iPhoneの実機でアプリが動かない、配布したアプリが急に開かなくなる、といった署名まわりの不具合を切り分けるときは、このファイルの中身と期限、証明書の秘密鍵、端末側の設定を順に確かめます。
まとめ:プロビジョニングプロファイルの要点
- 中身:証明書・App ID・有効期限と、DevelopmentとAd Hocでは端末のUDID一覧。
security cms -D -iでローカルから読めます。 - 種類:Development/Ad Hoc/App Store/In-House(Enterprise)の4つ。UDID登録が要るのは前の2つで、上限は製品ファミリーごとに年100台です。
- 作成:証明書→App ID→端末登録→プロファイル生成→Xcodeへ取り込み。1人で開発するならXcodeの自動署名に任せて構いません。
- 期限:In-House配布用は発行から12か月。プロファイルが切れると、Ad HocとIn-Houseで配ったアプリは起動しなくなります。App Store公開分は影響を受けません。
- 保存先:Xcode 16から
~/Library/Developer/Xcode/UserData/Provisioning Profilesに変わりました。旧パスも引き続き読み込まれます。
以下、中身の読み方から順に説明します。
プロビジョニングプロファイルの中身|証明書・App ID・UDIDと有効期限
iOSは、Appleの認めた署名と許可条件がそろったアプリしか実機で実行しません(シミュレータでは検証されません)。プロファイルは許可条件の側を担い、次の情報を含みます。
- 証明書:署名してよい開発者(または組織)。Apple DevelopmentかApple Distributionのいずれか
- App ID:App ID Prefix(多くはTeam IDと同じ値)とBundle IDを連結した識別子
- Entitlements:プッシュ通知などのCapabilityのうち、そのアプリに許可する権限の一覧
- 端末のUDID:DevelopmentとAd Hocだけが持つ、インストールを許す端末の一覧
- 有効期限:
ExpirationDateとして埋め込まれた日時
security cmsで.mobileprovisionを読む手順
.mobileprovisionの正体は、plist(XML)をAppleの署名で包んだCMS形式のデータです。macOS標準のsecurityとplutilだけで、Apple Developerのサイトを開かずに中身を確認できます。profile.mobileprovisionは手元のファイル名に置き換えてください。3行目のProvisionedDevicesはDevelopmentとAd Hocにだけあり、App Store用とIn-House用では「キーが無い」というエラーになるのが正常です。
security cms -D -i profile.mobileprovision | plutil -extract Entitlements.application-identifier raw -o - -
security cms -D -i profile.mobileprovision | plutil -extract ExpirationDate raw -o - -
security cms -D -i profile.mobileprovision | plutil -extract ProvisionedDevices json -o - -
macOS 26.6.2で、同じ構造のplistをopensslでCMS署名した疑似ファイル(Appleが発行した実物ではありません)を読ませると、1行目はABCDE12345.com.example.myapp、2行目は2027-10-18T00:00:00Z、3行目はUDIDのJSON配列を返しました。AppleのTN3125によると、application-identifierは「App ID Prefix+Bundle ID」の形です。XcodeのBundle Identifierと比べるときは最初のドットより後ろを照合し、末尾が*のWildcardなら、その手前までが前方一致していれば対象に入ります。get-task-allowがtrueなら開発用(デバッガを接続できる)で、In-House用は端末一覧の代わりにProvisionsAllDevicesを持ちます。
証明書との役割分担|署名と許可は別物
証明書は「誰が署名したか」を示し、その秘密鍵でバイナリに署名します。プロファイルは「その署名をどの条件で受け入れるか」を決めます。証明書を作り直してもプロファイルが旧証明書を指したままならビルドは通らず、プロファイルを作り直しても秘密鍵がキーチェーンに無ければ署名できません。
「プロビジョニング」の別の意味|SIM・端末管理との区別
iPhoneやiPadの「プロビジョニング」には、ほかに2つの意味があります。1つは携帯回線で、「SIMはプロビジョニングされていません」といった表示は回線やSIMの側の問題を示すもので、アプリの署名とは関係がありません。もう1つは企業の端末管理で、MDMやApple Business Managerで業務用の設定やアプリを一括で入れる作業を指します。サーバーやアカウントを用意する一般的な意味はプロビジョニングとは?サーバー・ユーザー・クラウドの種類と自動化(IaC)の判断まで実装者向けに解説で扱っています。
4種類の違いと選び方|Development・Ad Hoc・App Store・In-House
種類によって、配れる相手とUDID登録の要否が変わります。
| 種類 | 配布先 | UDID登録 | 必要な契約 | 主な用途 |
|---|---|---|---|---|
| Development | 登録端末 | 必要 | 無料のApple IDでも可 | 開発・デバッグ |
| Ad Hoc | 登録端末 | 必要 | Developer Program | 少数の固定端末へ配布 |
| App Store | App Store・TestFlight | 不要 | Developer Program | 審査提出・ベータ配信 |
| In-House | 自社の従業員 | 不要 | Enterprise Program | 社内アプリ配布 |
UDIDの登録枠は、Apple Account HelpによるとiPhone・iPad・Apple Watchなどの製品ファミリーごとに、メンバーシップ年あたり100台です。年の途中で端末を無効にしても枠は戻らず、戻せるのは更新後の新しいメンバーシップ年の開始時だけです。
Ad HocとTestFlightの分かれ目|100台枠と再ビルドの手間
Ad Hocは端末を足すたびにプロファイルの再生成とIPAの作り直しが要ります。TestFlightならUDIDは不要で、App Store Connectのロールを持つチームメンバーを内部テスターとして100人まで、外部テスターを10,000人まで招待でき、1つのビルドを最長90日テストできます。外部テスター向けの最初のビルドはベータ版の審査が要ります。テスターが入れ替わるならTestFlight、顔ぶれが固定ならAd Hocが向きます。なおAppleの説明では、2021年6月6日より後に作られたメンバーシップの場合、開発署名とAd Hoc署名のアプリは初回起動時に端末がインターネットにつながっている必要があり、オフラインの展示機では注意が要ります。App Storeの審査を挟まずに社外のテスターへ配る手段としてはFirebase App Distributionもあり、その場合もiOSアプリはAd Hocのプロファイルで署名します(In-Houseで署名したアプリは自社の従業員にしか配れません)。
In-Houseを使える組織|従業員100人以上の法人
Apple Developer Enterprise Programは年299USDで、加入できるのは従業員100人以上の法人に限られます。配布できるのは自社の従業員向けアプリだけで、社外の顧客や一般ユーザーへ配るとプログラムの規約に反します。数十人規模なら、Ad HocかTestFlight、Apple Business Managerのカスタムアプリを先に検討します。
プロビジョニングプロファイルの作成手順|Apple Developerで5ステップ
Apple DeveloperのCertificates, Identifiers & Profilesで、次の順に作ります。プロファイルの作成にはAccount HolderかAdminの権限が要ります。
- 証明書:キーチェーンアクセスでCSRを作り、Certificatesの「+」からApple Development(配布時はApple Distribution)を発行してキーチェーンに入れる
- App ID:IdentifiersでBundle IDを登録し、使うCapabilityを有効にする
- 端末:DevicesでUDIDを登録する(DevelopmentとAd Hocのみ)
- プロファイル:Profilesの「+」で種類を選び、App ID・証明書・端末を指定して名前を付け、Generateする
- 取り込み:Xcodeの「Settings」→「Apple Accounts」でチームを選び、「Download Manual Profiles」を押す
App IDは、末尾を*にしたWildcardではなく、Bundle IDを1つに特定するExplicitで作ります。Wildcardではプッシュ通知などのCapabilityを有効にできません。
証明書の秘密鍵の書き出しと再発行の分かれ目
CSRを作った時点で、秘密鍵はそのMacのキーチェーンにだけ生成されます。証明書(.cer)は後からダウンロードできますが、秘密鍵はできないため、失えば証明書の再発行になります。別のMacでも署名するなら、証明書と秘密鍵を.p12として書き出し、パスワード付きで渡します。キーチェーンの「自分の証明書」で証明書の左に三角が出れば、秘密鍵はそろっています。
端末のUDID登録|追加したらプロファイルの再生成まで
UDIDは、Xcodeの「Window」→「Devices and Simulators」の「Identifier」で確認できます。テスターから受け取った値に空白や改行が混ざると登録に失敗します。端末を登録しただけでは既存のプロファイルに反映されないので、プロファイルを「Edit」で開いて新しい端末を選び、保存して取り込み直します。
無料のApple IDとデベロッパモード|7日で切れる開発用プロファイル
Developer Programに入っていないApple ID(Personal Team)でも、自分の端末では動かせます。ただしAppleの説明では、このとき発行されるプロファイルは7日で期限が切れ、App IDは10個までで、それぞれ7日で失効します。Ad Hoc・TestFlight・App Storeでの配布には年99USDのDeveloper Programが要ります。費用と登録の流れはApple Developer Programとは?年会費99ドル(アプリ経由12,800円)の中身・登録方法・ログイン先にまとめています。
もう1つの条件が端末側の設定です。WWDC22のセッションで案内されたとおり、iOS 16以降は開発署名のアプリをインストール・実行・デバッグするのにデベロッパモードが必要です。プロファイルが正しいのに起動しないときは、端末の「設定」→「プライバシーとセキュリティ」→「デベロッパモード」がオンかを確認します。
Xcodeの自動署名と手動署名|切り替える条件
「Automatically manage signing」をオンにすると、Xcodeが証明書の発行、接続した端末の登録、プロファイルの生成と更新を代行します。このとき作られるのは「Xcode Managed Profile」で、Apple Developerのプロファイル一覧には表示されません。Xcodeは条件を満たすプロファイルが手元に無いときだけ新しいものを取りに行くので、Capabilityの変更が反映されなければ手元のプロファイルを消してビルドし直します。
次のどれかに当てはまれば手動署名に切り替えます。
- CIで使う証明書とプロファイルを固定し、ビルドのたびに作り直されないようにしたい
- 複数人が同じチームで開発し、各自のMacでばらばらに証明書が発行されて困っている
- In-House配布をしている(自動署名では作り直してもプロファイルの期限が延びなかった、という報告がある)
- アプリ本体と拡張機能など、ターゲットごとに使うプロファイルを固定したい
手動署名では、Build SettingsのCODE_SIGN_IDENTITY(Developmentのプロファイルには「Apple Development」、Ad Hoc・App Store・In-Houseには「Apple Distribution」)、PROVISIONING_PROFILE_SPECIFIER(プロファイル名)、DEVELOPMENT_TEAM(Team ID)を指定します。古いプロジェクトに残る「iPhone Developer」「iPhone Distribution」(Xcode 11より前の名前)は書き換えます。
有効期限と更新|切れたときに止まるもの
AppleのPlatform Deploymentガイドは、In-Houseの配布用プロファイルを発行から12か月で失効すると明記しています。TN3125も、有効期間は種類によって異なり通常は1年以内と説明しています。実際の期限はファイル内のExpirationDateで確かめるのが確実です。期限切れの影響は種類で大きく違います。
| 種類 | プロファイルが期限切れになると |
|---|---|
| Development | ビルドと実機での起動ができない |
| Ad Hoc | 配布済みのアプリが起動しない |
| App Store | 公開中のアプリは影響を受けない |
| In-House | 配布済みのアプリが起動しない |
App Storeのアプリは審査後にAppleが署名し直すため、手元の証明書とプロファイルが有効である必要があるのは提出の時点だけです。
注意が要るのはIn-Houseです。配布証明書は発行から3年(Enterprise Programの会員期限が先ならそこまで)有効で、Revokeすると、端末がOCSPで失効を確認した時点で配布済みのアプリが起動しなくなります。期限を迎えただけの場合はPlatform Deploymentガイドが「影響しない」、Account Helpが「実行できなくなる」と書いており、記述が分かれます。期限前に新しい証明書で署名したアプリを配り終え、それまで古い証明書はRevokeしないでください。
プロファイルの再生成と古いファイルの入れ替え手順
Profilesで対象を「Edit」で開き、証明書と端末を最新にして保存すると作り直されます。Xcodeは手元の古いファイルを使い続けることがあるので、取り込む前に両方の保存先から古いファイルを消します。
ls ~/Library/Developer/Xcode/UserData/Provisioning\ Profiles/
ls ~/Library/MobileDevice/Provisioning\ Profiles/
Xcode 16のリリースノートによると、新しくダウンロードしたプロファイルは前者に保存され、旧パスのファイルも引き続き読み込まれます。Appleのヘルプにも旧パスだけを案内する箇所が残っているので、旧パスを空にしても古いプロファイルが使われるときは新パスを見てください。Ad HocやIn-Houseで配布中のアプリは、期限の数週間前に作り直したIPAを配り終えておきます。
頻発するエラーの原因と対処
- No matching provisioning profile found:Bundle IdentifierとApp IDの不一致か、期限切れで「Active」でないプロファイル。上の
security cmsでapplication-identifierを確認し、「Download Manual Profiles」で取り込み直します。 - A valid signing identity matching this profile could not be found in your keychain:プロファイルが指す証明書の秘密鍵がこのMacに無い状態。発行したMacから
.p12を書き出して読み込みます。 - The device is not included in the provisioning profile:端末のUDIDが未登録か、登録後にプロファイルを再生成していない状態。再生成したプロファイルでIPAを作り直します。
- Xcodeがプロファイルを認識しない:まず2つの保存先に該当のプロファイルがあるかを
security cmsで確かめ、古いものだけを消して「Download Manual Profiles」で取り込み直します。それでも直らないときに限り、Xcodeを終了してDerivedDataを消します(全プロジェクトのビルドキャッシュが消え、次回のビルドは時間がかかります)。
rm -rf ~/Library/Developer/Xcode/DerivedData
CI/CDとチームでの管理方法
複数人やCIで署名するなら、証明書とプロファイルを特定のMacに依存させない仕組みが要ります。
GitHub Actionsでの.p12と.mobileprovisionの配置
GitHubの公式手順は、証明書とプロファイルをBase64にしてSecretsへ入れ、ジョブ内で一時キーチェーンに読み込む方式です。次の抜粋はプロファイルの部分だけで、ステップのenvにBUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}を渡している前提です(証明書の読み込みは公式手順の全体を参照してください)。
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o "$PP_PATH"
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp "$PP_PATH" ~/Library/MobileDevice/Provisioning\ Profiles
この例は旧パスへコピーしていますが、Xcode 16以降も旧パスは読まれるので、このままで動きます。セルフホストのランナーではジョブ後にキーチェーンとプロファイルが残るため、削除する後処理を必ず入れます。fastlaneと組み合わせた構成はGitHub Actionsでfastlaneを動かすiOSリリース自動化|設定とCI固有エラー対処で詳しく扱っています。
App Store Connect APIキーによるxcodebuildの署名認証
Xcode 13から、xcodebuildはApple IDでサインインせずにApp Store Connect APIキーで認証できます。-allowProvisioningUpdatesを付ければ、CI上でも自動署名と同じようにプロファイルの取得・更新を任せられます。次の例は作成済みのアーカイブ(build/App.xcarchive)を書き出す段階で、配布方式を書いたExportOptions.plistと、キーのファイルパス・キーID・Issuer IDの3つの環境変数を用意してある前提です。
xcodebuild -exportArchive -archivePath build/App.xcarchive \
-exportOptionsPlist ExportOptions.plist -exportPath build \
-allowProvisioningUpdates \
-authenticationKeyPath "$ASC_KEY_PATH" \
-authenticationKeyID "$ASC_KEY_ID" \
-authenticationKeyIssuerID "$ASC_ISSUER_ID"
キーが漏れるとチームの証明書を操作されるので、CI専用のキーを作り、不要になったら失効させます。
fastlane matchによる証明書の共有とreadonly・nukeの扱い
fastlane matchは、証明書とプロファイルを暗号化してGit・Google Cloud Storage・Amazon S3・GitLab Secure Filesのいずれかに置き、チーム全員とCIで同じ1組を使う仕組みです。CIではfastlane match appstore --readonlyのように読み取り専用で実行し、新しい証明書を作らせないのが公式の推奨です。既存の証明書とプロファイルを一掃するfastlane match nukeは、対象環境の証明書をRevokeします。In-Houseのアプリを配っている環境でnukeを実行すると、配布済みのアプリが起動しなくなります。導入の全体像はfastlaneとは?iOS・Androidのビルドと配信を自動化する使い方【2.240対応】を参照してください。
署名の仕組みづくりから配布まで社内に知見が無い場合は、iOSアプリ開発の支援で証明書の運用設計から相談を受けています。
よくある質問
プロビジョニングファイルとプロビジョニングプロファイルは同じですか?
同じものです。正式名称はProvisioning Profileで、拡張子.mobileprovisionのファイルを指して「プロビジョニングファイル」と呼ぶことがあります。証明書(.cerや.p12)は別のファイルで、プロファイルはその証明書を参照する側です。
プロビジョニングプロファイルの保存場所はどこですか?
Xcode 16以降は~/Library/Developer/Xcode/UserData/Provisioning Profilesです。それより前は~/Library/MobileDevice/Provisioning Profilesで、Xcode 16以降もこちらを読み込むため、古いファイルを消すときは両方を確認します。
プロビジョニングプロファイルを更新するにはどうしますか?
Apple DeveloperのProfilesで対象を「Edit」から作り直し、手元の古いファイルを消してXcodeに取り込み直します。Ad Hocで配布中ならIPAを作り直して配り直します。In-Houseでは、Appleの配備ガイドが案内するとおり、デバイス管理サービスなどで新しいプロファイルだけを配って差し替える方法もあります。
iPhoneやiPadの「プロビジョニング」とは何ですか?
文脈で意味が変わります。アプリ開発ではこの記事のプロファイルを指します。「SIMはプロビジョニングされていません」のような表示は回線やSIMの側の問題で、アプリの署名とは関係がありません。企業で端末を配る場面では、MDMやApple Business Managerで業務用の設定を入れる作業を指します。
無料のApple IDでも実機で動かせますか?
動かせます。ただし発行されるプロファイルは7日で期限が切れるため、1週間ごとにXcodeからインストールし直すことになります。iOS 16以降の端末ではデベロッパモードも必要です。人に配るには、年99USDのApple Developer Programへの登録が要ります。