よくある想定は、リモートデスクトップのセッションが開発環境全体を手元のノート PC に移すというものです。移るのは画面とキーボードとマウスだけで、それ以外は移りません。iPhone は Xcode が動く Mac に届かなければならず、それは信頼・転送・権限について独自の要件を持つ別の接続です。以下のすべてはこの分離から導かれ、失敗する設定の多くはまさにここで半日を失います。

誤解: 遠隔操作で端末も移動する

リモートデスクトップのソフトウェアが転送するのは画面と入力の流れであり、接続が良ければ Mac が目の前に座っているように感じます。転送されないのは USB であり、電話機を Mac のネットワークに置くわけでもありません。セッションは Mac のデスクトップで終わり、そこで Xcode が独自の規則で端末を見つけなければなりません。電話機がピクセルと一緒に移動すると考えるのが、この構成で最も多い誤りです。

二つの接続は独立しており、片方が完全でももう片方が存在しないことがあります。デスクトップのセッションを直しても、端末への経路については何も分かりません。

何かを設定する前に、電話機が物理的にどこにあるかを決める

電話機が Mac のそばにあるなら、そこで通常のローカル設定を行います。コンピュータを信頼し、端末の開発者モードを有効にし、マシンの前に座った状態で Xcode がビルドして実行できることを確認します。そのうえでリモートデスクトップは、すでに動いている作業手順を操作します。これが最も安価な構成であり、ハードウェアが許す限り選ぶべきものです。

電話機が自分と一緒に移動し、Mac がオフィスに残るなら、Mac にはその端末への対応済みの経路が必要です。VPN は両端の間にネットワーク経路を提供するだけで、それ以上のものは提供しません。ペアリング、開発者モード、署名の身元、端末の登録は、いずれも別個の要件のままです。トンネルは接続そのものではなく、積み重ねの一層として扱ってください。

二つの構成のどちらにいるのかを書き留めてください。以降の確認はすべてそれに依存し、混同すると機能し得ない対処を生みます。

検出と転送を二つの別の問題として扱う

Xcode はペアリング済みのワイヤレス端末をローカルネットワーク上の Bonjour で見つけ、既知のアドレスの端末には Connect via IP Address で到達することもできます。これは二つの仕組みであり、失敗の仕方も二通りです。一覧に決して現れない端末と、現れるが接続を拒む端末は同じ症状ではなく、どちらも電話機が見えないように読めます。

何かを変える前に広告を調べてください。dns-sd -B _apple-mobdev2._tcp はペアリング済みの電話機がローカルリンク上で公開するサービスを一覧します。何も現れなければ、壊れているのは検出の層であり、アドレスによる接続が残された唯一の道です。サービスが現れても Xcode が接続できないなら、検出は機能しており、失敗しているのは転送か信頼の関係です。

Apple のワイヤレス端末のヘルプは、同じネットワークという条件とアドレスによる手順の両方を扱っています。古いリリースで覚えたメニューの道をたどるのではなく、インストール済みのバージョンに照らして読んでください。下の仕組みが変わらなくても、メニューの表示は Xcode のリリース間で動きます。

Mac が自分の位置から何を見えるかを確認する

列挙はノート PC ではなく Mac で実行してください。端末を必要としているのは Mac だからです。xcrun devicectl list devices は Xcode が到達できる端末を出力し、system_profiler SPUSBDataType は物理的に接続されているものを示します。二番目の一覧に出て一番目に出ない電話機は、接続済みだがペアリングされていない状態であり、ネットワークではなく信頼の問題です。

xcrun devicectl list devices
system_profiler SPUSBDataType | grep -i iphone
xcrun devicectl device info DEVICE_UDID

端末が別のサブネットにある場合は、Mac が電話機の公開するアドレスに到達できることを確認し、リンクローカルの IPv6 アドレスは一つのリンクに限定され、トンネルを越えて路由できないことを覚えておいてください。VPN だけでは遠隔の電話機がめったに現れないのはそのためです。端末が告知するアドレスは、自分のセグメントでのみ意味を持ちます。

Apple の技術メモ TN3158 は、バージョン 15 以降の Xcode がリンクローカルの IPv6 上に築かれたネットワークインターフェースを通じて有線の端末と通信すると述べており、ローカルのフィルタリングが物理的に接続した電話機にも干渉し得ます。その場合はフィルタリングの方針を持つ担当者へ上げてください。自分で無効にしないでください。

端末のアイコンではなくビルドで証明する

一覧の端末項目、ツールバーの緑の表示、ペアリング要求の成功は、いずれも途中の観察です。作業手順が証明されるのは、Xcode が許可されたビルドをインストールし、デバッガが端末上で動くプロセスに接続したときです。

一連の流れを Mac から実行してください。xcrun devicectl device install app --device DEVICE_UDID build/MyApp.app は IDE なしでインストールするので、Xcode の画面の問題と端末への経路の問題を切り分けられます。そのうえでアプリを起動し、コンソールを接続します。コマンド行からのインストールが通り IDE が通らないなら、残る不具合はネットワークではなく、スキームか署名の設定にあります。

構成は狭く保ってください。許可された開発者は一人、登録済みの Mac は一台、端末は一台、そしてセッションが終わればアクセスも終わるようにします。構成をやめるときは資格情報を取り消してください。電話機がただ Mac のそばに置けるなら、そちらを選んでください。最も単純な対応経路ほど、デバッグに残る層が少ないからです。

関連記事