Visual Studio 17.13 Preview で iOS アプリを配布設定(Apple Distribution)しようとしたとき、Apple Developer Portal には存在するはずの「配布用プロビジョニングプロファイル」が Visual Studio の一覧に表示されないことがあります。原因の切り分けと、権限・証明書・プロファイルを揃えて確実に表示させる方法を解説します。
現象の全体像:表示されない=Apple側に無い、ではない
Visual Studio の署名設定画面にプロビジョニングプロファイルが出てこない場合でも、Apple Developer Portal(Certificates, Identifiers & Profiles)にプロファイルが存在していることは珍しくありません。Visual Studio は「Apple側にあるプロファイル一覧」をそのまま表示しているわけではなく、ローカル環境(Windows / ペアリング先Mac)にある署名証明書や、プロジェクトの Bundle ID との整合性を見て、選択可能な候補だけに絞り込んで見せる挙動になることがあります。
そのため、原因は大きく次の2系統に分かれます。
- 権限・認証の問題:Visual Studio が Apple 側の情報(証明書・ID・プロファイル)へアクセスできず、一覧取得の時点で空になる
- ローカル環境の不足:Apple側にはあるが、対応する証明書(特に Apple Distribution)が Windows / Mac に無く、候補として表示されない
| 要素 | Apple側での役割 | Visual Studio側での扱い | 一致しないと起きやすいこと |
|---|---|---|---|
| Bundle ID(アプリ識別子) | App ID(Identifier)と一致している必要がある | プロジェクト設定(Info.plist や csproj)から参照 | 該当プロファイルが候補に出ない/ビルド後半で署名エラー |
| 署名証明書 | Apple Development / Apple Distribution など | Windowsの証明書ストア(またはMacのキーチェーン)から列挙 | 証明書が無いと、紐づくプロファイルが表示されないことがある |
| プロビジョニングプロファイル | App ID + 証明書 +(必要なら端末UDID)を束ねた設定 | Appleから取得、またはローカルに配置した .mobileprovision を読込 | プロファイル自体が読めない/キャッシュが更新されない |
切り分けチェック:配布用だけ空になる典型パターン
「Development(開発用)は見えるのに、Distribution(配布用)だけが空」という場合、発生しやすいパターンはだいたい決まっています。下の表で、最短ルートの確認順を作っておくと迷いません。
| チェック | 見る場所 | OKの目安 | NGならやること |
|---|---|---|---|
| Appleアカウントの権限 | App Store Connect の Users and Access | Account Holder で操作/または「Certificates, Identifiers & Profiles」へのアクセスがある | Account Holderでサインイン、もしくは権限付与 |
| APIキー連携の有無 | Visual Studio の Appleアカウント設定 | App Store Connect APIキー(Issuer ID / Key ID / p8)で登録できている | APIキーを新規発行し、VS側をAPIキーで再登録 |
| Apple Distribution 証明書(秘密鍵付き)の有無 | Windows証明書ストア / Macキーチェーン | Apple Distribution が「秘密鍵付き」で存在 | macOSから .p12 を書き出して Windows/Macへインポート |
| プロファイルに含まれる証明書が一致 | Apple Developer Portal の該当プロファイル詳細 | プロファイル生成時に選んだ Distribution 証明書が、手元にある証明書と同一 | プロファイルを編集して証明書を差し替え→再生成→再ダウンロード |
| Bundle ID の一致 | プロジェクト設定 / Apple側Identifier | 完全一致(配布ではワイルドカードで通らないケースが多い) | IdentifierとBundle IDを揃える、必要なら新規プロファイル作成 |
| Visual Studio のキャッシュ | %LOCALAPPDATA% 配下など | 再起動・再読み込みで一覧が更新される | プロファイルを置き直す/サインアウト→サインイン |
解決策:Account Holder でログインし、APIキー連携を使う
Visual Studio から Apple 側の情報を取得する際、サインインしているユーザーの権限が不足していると、証明書・ID・プロファイルにアクセスできず、結果としてプロビジョニングプロファイル一覧が空になることがあります。特に、App Store Connect のユーザーが「Admin」など強そうなロール名であっても、別途 「Certificates, Identifiers & Profiles(開発者リソース)」へのアクセスが無いと、開発者向けリソースに触れない設定になっているケースがあります。
いちばん確実で早いのは、Account Holder(アカウントホルダー) でサインインし直すことです。Individual(個人)アカウント運用でも、チームやユーザーの持ち方によって「普段使いのApple ID」と「アカウントホルダー」がズレていることがあるため、一度ここを疑う価値があります。
「Adminなのに取れない」が起こる理由を整理
Appleの権限は1つの画面だけで完結していません。少なくとも次の2つが絡みます。
- Apple Developer Program:証明書・Identifier・プロファイル(Certificates, Identifiers & Profiles)を管理する領域
- App Store Connect:アプリ提出・TestFlight・売上などを管理する領域(ユーザー権限の体系も別)
Visual Studio の連携は、結果として「Developer Program側のリソース取得」が必要になります。App Store Connectでのロールだけ見て「Adminだから大丈夫」と判断すると、開発者リソース権限の不足を見落としやすいのが落とし穴です。
| 確認ポイント | 場所 | 見るべき項目 | 補足 |
|---|---|---|---|
| サインインしているユーザーがAccount Holderか | App Store Connect(Users and Access) | ユーザー一覧でAccount Holder表示 | まずはAccount Holderで試すのが最短 |
| 開発者リソースへのアクセスが付与されているか | Users and Access のユーザー詳細 | Certificates, Identifiers & Profiles に関するアクセス権 | ロール名だけで判断しない |
| チーム(Team ID)が一致しているか | Apple Developer Portal / Visual Studio | 同じTeamで証明書・プロファイルを管理している | 複数Teamがあると別Teamの一覧を見てしまう |
APIキー連携が推奨される理由(Hot Restartを使わなくてもOK)
Visual Studio のドキュメントでは、Apple連携に App Store Connect の API キーを使う方法が案内されることがあります。ここで重要なのは、Hot Restart を実際に使うかどうかではなく、「APIキーで認証する経路が用意されている」という点です。Apple ID とパスワードに依存する連携よりも、APIキーの方が権限が明確で、Visual Studio 側の取得処理と相性が良い場面があります。
APIキー作成はAccount Holderで行うのが基本です。作成できたとしても、別ユーザーが作ったキーを使うと必要な範囲に届かない、ということが起き得ます。
App Store Connect APIキー作成で迷いがちな「Access」の考え方
APIキー発行画面の「Access(アクセス権)」は、そのキーで叩ける App Store Connect API の範囲を決めるものです。Visual Studio 側が必要とする範囲は環境により差が出ますが、少なくとも「最小権限」にこだわり過ぎて必要な取得ができなくなるより、まずは必要最小限で動作確認し、運用で絞る方がトラブルが減ります(組織ポリシーがある場合はそれに従ってください)。
| 項目 | どこで確認できる | 形式の目安 | 注意点 |
|---|---|---|---|
| Issuer ID | App Store Connect の Keys 画面 | ハイフン区切りのUUID | チーム(発行者)単位。コピーし間違えやすい |
| Key ID | 作成したAPIキーの詳細 | 英数字の短いID | 複数キーを作ると混ざるので名前付けが重要 |
| Private Key(.p8) | キー作成直後にダウンロード | AuthKey_XXXXXX.p8 | 一度しかダウンロードできない。厳重に保管 |
| Access | キー作成時に選択 | Admin / Developer など | 最小権限を意識しつつ、まずは取得できる範囲で検証 |
Visual Studio に APIキーで登録する手順
Visual Studio 側での画面名はバージョンや拡張(Xamarin / .NET MAUI)で細部が変わりますが、考え方は共通です。Appleアカウントの追加画面で「APIキーでのサインイン」を選び、Issuer ID・Key ID・.p8を正しく渡します。
- Visual Studio の Appleアカウント管理(iOS署名/アカウント)画面を開く
- 「追加」または「サインイン」から App Store Connect API キー方式を選択
- Issuer ID、Key ID を貼り付け、.p8 ファイルを指定して登録
- 登録後、対象プロジェクトの プロパティ → iOS → Bundle Signing を開いて一覧を確認
ポイント:ここで一覧が復活するなら、ほぼ権限・認証の問題です。反対に、認証が通っているのに配布用だけ出ない場合は、次の「証明書とプロファイルの手動インポート」を疑うと解決が早いです。
解決策:証明書(p12)+プロファイル(mobileprovision)を手動インポートする
Visual Studio が配布用プロファイルを表示できない原因として多いのが、対応する署名証明書がローカル(Windows / ペアリング先Mac)に存在しないケースです。配布用プロファイル(Apple Distribution系)は、プロファイル内部で「この証明書で署名してよい」という紐づけを持っています。Visual Studio は、その紐づけ先の証明書が見つからないと「選べない候補」とみなして一覧から外すことがあります。
この場合は、証明書(秘密鍵付き)を .p12 として用意し、Windows側へ取り込み、さらに .mobileprovision を所定フォルダに置くことで、一覧に出せる可能性が高まります。
手動インポート前の準備:どの証明書に紐づいているかを確認
- Apple Developer Portal で対象のプロビジョニングプロファイルを開く
- プロファイル詳細の「Certificates(証明書)」や「Certificate Details」で、紐づく Distribution 証明書を確認
- その証明書が macOS のキーチェーンに「秘密鍵付き」で存在するかチェック
| ここでの確認 | 見落とすと起きること | 判断のコツ |
|---|---|---|
| 証明書が「Apple Distribution」である | Development証明書を入れても配布用は出ない | Keychainで「Apple Distribution:」から始まるかを見る |
| 証明書に秘密鍵が付いている | 一覧に出ても署名できずビルドで失敗する | Keychain Accessで証明書の左に三角が出て展開できるか |
| プロファイルがその証明書を含む | 別証明書で作られたプロファイルは選べない/ビルド失敗 | Portalでプロファイルを編集し、対象証明書が選択されているか確認 |
macOS:Keychain Access から .p12 を書き出す
配布用証明書は、macOS で作成・管理していることが多いはずです。Windows側に取り込むには、秘密鍵を含めてエクスポートする必要があります。
- macOS で Keychain Access(キーチェーンアクセス) を開く
- 「ログイン」キーチェーンの My Certificates(または「証明書」)を開き、Apple Distribution を探す
- 対象の証明書(秘密鍵付き)を右クリックし、書き出し(Export)を選択
- ファイル形式は .p12 を選び、必ずパスワードを設定して保存
- 書き出した .p12 を Windows 環境へ安全に移動(社内規定がある場合はそれに従う)
注意:.cer だけを渡しても秘密鍵が含まれないため、署名に使えません。必ず .p12 で用意します。
Windows:.p12 を取り込み、署名証明書として認識させる
Visual Studio には「Import Certificate(証明書のインポート)」のような導線が用意されていることがあります。見当たらない場合でも、Windows の証明書管理で同じことができます。
- .p12 ファイルをダブルクリック、または Windows の証明書管理ツール(certmgr.msc)でインポートを開始
- 保存先は通常 現在のユーザー の「個人(Personal)」ストアを選択
- .p12 のパスワードを入力して取り込み
- インポート後、証明書一覧に Apple Distribution が表示されることを確認
確認ができたら、Visual Studio の プロパティ → iOS → Bundle Signing で Signing identity(署名証明書)の候補に出てくることがあります。
プロビジョニングプロファイル(.mobileprovision)を所定フォルダへ配置
次に、Apple Developer Portal から対象のプロビジョニングプロファイルをダウンロードします。ダウンロードしたファイルは通常「.mobileprovision」拡張子です。Visual Studio(Xamarin系)の場合、Windows側で以下フォルダに置くと一覧に反映されることがあります。
- %LOCALAPPDATA%\Xamarin\iOS\provisioning\
例:C:\Users\<ユーザー>\AppData\Local\Xamarin\iOS\provisioning\
| 配置場所 | 対象 | 役割 | よくあるミス |
|---|---|---|---|
| %LOCALAPPDATA%\Xamarin\iOS\provisioning\ | Windows(Visual Studio側の一覧表示) | .mobileprovision を読み込み、候補として列挙する | 拡張子が .txt になっている/別フォルダに置いている |
| ~/Library/MobileDevice/Provisioning Profiles/ | macOS(Xcode / リモートビルド) | Mac側での署名・ビルド時に参照される | Windowsだけ置いてMac側に無く、ビルドで失敗する |
反映のコツ:配置後に Visual Studio を再起動、またはプロジェクトを再読み込みすると一覧が更新されることがあります。表示されないときは、まずここを試してください。
Bundle Signing で「署名証明書」と「プロファイル」を正しく選ぶ
一覧に出てきたら、次は組み合わせを間違えないことが重要です。配布用プロファイルを選ぶときは、署名証明書も配布用(Apple Distribution)になっている必要があります。
| 目的 | Signing identity(例) | Provisioning profile(例) | 補足 |
|---|---|---|---|
| 実機デバッグ | Apple Development | iOS App Development | 端末UDIDは不要(通常) |
| TestFlight / App Store 提出 | Apple Distribution | App Store | 端末UDIDは含まれない |
| 社内配布(端末を登録して配布) | Apple Distribution | Ad Hoc | 配布対象端末のUDID登録が必要 |
プロファイルの中身を見て「一致しているか」を自分で確認する
「本当にこの .mobileprovision は合っているのか?」を自分で検証できるようになると、原因切り分けが一気に楽になります。.mobileprovision は中身が plist(設定情報)で、署名付きのため一見すると扱いづらいのですが、必要な項目だけなら確認は難しくありません。
macOSで .mobileprovision をデコードして確認する
Macのターミナルで次のように実行すると、プロファイルの内容を読みやすい形で表示できます。
security cms -D -i /path/to/profile.mobileprovision > profile.plist
生成された profile.plist をエディタで開くか、さらにコマンドで中身を確認します。
plutil -p profile.plist | head
どの項目を見ればよいか(最低限)
| 項目 | 意味 | ここがズレると起こりやすいこと |
|---|---|---|
| Name | プロファイル名 | 似た名前が多いと取り違える(ダウンロードし直しで別名になることも) |
| UUID | プロファイルの一意ID | Mac側の保存ファイル名(UUID.mobileprovision)と紐づく |
| TeamIdentifier | チームID | 別チームのプロファイルを見ていて一致しない |
| Entitlements:application-identifier | TeamID + Bundle ID の組み合わせ | Bundle ID 不一致で候補に出ない/署名エラー |
| ProvisionedDevices | 端末UDIDの一覧(Ad Hoc等で存在) | Ad Hocなのに端末が登録されていないとインストールできない |
| ExpirationDate | 有効期限 | 期限切れで突然ビルドできなくなる |
Visual Studio の一覧が空のときでも、プロファイル内の TeamIdentifier や application-identifier を見れば、「そもそも今のプロジェクトに合うプロファイルなのか」が判断できます。ここが合っているのに出ないなら、証明書(秘密鍵付き)の不足や権限・キャッシュが濃厚です。
追加の落とし穴:Bundle ID 不一致と「作り直すべきプロファイル」
証明書とプロファイルを入れても表示されない場合、次に疑うべきは Bundle ID の不一致です。配布用プロファイルは、App ID(Identifier)に紐づくため、アプリ側の識別子がズレていると候補に上がりません。
プロジェクト側のBundle IDを確認する
- .NET MAUI(iOS):csproj の <ApplicationId>、もしくはプラットフォーム別設定
- Xamarin.iOS:Info.plist の Bundle Identifier
ここで設定している値が、Apple Developer Portal の Identifier(App ID)と完全一致しているかを見ます。「com.example.*」のようなワイルドカードは、利用する機能(Push通知、Associated Domainsなど)によっては使えないため、配布を想定しているなら 明示的なBundle IDに寄せるのが安全です。
証明書を追加・更新したときはプロファイルを再生成する
Apple Distribution 証明書を新しく作り直した、あるいは期限切れで更新した場合、既存のプロファイルが古い証明書を参照し続けていることがあります。この状態では、手元にある証明書と一致せず、Visual Studio で選べない(またはビルドで失敗する)原因になります。
| 変更があったこと | 推奨アクション | 理由 |
|---|---|---|
| Distribution 証明書を作り直した | プロファイルを編集→新しい証明書にチェック→再生成→再ダウンロード | プロファイルは「許可する証明書」を内部に保持している |
| Bundle ID を変更した | Identifierの見直し、必要なら新規プロファイル作成 | 別App ID扱いになるため既存プロファイルは一致しない |
| Capabilities(機能)を追加した | App IDのCapabilities更新→プロファイル再生成 | Entitlementsが変わるとプロファイル側も更新が必要 |
一覧が更新されないとき:Visual Studio のキャッシュと再読み込み
証明書・プロファイルを入れ替えた直後は、Visual Studio のキャッシュの影響で一覧が空のままに見えることがあります。特に Preview ビルドでは、安定版よりもキャッシュ更新の癖が強いことがあります。以下を上から順に試すと、余計な作業を増やさずに復旧できる可能性が高いです。
- Visual Studio を完全終了して再起動(必要ならPC再起動)
- 対象プロジェクト/ソリューションを閉じて開き直す
- Appleアカウントからサインアウト→サインイン(APIキー方式で再登録)
- %LOCALAPPDATA%\Xamarin\iOS\provisioning\ に置いた .mobileprovision を一度退避し、置き直す
- 古いプロファイルが大量にある場合は、期限切れや不要なものを整理してから再確認
補足:Preview 固有の不具合が疑われる場合は、安定版の Visual Studio でも同様に一覧が出るかを確認すると切り分けが進みます。安定版では出るのに Preview だけ出ないなら、環境を壊す方向の対処(大量削除など)を先にやるより、バージョン起因として扱う方が安全です。
ペアリング先Macも要確認:Mac側に秘密鍵が無いとビルドが通らない
Visual Studio(Windows)から iOS をビルドする構成では、ペアリング先の Mac が実際のビルドと署名を担うケースが多いです。Windows側の一覧に表示できても、Mac側に証明書(秘密鍵付き)が無いと最終的な署名で失敗します。表示問題の解決とあわせて、Mac側の状態も最低限チェックしておくと手戻りを防げます。
Macで署名可能なidentityを確認する
ターミナルで次を実行し、Apple Distribution が列挙されるかを確認します。
security find-identity -v -p codesigning
プロビジョニングプロファイルの配置場所を確認する
Mac側では通常、次のフォルダに .mobileprovision(UUID名のファイル)が置かれます。
ls ~/Library/MobileDevice/Provisioning\ Profiles/
Xcode を使っている場合は、Xcode の Accounts からプロファイルをダウンロードすることで揃う場合もあります。Windows側だけ整えても、Mac側が空だとビルドで詰まるため注意してください。
よくある質問:配布用プロファイルが見えないときの疑問
実機デバッグできているのに、なぜ配布用プロファイルが必要?
実機デバッグは「Apple Development + 開発用プロファイル」で成立します。一方、TestFlight や App Store へ提出する IPA(またはアーカイブ)は「Apple Distribution + 配布用プロファイル」が基本です。つまり、ビルドの目的が変わると必要な署名セットも変わるため、デバッグできていても配布用が見えない問題は別軸で起こり得ます。
App Store用とAd Hoc用、どちらを作るべき?
「社内の限られた端末にインストールして動作確認したい」なら Ad Hoc、「TestFlight経由で配布したい/そのまま提出したい」なら App Store が基本です。Ad Hoc は端末UDIDの登録が必要なため、台数が増えると運用が大変になりがちです。迷う場合は、まず App Store 用(TestFlight前提)で整えると長期運用が楽です。
プロファイルを置いたのに一覧に出ない。ファイル名は重要?
多くのケースでファイル名自体は重要ではありません(中身の UUID などで識別されます)。ただし、拡張子が .mobileprovision になっていない、ブラウザが勝手に .txt を付けた、ダウンロード途中で壊れた、といった場合は読み込めません。まずは拡張子と保存場所を確認し、必要なら Portal からダウンロードし直すのが確実です。
運用のポイント:APIキーとp12を安全に扱う
一度動く状態を作れたら、次は「壊れにくい運用」に寄せると再発が減ります。特に APIキー(.p8)と証明書(.p12)は、漏洩するとリスクが大きいため、取り扱いルールを決めておくのがおすすめです。
- .p8 はリポジトリに入れない:Git管理対象外(.gitignore)にし、社内の秘密情報保管(パスワード管理ツール、Key Vault等)で管理
- .p12 は必ずパスワード付き:パスワード無しで配布・保管しない。共有するなら最小範囲で
- キー名・証明書名に用途を入れる:「VS-Release」「CI」「個人検証」など、後から見て混乱しない命名にする
- 期限管理:Distribution証明書・プロファイルの有効期限をカレンダー等で管理し、期限切れ前に更新する
最短で直すためのチェックリスト
最後に、今回の「配布用プロビジョニングプロファイルが表示されない」問題を、最短で潰すためのチェックリストをまとめます。上から順に潰すと、迷わず原因に当たりやすいです。
- Apple Developer Portal には対象プロファイルが存在する(前提確認)
- Visual Studio のサインインが Account Holder である、または開発者リソース権限がある
- App Store Connect の APIキー(Issuer ID / Key ID / .p8)で Visual Studio に登録できている
- Windows(またはMac)に Apple Distribution 証明書(秘密鍵付き)がある(.p12でインポート)
- .mobileprovision を %LOCALAPPDATA%\Xamarin\iOS\provisioning\ に置いた
- プロジェクトの Bundle ID が Apple側Identifierと一致している
- Visual Studio を再起動し、Bundle Signing で Apple Distribution + App Store/Ad Hoc の組み合わせを選べる
ここまで揃えても配布用だけ空のままなら、「プロファイルが別証明書で生成されている」「別Teamを見ている」「Preview特有の不具合」のいずれかである可能性が高いです。Portal側でプロファイルを一度編集して証明書チェックを入れ直し、再生成してから再ダウンロードすると、意外とあっさり表示されることがあります。

コメント