これまで macOS と Xcode では問題なくビルドできていた iOS アプリを、Windows の Visual Studio から Hot Restart で実機デプロイしようとしたら「signing key not found in keychain」で止まる——この状況は、署名資産の所在と「秘密鍵の有無」が揃っていないのが原因です。本記事では、根本原因の仕組みから、Mac/Windowsそれぞれでの恒久対処、再発防止の運用まで、実務でそのまま使える手順とチェックリストを網羅します。
問題の概要
Windows PC(.NET 最新版/Visual Studio 2022 17.14.2 Preview 1.0)から Hot Restart で iOS アプリをビルド・配布しようとすると、次のエラーで失敗します。
signing key not found in keychain
同じプロジェクトを Mac の Xcode ではビルドできるため、開発者証明書やプロビジョニングプロファイル自体は存在していると考えられます。しかし 「証明書に対になる秘密鍵が、Hot Restart が参照する格納場所に無い」 状態だと、このエラーが発生します。
結論(先に要点)
- 秘密鍵付きの証明書(.p12) を用意し、Hot Restart が参照するストアへインポートします。
- Windows 単体で Hot Restart を使う場合は、Windows の「現在のユーザー > 個人(My)」証明書ストアにインポートします。
- Mac を併用(リモートビルド/Pair to Mac 等)している場合は、Mac の「login(ログイン)」キーチェーン > マイ証明書に秘密鍵つきで存在させます。
- Visual Studio の iOS / Bundle Signing を Manual にし、Signing Identity / Provisioning Profile を明示的に一致させます。
- ケーブルの抜き差しで一時的に直るのはデバイス接続の再確立に過ぎません。根本は「秘密鍵の所在・権限・一致」を恒久的に整えることです。
なぜ「keychain」が見つからないのか(根本原因の仕組み)
Apple のコード署名は以下の 3 つの資産が正しく揃うことで成立します。
- 証明書(Apple Development / Apple Distribution など) … 公開鍵を含む。
(旧称:iOS Development / iOS Distribution) - 秘密鍵 … 証明書とペア。これが無いと署名できない。
- プロビジョニングプロファイル(.mobileprovision) … App ID・Team・証明書・デバイス UDID の組合せ。
Hot Restart/iOS ビルド時は、上記のうち秘密鍵が その環境が参照する保管庫 に存在する必要があります。エラーメッセージは「keychain」と言っていますが、意味合いとしては「署名に使える秘密鍵の在処に見つからない」ということです。Windows 単体での Hot Restart でも、実体は Windows 証明書ストアを見ています。Mac を併用する構成では macOS の login キーチェーンを参照します。
資産と保管場所の対応表
| 資産 | 役割 | Windows(Hot Restart 単体) | Mac 併用(リモートビルド等) |
|---|---|---|---|
| 証明書(Apple Development / Distribution) | 公開鍵 | 証明書ストア: 現在のユーザー > 個人(My) | キーチェーンアクセス: login > マイ証明書 |
| 秘密鍵(証明書の下に表示) | 署名本体 | 同じストア内で「秘密鍵に対応」と表示される必要あり | 同じ場所で「鍵」アイコンが証明書の下に表示される必要あり |
| プロビジョニングプロファイル | App ID / Team / 証明書 / UDID の束 | Visual Studio の Apple アカウント管理から取得・配置 | キーチェーンではなくユーザーディレクトリに保持(Xcode/VS が参照) |
恒久対処の手順(A/B どちらか、または両方)
ご自身の開発フローに合わせて、A:Windows 単体の Hot Restart、B:Mac 併用(リモートビルド等)の順で整備します。両方を行えば、構成を切り替えても再発しません。
Step 0:前提チェック(共通)
- Apple Developer Program 有効(チーム・権限が正しい)。
- 対象 iPhone/iPad は「開発者モード」有効・接続を「信頼」済み。
- .NET SDK/Visual Studio 2022 は最新、iOS ワークロードが導入済み。
- Windows に Apple デバイスドライバ(Apple Mobile Device Service 等)が正常稼働。
- App ID、Bundle Identifier、Entitlements はプロファイルと一致。
Step A-1:秘密鍵つきで .p12 を用意する(Mac または Windows)
- すでに Mac のキーチェーンに秘密鍵がある場合:
- キーチェーンアクセスを開く → login → マイ証明書。
- Apple Development または Apple Distribution を展開し、下に鍵アイコン(秘密鍵)があることを確認。
- 該当証明書を右クリック → 書き出す… → 形式は .p12。任意のパスワードを設定。
- 秘密鍵がどこにも無い(紛失)の場合:
- Mac のキーチェーンアクセスで CSR を新規作成(キーチェーンアクセス > 証明書アシスタント)。
- CSR で Apple Development(または Distribution)証明書を新規発行。
- ダウンロードした .cer を ダブルクリックで取り込み、秘密鍵が対になっていることを確認。
- あらためて .p12 として書き出す。
- 注意:証明書を作り直した場合、関連するプロビジョニングプロファイルを再生成/再取得します。
Step A-2:Windows の証明書ストアへインポート(Hot Restart 単体の場合)
- Win + R →
certmgr.mscを実行。 - 個人(Personal) > 証明書を選択し、右クリック → すべてのタスク > インポート。
- 拡張子 .p12 を選んで取り込み、秘密鍵のエクスポートを可能にするにチェック(必要に応じて)。
- 取り込み後、該当証明書をダブルクリックし、「秘密キーに対応しています」と表示されることを確認。
- コマンドでも確認可能:
certutil -store -user My
Step A-3:Visual Studio の Apple アカウントとプロファイルを同期
- Visual Studio → Tools > Options > Apple Accounts を開く。
- Apple ID または App Store Connect API Key を追加/サインイン。
- Manage Certificates / Provisioning Profiles から対象 Team を選び、最新のプロファイルを取得。
- プロジェクトのプロパティ → iOS > Bundle Signing を開く。
- Provisioning:Manual
- Signing Identity:インポートした Apple Development(または Distribution)
- Provisioning Profile:Bundle ID / Team が一致するもの
Step A-4:実機にデプロイ(Hot Restart)
- デバッグターゲット:iOS Local Devices(デバイス名が表示される)を選択。
- 一度 Clean → Rebuild。
過去の中間生成物が邪魔する場合はbin/obj/を削除。 - デバイスで開発者モードが有効・「信頼」が済んでいるかを確認。
Step B-1:Mac の login キーチェーンにインポート(併用構成の場合)
- .p12 を Mac にコピーし、ダブルクリックで login キーチェーンへ追加。
- キーチェーンアクセスで マイ証明書に、証明書+秘密鍵が並んでいることを確認。
- 鍵アイコンがグレーの場合は、キーチェーンがロックされている可能性。アイテムをダブルクリック → アクセス制御で 常に許可に設定。
- 必要に応じてキーチェーンを解錠:
security unlock-keychain -p <loginのパスワード> ~/Library/Keychains/login.keychain-db
Step B-2:Visual Studio で Mac をペアリング/署名を指定
- Visual Studio の Pair to Mac でビルドホストに接続。
- プロジェクトの iOS > Bundle Signing で、Manual を選び、Mac 側に存在する証明書を選択。
- 該当プロビジョニングプロファイルを選択。
- 再ビルドしてデプロイ。
一時しのぎ(ケーブル抜き差し)で直る理由と限界
USB の抜き差し・デバイス再起動で暫定的に成功するのは、デバイス接続(AMDS/usbmuxd)の再確立により、別のキャッシュ状態でビルドが流れるためです。署名資産が揃っていない限り、いずれ再発します。恒久対応は「秘密鍵つき証明書の所在と権限を正す」ことに尽きます。
症状別・即効トラブルシュート早見表
| 症状・ログ | 想定原因 | 対処 | 優先度 |
|---|---|---|---|
signing key not found in keychain | 秘密鍵が対象ストアに無い/権限不足 | .p12 を秘密鍵つきでインポート。ストアは Windows: Current User\My、Mac: login | 最優先 |
| 同名証明書が複数 | 誤った証明書を選択 | 不要分を削除し、VS の Bundle Signing を Manual で明示 | 高 |
| プロファイル不一致 | Bundle ID / Team / Cert がズレ | プロファイル再取得(Device UDID も含める) | 高 |
| キーチェーンがロック | codesign が鍵を開けない | login を解錠・アクセス制御「常に許可」 | 中 |
| デバイスにインストールされない | UDID がプロファイルに無い/接続不調 | UDID 登録→プロファイル再生成、AMDS/usbmuxd 再起動 | 中 |
再発防止のベストプラクティス
- 証明書+秘密鍵は常にペアで管理(移行時は必ず .p12)。
- 更新期限(1〜3年)をカレンダー管理。更新後はプロファイル再発行を忘れない。
- Team が複数ある場合、VS とプロファイルの Team ID を明示的に合わせる。
- キーチェーンはログイン時に自動解錠、codesign のアクセス制御は「常に許可」を基本に。
- Hot Restart/Mac 併用の両構成で鍵を整備(どちらでも動く状態にする)。
- p12 の保管は秘密情報ストレージ(パスワード付き)に限定し、配布は最小限のメンバーに。
実務で使える手順の詳細(ハマりポイント解説)
Windows 側の「正しい置き場所」
Visual Studio(Hot Restart)が参照するのは 現在のユーザー > 個人(My) ストアです。ローカル コンピュータ ストアに入れても VS が拾わないことがあります。
インポート後、証明書のプロパティに 「秘密キーに対応しています」 と出ているかを必ず確認します。
プロファイルの「一致条件」を確認
- Bundle Identifier がプロジェクトの Info / csproj と一致。
- デバッグなら Apple Development 証明書+Development プロファイルを使用。
- 実機デプロイする端末の UDID がプロファイルに含まれている。
Visual Studio の設定は Manual が確実
自動管理は便利ですが、環境が複雑だと間違った組み合わせを選びます。Manual を選び、Signing Identity と Provisioning Profile を手で一致させると、原因切り分けが早くなります。
Mac のキーチェーンで「鍵がグレー」のとき
login キーチェーンがロックされているか、codesign がアクセス権を持っていません。鍵の詳細で アクセス制御 → 常に許可 を付ける/login を解錠すると解決することが多いです。
CLI での健全性チェック(付録)
macOS
# 署名に使える ID 一覧
security find-identity -p codesigning -v
# login キーチェーンを明示的に解錠
security unlock-keychain -p ~/Library/Keychains/login.keychain-db
# 指定証明書の詳細(略)
security find-certificate -a -c "Apple Development" -Z
Windows
# 現在のユーザー > 個人 ストアの一覧
certutil -store -user My
# インポートウィザードは certmgr.msc から実行
チェックリスト(これだけで通る)
- .p12 は「秘密鍵を含む」状態で作成したか。
- Windows:現在のユーザー > 個人 にインポートしたか。
- Mac:login > マイ証明書 に証明書+秘密鍵がペアで見えるか。
- プロファイル:Bundle ID / Team / 証明書 / UDID が一致しているか。
- Visual Studio:Bundle Signing = Manual、Identity/Profile を手動選択したか。
- デバイス:開発者モード有効、接続を「信頼」済みか。
- それでもダメなら:Clean → Rebuild、USB ケーブル交換、AMDS(Windows)/usbmuxd(Mac)再起動。
よくある質問(FAQ)
Q:.cer(証明書)だけ持っています。これで足りますか?
A:足りません。署名には公開鍵だけでなく秘密鍵が必須です。秘密鍵が紐づいた環境(多くは作成した Mac)で .p12 に書き出して使ってください。秘密鍵を紛失した場合は、新たに CSR から証明書を再発行し、プロファイルも更新します。
Q:エラー文に「keychain」と出るのに、Windows 側の修正で直りました。なぜ?
A:エラーメッセージは概念として「鍵の保管庫」を指しており、Windows では証明書ストアがその役割を担います。Hot Restart の実行経路によっては抽象化された文言が表示されます。
Q:同名の証明書が複数あります。どれを使うべき?
A:有効期限が最新で、秘密鍵が対になっているものです。使わない古い証明書は削除し、Visual Studio の Manual 設定で明示的に選び、混同を防ぎましょう。
Q:ケーブルの抜き差しで直る/直らないを繰り返します。
A:接続レイヤの問題と署名レイヤの問題が混在している可能性があります。まずは本記事の手順で署名資産を健全化し、その上でケーブル・ポート・ドライバ(AMDS)を点検してください。
Q:Distribution 証明書でもデバッグできますか?
A:基本は Development 証明書+Development プロファイルでデバッグします。Distribution はストア配布や Ad Hoc 向けです。
運用テンプレート(チーム共有用)
以下の運用をドキュメント化し、チームで共有しておくと再発防止に効果的です。
- 資産の台帳:証明書の種類/有効期限/発行者/Team ID/保管場所(Windows/Mac)/担当者。
- 更新の手順書:CSR 作成 → 証明書発行 → .p12 化 → 各環境へ配布 → プロファイル更新 → VS 設定確認。
- 退職・端末入替の手順:不要な証明書を失効・削除、p12 の回収、パスワードの変更。
- 緊急時の対応:秘密鍵紛失時の再発行フロー、影響範囲、ロールバック手順。
ケーススタディ:よくある 3 パターンと解決の勘所
パターン1:Xcode では通るが、Windows の Hot Restart だけ失敗
- 原因:Windows の証明書ストアに 公開鍵のみ入り、秘密鍵が無い。
- 対応:Mac から .p12 を再書き出し → Windows の 現在のユーザー > 個人 にインポート → VS で Manual 指定。
パターン2:プロファイルを更新したら突然失敗
- 原因:新しいプロファイルが 別の証明書を参照している。
- 対応:VS の Apple Accounts でプロファイルを再取得し、Identity と Profile の組み合わせを見直す。
パターン3:複数チームに所属しており、どれで署名しているか不明
- 原因:Team の切替に伴って VS が別の資格情報を拾っている。
- 対応:VS で対象 Team を明示選択。プロファイル・証明書が同じ Team で揃っているか再確認。
まとめ
「signing key not found in keychain」は、見た目は複雑でも実体はシンプルです。秘密鍵つきの証明書(.p12)を、Hot Restart が参照する保管庫(Windows:現在のユーザー > 個人、Mac:login キーチェーン)に正しく配置し、Visual Studio の Bundle Signing を Manual で一致させれば、恒久的に解消できます。ケーブルの抜き差しは接続状態を良くするだけで根治にはなりません。この記事のチェックリストと運用テンプレートをチームで共有し、「常に秘密鍵が揃っている状態」を維持して、再発のない安定した iOS ビルド体制を作りましょう。

コメント