Visual Studio 17.14.8 更新後に .NET MAUI/iOS ビルドが失敗する「MSBuild was unable to connect to the Mac」の完全解決ガイド(17.14.10 での修正・再発防止策つき)

Visual Studio 17.14.8 へ更新後に発生する「MSBuild was unable to connect to the Mac」の原因と解決策(.NET MAUI/iOS)

Windows 側の Visual Studio を 17.14.8 に上げた直後から、.NET MAUI/iOS プロジェクトのビルドで “MSBuild was unable to connect to the Mac” が出て止まる ― 本記事は、この現象の背景と最短復旧手順、恒久対策までを実運用目線で体系化して解説します。
検索で辿り着いた方がすぐ対処できるよう、優先度別の解決テーブル → 詳細手順 → 原因の技術的背景 → 予防のベストプラクティスの順でまとめました。

目次

症状

  • Windows 側の Visual Studio を 17.14.8 に更新した直後から、.NET MAUI/iOS ビルドが失敗。
  • エラーは MSBuild の序盤(SayHello タスク)が走った直後に出る。
  • Pair to Mac 画面は Connected と表示されるが、ビルドでは切断扱いになる。
  • 17.14.7 以前では発生しない/発生が著しく減る。
<pre><code>error : MSBuild was unable to connect to the Mac with Address='&lt;MacのIP&gt;' and User='&lt;ユーザー名&gt;'.

This connection is separate from Visual Studio and without it the project can’t build. Please try building again or report this problem if the issue persists.

<p>MSBuild の出力には次のような文言が残ることが多いです(抜粋)。</p>
<pre><code>Executing SayHello Task to establish a connection to a Remote Server.

Properties: Address=, SshPort=22, User=<ユーザー名>, ContinueOnDisconnected=False …Xamarin.Messaging.Build.targets(113,3): error : MSBuild was unable to connect to the Mac…

<h2>クイックアンサー:まず何をすべきか</h2>
<p>最短で直すなら、<strong>Visual&nbsp;Studio を 17.14.10 以降</strong>に更新するのが最も確実です。組織の事情ですぐ挙げられない場合は、いったん <strong>17.14.7 へロールバック</strong>しつつ Mac 側のワークロードを Windows と<strong>バージョン整合</strong>させて回避します。</p>

<h3>優先度別・解決策サマリ</h3>
<table>
  <thead>
    <tr>
      <th>優先度</th>
      <th>解決策</th>
      <th>詳細</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>◎</strong></td>
      <td><strong>Visual&nbsp;Studio を 17.14.10 以降に更新</strong></td>
      <td>当該不具合は 17.14.10 系で修正が取り込まれており、<strong>VS Installer から最新安定(17.14.10+)または 17.15.x Preview</strong>へ更新するのが最短・確実。更新後は Mac 側の依存パックが自動同期されるため、再ペアリングなしでビルドが通るケースが多い。</td>
    </tr>
    <tr>
      <td><strong>○</strong></td>
      <td><strong>一時的に 17.14.7 へロールバック</strong></td>
      <td>業務都合ですぐ上げられないときの応急処置。<em>Visual Studio Installer → 他のバージョン</em>から <strong>17.14.7</strong> を選択。ロールバック後にビルドが復旧するかを確認。</td>
    </tr>
    <tr>
      <td><strong>△</strong></td>
      <td><strong>Mac 側 .NET/iOS ワークロード再同期</strong></td>
      <td>Windows 側 SDK が上がったのに合わせて、Mac 側の iOS/MAUI ワークロードも揃える。<br><code>sudo dotnet workload repair</code><br><code>sudo dotnet workload install maui-ios</code><br>(署名検証で詰まる場合は <code>DOTNET_CLI_WORKLOAD_SKIP_SIGN_CHECK=1</code> を一時的に付与して再試行)</td>
    </tr>
    <tr>
      <td><strong>△</strong></td>
      <td><strong>ペアリングキャッシュの削除 → 再ペアリング</strong></td>
      <td>キャッシュ破損/古いマニフェストの残骸で握手に失敗することがある。<ul>
          <li>Windows:<code>%LOCALAPPDATA%\Xamarin\iOS\XMA\</code> と <code>%TEMP%\XMA\</code> を削除</li>
          <li>Mac:<code>~/Library/Caches/Xamarin/XMA/</code> と <code>~/Library/Logs/Xamarin.Messaging-*</code> を削除</li>
        </ul>削除後に <em>Pair to Mac</em> をやり直す。</td>
    </tr>
    <tr>
      <td><strong>△</strong></td>
      <td><strong>Xcode/CLT の再設定</strong></td>
      <td>Mac に Xcode(例:16.x)が正しく入っており、Command Line Tools のパスが合っているかを再確認。<br>
        <code>sudo xcode-select --switch /Applications/Xcode.app</code><br>
        <code>sudo xcodebuild -runFirstLaunch</code><br>
        <code>sudo DevToolsSecurity -enable</code></td>
    </tr>
    <tr>
      <td><strong>△</strong></td>
      <td><strong>ネットワーク/FW の確認(SSH:22/TCP)</strong></td>
      <td>社内 VPN/FW/ゼロトラストエージェント等で <code>22/TCP</code> が閉じていると同様の症状に。<br>一時的にパスさせて <code>ssh &lt;user&gt;@&lt;mac-ip&gt;</code> で疎通を確認。</td>
    </tr>
    <tr>
      <td><strong>▲</strong></td>
      <td><strong>完全再インストール</strong></td>
      <td>最終手段。Mac の <em>.NET SDK</em> と <em>VisualStudio.MacAgent</em>、Windows の <em>Mobile development with .NET</em> ワークロードを一度外し、再インストール。<br>再ペアリング後にビルドを検証。</td>
    </tr>
  </tbody>
</table>

<h2>手順詳細(コピペで進められるチェックリスト)</h2>

<h3>1) Visual&nbsp;Studio を最新安定版へ(推奨)</h3>
<ol>
  <li><strong>Visual&nbsp;Studio Installer</strong> を開く。</li>
  <li><em>更新プログラム</em>が表示されていれば適用。表示されない場合は <em>その他のバージョン</em>から <strong>17.14.10 以上</strong>を選択。</li>
  <li>更新後、いったん VS を終了 → 再起動。<em>Pair to Mac</em> を開かずにそのままビルドして通るか確認(自動アップロードが効くため)。</li>
</ol>

<h3>2) 応急処置として 17.14.7 へロールバック</h3>
<ol>
  <li>Installer の <em>他のバージョン</em>を開き、<strong>17.14.7</strong> を選択。</li>
  <li>.NET&nbsp;MAUI ワークロード(<em>Mobile development with .NET</em>)にチェックがあることを確認してインストール。</li>
  <li>ビルドが復旧するか確認。復旧したら、後日かならず 17.14.10+ に再更新する計画を立てる。</li>
</ol>

<h3>3) Mac 側ワークロードの再同期</h3>
<p>Windows 側の VS 更新に伴ってワークロードの<strong>マニフェスト</strong>や<strong>パック</strong>の世代が上がると、Mac 側に展開されるビルドホスト資材と合わずに握手が破綻します。次のコマンドで Mac 側を整えます。</p>
<pre><code># Mac(管理者権限のシェル)

sudo dotnet –info sudo dotnet workload repair sudo dotnet workload install maui-ios # 署名検証が原因で止まる場合のみ、一時的に # DOTNET_CLI_WORKLOAD_SKIP_SIGN_CHECK=1 sudo -E dotnet workload install maui-ios # 全体更新 sudo dotnet workload update

補足:.NET 8.0.400 以降ではworkload setの概念が導入され、global.json"workloadVersion" を固定すると Windows/Mac 間の不一致を抑えられます。リポジトリ直下に以下の例を置くと、チーム全体で同じセットに固定できます。

{
"sdk": {
"version": "9.0.3xx",
"workloadVersion": "9.0.3xx"
}
}
<h3>4) ペアリングキャッシュの完全クリア → 再ペアリング</h3>
<p>古い接続情報やテンポラリが悪さをすることがあります。Windows/Mac の両方で次を削除してからやり直してください。</p>
<div class="grid">
  <div>
    <h4>Windows 側</h4>
    <ul>
      <li><code>%LOCALAPPDATA%\Xamarin\iOS\XMA\</code></li>
      <li><code>%TEMP%\XMA\</code></li>
      <li><code>%LOCALAPPDATA%\Xamarin\MonoTouch\</code>(SSH鍵を作り直す場合)</li>
    </ul>
  </div>
  <div>
    <h4>Mac 側</h4>
    <ul>
      <li><code>~/Library/Caches/Xamarin/XMA/</code></li>
      <li><code>~/Library/Logs/Xamarin.Messaging-*</code></li>
      <li><code>~/.ssh/authorized_keys</code>(VS の公開鍵があるか/パーミッションが <code>600</code> か)</li>
    </ul>
  </div>
</div>
<p>削除後、Visual&nbsp;Studio の <em>Tools &gt; iOS &gt; Pair to Mac</em> から再接続。接続時に Mac 側へ必要なパックが自動配備されます(時間がかかる場合があります)。</p>

<h3>5) Xcode/Command Line Tools の再設定</h3>
<p>次のコマンドで Xcode の選択と初期化をやり直します。</p>
<pre><code>sudo xcode-select --switch /Applications/Xcode.app

sudo xcodebuild -license accept sudo xcodebuild -runFirstLaunch sudo DevToolsSecurity -enable xcodebuild -version xcode-select -p

<h3>6) ネットワーク・ファイアウォールの確認</h3>
<p>MSBuild のメッセージングは SSH を使うため、<code>22/TCP</code> が閉じていると接続済みの見かけでもビルド直後に落ちます。社内 VPN/プロキシ/EDR の影響を切り分けるには、次の疎通を行います。</p>
<pre><code># Windows PowerShell

Test-NetConnection -Port 22 ssh -v @ ‘uname -a && whoami’

<h3>7) それでも直らないときの最終手段</h3>
<ol>
  <li>Mac 側の <em>.NET SDK</em> と VS ビルドエージェント関連(<em>VisualStudio.MacAgent</em> 等)を一度削除。</li>
  <li>Windows 側は VS Installer から <em>Mobile development with .NET</em> を再インストール。</li>
  <li>Mac を再起動 → <em>Pair to Mac</em> → ビルド検証。</li>
</ol>

<h2>技術解説:なぜ「Pair to Mac は Connected なのに MSBuild は切れる」のか</h2>
<p>この現象は、<strong>Visual&nbsp;Studio/MSBuild が使う iOS ビルド用メッセージング(XMA)</strong>の<strong>握手フェーズ</strong>で、Windows と Mac の<strong>SDK/ワークロードの世代不一致</strong>が起点となって接続が落ちるのが本質です。<br>具体的には、Windows 側の VS 更新で <em>Microsoft.iOS.Windows.Sdk</em> 系パックやマニフェストのバージョンが上がると、ペア済みの Mac に自動配備されたエージェント資材と<strong>初期ハンドシェイク時の前提</strong>がズレ、<strong>SayHello</strong> タスク以降で切断されます。<br>VS 側が 17.14.10+ で修正を取り込むと、<strong>バージョン判定と自動アップロードのリカバリ</strong>が改善され、ペアリング済みでも<strong>ビルド継続可能</strong>になります。</p>

<h2>再発防止のベストプラクティス</h2>
<ol>
  <li><strong>VS と .NET ワークロードの「セット」運用</strong>:<code>global.json</code> の <code>sdk.version</code> と <code>workloadVersion</code> をチームで固定し、Windows/Mac の世代差をなくす。</li>
  <li><strong>接続キャッシュの定期クリーン</strong>:定例メンテで <code>%LOCALAPPDATA%\Xamarin\iOS\XMA\</code> と <code>~/Library/Caches/Xamarin/XMA/</code> を掃除。ビルドホストを乗り換えた直後は必ずクリーン。</li>
  <li><strong>Xcode のメジャー更新時は事前に検証</strong>:Command Line Tools のパスがズレやすいため、<code>xcode-select -p</code> と <code>xcodebuild -version</code> を出荷パイプラインに組み込み、異常を早期検知。</li>
  <li><strong>ネットワークのベースライン化</strong>:VPN やセキュリティエージェントで 22/TCP が瞬断する環境では、ビルド専用 VLAN/セグメントを用意する。</li>
</ol>

<h2>ログの読み方(トリアージ用ポイント)</h2>
<ul>
  <li><code>ContinueOnDisconnected=False</code> が出ているのに切断で止まる → 握手の異常終了(ワークロード不一致やエージェントの起動失敗)の可能性大。</li>
  <li><code>_DotNetRootRemoteDirectory</code> が誤っている → Mac 側の .NET 配置先が見つからず失敗(例:<code>/Users/&lt;user&gt;/Library/Caches/Xamarin/XMA/SDKs/dotnet/</code>)。必要に応じて MSBuild プロパティで明示。</li>
  <li><code>Permission denied (publickey)</code> → SSH 鍵の再生成(Windows 側 <code>%LOCALAPPDATA%\Xamarin\MonoTouch\</code> を削除→再ペア)で解決することが多い。</li>
</ul>

<h2>よくある質問(FAQ)</h2>
<dl>
  <dt>Q. 17.14.8 から 17.14.10 に上げたのにまだ失敗します。</dt>
  <dd>更新後に Mac 側のキャッシュ/ログを削除し、<em>Pair to Mac</em> を一度切断→再接続してください。Xcode の CLT パス、.NET ワークロードも合わせて点検すると改善します。</dd>

  <dt>Q. 署名関連のエラーで <code>dotnet workload install</code> が止まります。</dt>
  <dd>一時的に <code>DOTNET_CLI_WORKLOAD_SKIP_SIGN_CHECK=1</code> を付けてインストールし、完了後は環境変数を元に戻すことを推奨します(恒久運用は非推奨)。</dd>

  <dt>Q. 社内の MacInCloud/リモート Mac へ接続しています。特別な注意点は?</dt>
  <dd>SSH 22/TCP の双方向性とスループット(特に大容量パックの自動アップロード時)がボトルネックになります。ペア直後の初回ビルドは時間がかかるため、回線混雑が少ない時間帯に初期同期を済ませると安定します。</dd>

  <dt>Q. Xcode のバージョン指定は?</dt>
  <dd>ターゲットの iOS と .NET ワークロードが要求する最小 Xcode 以上で、<code>xcode-select</code> で明示選択しておくのが無難です。CLT の再初期化(<code>xcodebuild -runFirstLaunch</code>)も併せて実施してください。</dd>
</dl>

<h2>実行順の目安(ミニフローチャート)</h2>
<ol>
  <li><strong>VS を 17.14.10+ へ更新</strong>(または一時的に 17.14.7 へ戻す)</li>
  <li>Mac 側で <code>dotnet workload repair / install / update</code></li>
  <li>キャッシュ削除(Windows/Mac)→ <em>Pair to Mac</em> 再実施</li>
  <li>SSH/Xcode を確認(<code>ssh</code> と <code>xcode-select</code>/<code>xcodebuild</code>)</li>
  <li>ビルド。改善しない場合は <code>_DotNetRootRemoteDirectory</code> を明示して再試行</li>
  <li>それでも不可なら完全再インストール/別 Mac で切り分け</li>
</ol>

<h2>まとめ</h2>
<p><strong>結論:</strong>最も確実な対処は <strong>Visual&nbsp;Studio を 17.14.10 以上</strong>へ更新すること。それが難しければ、<strong>17.14.7 へ一時ロールバック</strong>しつつ、Mac 側の <strong>.NET/iOS ワークロード</strong>と Xcode/CLT を<strong>同期</strong>させることで多くの環境で回避できます。<br>再発防止には <code>global.json</code> を活用した <strong>ワークロードセットの固定</strong>と、<strong>キャッシュの定期クリーン</strong>、<strong>ネットワーク(SSH)健全性の確保</strong>が有効です。</p>

<hr>
<section aria-label="付録:コマンド早見表">
  <h3>付録:コマンド早見表</h3>
  <table>
    <thead>
      <tr>
        <th>目的</th>
        <th>Windows</th>
        <th>Mac</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>SSH 疎通確認</td>
        <td><code>Test-NetConnection &lt;mac-ip&gt; -Port 22</code></td>
        <td><code>sudo systemsetup -getremotelogin</code></td>
      </tr>
      <tr>
        <td>.NET ワークロード同期</td>
        <td>(不要)</td>
        <td><code>sudo dotnet workload repair</code><br><code>sudo dotnet workload install maui-ios</code><br><code>sudo dotnet workload update</code></td>
      </tr>
      <tr>
        <td>Xcode 再設定</td>
        <td>—</td>
        <td><code>sudo xcode-select --switch /Applications/Xcode.app</code><br><code>sudo xcodebuild -runFirstLaunch</code></td>
      </tr>
      <tr>
        <td>キャッシュ削除</td>
        <td><code>del /s /q %LOCALAPPDATA%\Xamarin\iOS\XMA\*</code></td>
        <td><code>rm -rf ~/Library/Caches/Xamarin/XMA/</code></td>
      </tr>
      <tr>
        <td>MSBuild ログ採取</td>
        <td colspan="2"><code>msbuild &lt;ソリューション.sln&gt; /bl</code>(<code>.binlog</code> をサポートへ添付)</td>
      </tr>
    </tbody>
  </table>
</section>

最後に:本記事の内容は、Windows と Mac のワークロード世代差・キャッシュ起因・Xcode 設定ずれといった現場で最も起きやすい原因にフォーカスしています。特に 17.14.8 → 17.14.10 世代では、「Pair to Mac はつながるのに、MSBuild が Mac と握手できない」という矛盾に見える状態が出やすいため、VS の更新+Mac 側再同期+キャッシュクリアの三点セットでアプローチしてください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次