プロビジョニングプロファイルは、iOSアプリのコード署名のために開発者証明書、アプリアイデンティファ、および許可デバイスのリストを結びつけます。Apple Developer Documentation, 2026によれば、物理デバイスでアプリを実行するにはプロファイルが必要です—それがなければXcodeはiPhoneやiPadにビルドをインストールできません。この記事では、プロファイルの構造、種類、作成プロセスについて解説します。
まとめ
プロビジョニングプロファイルは、.mobileprovision(iOS用)または.provisionprofile(macOS用)形式のデジタル構成ファイルで、Appleがデバイスへのアプリインストールと実行を制御するために使用します。プロファイルにはコード署名メタデータが含まれており、これがなければ物理のiPhone、iPad、Apple Watchでアプリを実行できません—シミュレータはコードが実装プロセッサで実行されないため、プロファイルが不要です。
プロファイルはApple Developer Portalを通じて発行され、有効期限があります—通常DevelopmentおよびDistributionプロファイルで1年です。Appleのポリシーにより、プロファイルは署名に使用されたApple Developer Program証明書に自動的に結びつけられます: 証明書が取り消されたり有効期が切れたりすると、プロファイルは作動を停止します。
各プロファイルには固有のUUIDが含まれ、Xcodeがキーチェーン内でプロファイルを識別するために使用します。Xcodeはビルド中に適切なプロファイルを自動選択しますが、開発者はSigning & Capabilities設定で選択をオーバーライドできます。1つのデバイスには制限なく複数のプロファイルをインストールできます—Appleのモバイルデバイス管理(MDMIシステムはこれを企業用アプリ配信に使用します。
コード署名がプロファイル存在の主な理由です。AppleはiOSデバイスで実行するすべてのアプリに、Appleが発行した証明書で署名することを必須としています。プロビジョニングプロファイルはリンクとして機能します: 開発者がそのデバイスでアプリを実行する権利を持つことを確認します。Apple Security Guide (2025)によれば、プロファイル機構は、開発者証明書が悪用された場合でも、ユーザーデバイスへのマルウェアインストールを防止します。
プロファイルはまた、アプリが利用できるシステムサービスを決定します。アプリがPush通知を使用する場合、Apple Push Notification service (APNs)はプロファイル内に正しいentitlementsを必要とします。これがなければ、サーバーからの通知がデバイスに配信されません。同じルールがiCloud、App Groups、Wallet、HealthKit、その他のAppleフレームワークにも適用されます。
開発者はよくプロビジョニングプロファイルとApple証明書を混同します。証明書は身元を確認するデジタル文書であり(誰が署名するか)、プロファイルは構成であります(どのアプリが、どのデバイスで、どのパーミッションで)。1つの証明書を複数のプロファイルで使用でき、1つのプロファイルは証明書1つに結びつけられます。Appleは、アプリごとにまたはシナリオごと(Development、Ad Hoc、App Store)に別々のプロファイルを作成することを推奨しています。
アプリ署名プロセスはいくつかの順序ステップから構成されます。Xcodeはアプリバイナリ(App Bundle)を取り、開発者の秘密鍵で署名し、プロビジョニングプロファイルを埋め込み、デバイスに送信します。デバイスはAppleの公開鍵で署名を検証し、システム内の信頼されたプロファイルリストとプロファイルUUIDを比較し、すべての検証が成功した場合のみアプリを起動します。
ユーザーがApp Storeからアプリをダウンロードする場合、仕組みが異なります。App Store ConnectはApple自身のDistribution証明書でアプリを再署名し、開発者のプロファイルをStoreプロファイルに置き換えます。つまり、App Storeを通じて公開されたアプリは技術的には開発者ではなくAppleによって署名されています—ただし、App Store Connectへのビルドアップロード時には元の開発者署名が検証されます。
Ad Hoc配信の場合、プロファイルはアプリの実行が許可された特定のデバイスUDIDを登録します。フリーのApple Developer Programアカウントでは、テストは年間100デバイスまでに制限されます。エンタープライズプロファイル(組織内部配信用)にはデバイス制限がありませんが、活性化されたApple Developer Enterprise Programサブスクリプション(年額$299)が必要です。
プロビジョニングプロファイルの有効期間は作成から1年です。有効期満了30日前に、AppleはXcodeおよびDeveloper Portalを通じて開発者にpush通知を送信し始めます。プロファイルが期限切れになっても、すでにインストールされているアプリは続く実行できますが、そのプロファイルで新しいビルドをインストールすることはできません。Xcodeは期限切れのプロファイルでビルドしようとすると、コード-402620394のコード署名エラーを発生させます。AppleはXcode Accounts Preferencesで自動更新を設定することを推奨しています—するとXcodeが期限切れ24時間前にプロファイルを更新します。
Appleは4つの主なプロビジョニングプロファイルを提供しており、それぞれアプリライフサイクルの特定のステージに向けて設計されています。DevelopmentプロファイルはApple Developer Portalに追加された物理デバイスでアプリを実行でき、開発およびQAテストに使用されます。Developmentプロファイルの作成にはフリーのApple開発者アカウントで十分です。
Ad Hocプロファイルは、App Storeを使用せずに制限されたテスターグループにアプリを配信するように設計されています。プロファイルはUDIDで最大100のデバイスを登録し、アプリはiTunes、Apple Configurator、またはMDMソリューションを通じて直接インストールできます。Ad Hocビルドの有効期間は12か月で、Appleのレビューは不要です。
App StoreプロファイルはApp Storeへのアプリ公開のみに使用され、デバイスリストを含みません—ビルド承認後はApple自身が配信を管理します。App Store Connectにアーカイブをアップロードする際、XcodeはシステムにApp Storeプロファイルがインストールされていればそのプロファイルを自動使用します。EnterpriseプロファイルはApple Developer Enterprise Programを利用する組織向けで、デバイス制限やAppleのレビューなしで内部アプリ配信が可能です。
| プロファイル種類 | 目的 | デバイス | サブスクリプション価格 |
|---|---|---|---|
| Development | 開発およびテスト | 最大100 UDID | 無料 / 年額$99 |
| Ad Hoc | テスターへの配信 | 最大100 UDID | 年額$99 |
| App Store | App Store公開 | 任意(Appleを通じて) | 年額$99 |
| Enterprise | 内部配信 | 制限なし | 年額$299 |
プロビジョニングプロファイルはAppleによって署名されたDER形式のファイルで、その内容はコマンドラインで確認できます。macOSのSecurity frameworkは.mobileprovisionを読み取り可能なXML plistにデコードできます。プロファイル内には、プロファイルUUID、App ID(チーム接頭辞 + Bundle Identifier)、証明書リスト、許可デバイスのリスト(DevelopmentおよびAd Hocのみ)、entitlements、および有効期限が含まれています。
App IDは、Team ID(Appleが割り当てる10文字)とBundle Identifier(例: com.example.myapp)からなる固有のアプリ識別子です。App IDは明示的(Bundle Identifierと完全一致)またはwildcard(複数のアプリのためのパターン*.example.com)が可能です。AppleはPush通知やiCloudを使用するアプリではwildcardを推奨していません—これらのサービスには明示的App IDが必要だからです。
Entitlementsはプロファイル内のXMLブロックで、システムリソースへのアプリのアクセス権を定義します。一般的なentitlementsには: aps-environment(Push通知)、com.apple.developer.icloud-services(iCloud)、com.apple.security.application-groups(WidgetやShare ExtensionのApp Groups)があります。AppleはXcodeで有効になっているCapabilitiesに基づいて、プロファイルに自動的にentitlementsを追加します。プロファイル内のentitlementsとコードでリクエストされたentitlementsの間に不一致があると、署名エラーが発生します。
プロファイルの作成は2つの方法でできます: Apple Developer Portalのウェブインターフェイスを通じて、またはXcodeを通じて自動的に。一般的なプロジェクトでは、Automatically manage signingオプションが有効になっていればXcodeが自動的にプロファイルを管理します。XcodeはApple Developer Portalと同期しながら、数秒で証明書、プロファイル、App IDを作成します。しかし、CI/CDパイプラインでは手動管理が必要です。
Apple Developer Portalで手動でプロファイルを作成するには: Certificates, Identifiers & Profilesに進み、Profilesを選択し、"+"を押します。そしてプロファイルの種類(Development、Ad Hoc、App Store、Enterprise)を選択し、登録されたリストからApp IDを選択し、開発者証明書を選択し、(DevelopmentおよびAd Hocの場合)デバイスを選択します。作成後、プロファイルは.mobileprovision形式でダウンロードされ、Xcodeでダブルクリックするとインストールされます。
CI/CDサーバーには特別な対応が必要です: プロファイルと証明書は保護されたリポジトリ(例: GitHub Actions secrets)に保管する必要があります。ビルド中に、プロファイルがエージェントにロードされ、~/Library/MobileDevice/Provisioning Profilesフォルダに配置され、証明書がキーチェーンにインポートされます。Fastlane—署名自動化のための人気ツール—は、暗号化gitリポジトリを通じて開発者間でプロファイルと証明書を同期するmatchコマンドを提供しています。
コード署名の問題を診断するには、.mobileprovisionをデコードして内容を確認できます。以下のコマンドでプロファイルからXML plistを抽出し、可読形式で保存します:
# .mobileprovisionをXMLにデコード
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# プロファイルの有効期限を確認
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
Securityユーティリティは、macOS Command Line Toolsの一部で、CMS署名プロファイルファイルをデコードします。-Dフラグはデコードを意味し、-iは入力ファイルを指定します。デコード後、plistユーティリティがバイナリplistをXMLに変換し、grepが有効期限を抽出します。この方法はCI/CDで、リリースをビルドする前にプロファイルが期限切れていないことを確認するのに役立ちます。
最もよくあるエラーはXcodeでのビルド時の"No matching provisioning profiles found"です。これは、Xcodeがビルド構成に一致するプロファイルを見つけられない場合に発生します: Bundle IdentifierがプロファイルのApp IDと一致しない、証明書がキーチェーンにインストールされていない、またはプロファイルが期限切れである。解決策は、ターゲットのSigning & Capabilities設定を確認し、必要に応じてAutomatically manage signingに切り替えることです。
"Provisioning profile doesn't include the selected device"エラーは、UDIDがプロファイルに追加されていないデバイスでDevelopmentまたはAd Hocビルドを実行しようとすると発生します。Apple Developer Portalでは既存のプロファイルにデバイスを追加できます—追加後はプロファイルを再ダウンロードし、再インストールする必要があります。Xcodeは自動署名管理で、接続されたデバイスを自動的にプロファイルに追加します。
entitlementsの問題は、App Store Connectへのアップロード時に"The executable was signed with invalid entitlements"エラーとして現れます。原因は、プロファイル内のentitlementsとプロジェクトの.entitlementsファイルのentitlementsの不一致です。Appleは、プロファイル内の権利セットがアプリがリクエストする権利のスーパーセットであることを必須としています。解決策は、XcodeターゲットでCapabilitiesを確認し、すべての有効なサービスにプロファイル内で対応するentitlementsがあることを確認することです。Fastlaneは、現在のnetitlementsでApp IDとプロファイルを同期するproduceコマンドを含んでいます。
よくある質問
はい、プロファイル内のApp IDがcom.example.*のwildcard識別子を使用していれば可能です。ただし、wildcardプロファイルはPush通知、iCloud、Game Center、App Groupsをサポートしていません。Appleは、拡張Capabilitiesを使用する各アプリに対して別々の明示的プロファイルを作成することを推奨しています。
App Storeを通じてアップロードされたアプリは、開発者のプロファイルとは無関係なAppleのStoreプロファイルを使用します。ユーザーはアプリを続けてダウンロードおよび実行できます。期限切れのプロファイルは、App Store Connectへの新しいビルドのアップロードのみを防ぐだけです—Appleは送信時にDistributionプロファイルが有効であることを必須としています。
プロファイルは、新しいコンピューターの~/Library/MobileDevice/Provisioning Profilesフォルダにコピーできます。ただし、プロファイルはキーチェーン内の秘密鍵を持つ証明書に結びつけられています。Keychain Accessを通じて秘密鍵付き証明書をエクスポートし、新しいコンピューターにインポートする必要もあります。
コンピューター上のプロファイル数に制限はありません。プロファイルは~/Library/MobileDevice/Provisioning Profilesに保管され、UUIDで識別されます。XcodeはApp IDとビルドタイプに基づいて適切なプロファイルを自動選択します。管理を簡素化するために、Xcode Accounts Preferencesで使用していないプロファイルを削除することおすすめします。
署名証明書は開発者の身元を確認します—Appleが発行した暗号鍵です。プロビジョニングプロファイルは構成ファイルで、どのアプリ(App ID)がどの証明書でどのデバイスで実行できるかを指定します。プロファイルは常に特定の証明書を参照しますが、それを置き換えるものではありません。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。