xcrun simctl pairでWatchとiPhoneをペアリングする で触れたとおり、1台のiPhoneシミュレータには複数のWatchシミュレータをペアリングできるが、実際に連携する(active)ペアは常に1つだけである。 xcrun simctl pair_activateは、複数あるペアの中から、どれをactiveにするかを切り替えるサブコマンドである。

基本的な使い方

pair_activate <pair>の形式で、ペアのUUIDを指定して実行する。

1台のiPhoneに2つのWatchをペアリングした状態を用意する。

$ xcrun simctl pair "TIL Pair Activate Watch A" "TIL Pair Activate iPhone"
4AAF73EB-37DC-481D-83D3-6884934619F0

$ xcrun simctl pair "TIL Pair Activate Watch B" "TIL Pair Activate iPhone"
404B8E48-6AB1-462B-AA6C-64D86F8E7939

$ xcrun simctl list pairs
== Device Pairs ==
4AAF73EB-37DC-481D-83D3-6884934619F0 (active, disconnected)
    Watch: TIL Pair Activate Watch A (F55B4FD8-1194-4142-8356-E7A1384D9B60) (Shutdown)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Shutdown)
404B8E48-6AB1-462B-AA6C-64D86F8E7939 (inactive, disconnected)
    Watch: TIL Pair Activate Watch B (687FA8D7-AAB2-4E6A-91B7-E890A73A3189) (Shutdown)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Shutdown)

先にペアリングしたWatch Aのペアがactiveになっている。 Watch Bのペアをpair_activateで切り替える。

$ xcrun simctl pair_activate "404B8E48-6AB1-462B-AA6C-64D86F8E7939"

$ xcrun simctl list pairs
== Device Pairs ==
4AAF73EB-37DC-481D-83D3-6884934619F0 (inactive, disconnected)
    Watch: TIL Pair Activate Watch A (F55B4FD8-1194-4142-8356-E7A1384D9B60) (Shutdown)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Shutdown)
404B8E48-6AB1-462B-AA6C-64D86F8E7939 (active, disconnected)
    Watch: TIL Pair Activate Watch B (687FA8D7-AAB2-4E6A-91B7-E890A73A3189) (Shutdown)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Shutdown)

Watch Bのペアがactiveに変わり、Watch Aのペアは自動的にinactiveに切り替わる。 実機のApple Watchと同様、1台のiPhoneに対してactiveなペアは常に1つだけに保たれる。

引数にはペアのUUIDだけを指定できる

pair_activateの引数には、list pairsで確認できるペアのUUIDだけを指定できる。 Watch/iPhoneのデバイス名やUUIDを指定するとエラーになる。

$ xcrun simctl pair_activate "TIL Pair Activate Watch A"
Invalid device pair: TIL Pair Activate Watch A

存在しないペアUUIDを指定した場合も、同じInvalid device pairエラーになる。

既にactiveなペアを指定するとエラーになる

現在activeなペアのUUIDをそのままpair_activateに指定すると、Invalid device pairとは異なるエラーになる。

$ xcrun simctl pair_activate "404B8E48-6AB1-462B-AA6C-64D86F8E7939"
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=37):
This pair is already active.
Operation already in progress

存在しないペアを指定した場合のInvalid device pairエラーとは別のエラーメッセージになっており、pair_activateが「切り替え先が現在のactiveと同じかどうか」を区別して処理していることが分かる。

activeの切り替え後も、元のペアは起動中のままならconnectedが残る

Watch・iPhoneが起動済みで、かつactiveなペアがconnectedxcrun simctl pairでWatchとiPhoneをペアリングする を参照)の状態から、別のペアにpair_activateで切り替える。

切り替え完了直後にlist pairsを確認すると、activeは正しく入れ替わっているが、元のペア(Watch Bのペア)はinactiveになった後も、Watch Bを起動したままならconnectedのまま残り続ける。

$ xcrun simctl list pairs
== Device Pairs ==
4AAF73EB-37DC-481D-83D3-6884934619F0 (active, disconnected)
    Watch: TIL Pair Activate Watch A (F55B4FD8-1194-4142-8356-E7A1384D9B60) (Shutdown)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Booted)
404B8E48-6AB1-462B-AA6C-64D86F8E7939 (inactive, connected)
    Watch: TIL Pair Activate Watch B (687FA8D7-AAB2-4E6A-91B7-E890A73A3189) (Booted)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Booted)

新しくactiveになったペア(Watch A)は、Watch A自体が起動していないためdisconnectedのままである。 Watch Bをshutdownし、代わりにWatch Aをbootすると、activeなペアの方がconnectedに変わる。

$ xcrun simctl shutdown "TIL Pair Activate Watch B"
$ xcrun simctl boot "TIL Pair Activate Watch A"

(起動後しばらく待つ)

$ xcrun simctl list pairs
== Device Pairs ==
4AAF73EB-37DC-481D-83D3-6884934619F0 (active, connected)
    Watch: TIL Pair Activate Watch A (F55B4FD8-1194-4142-8356-E7A1384D9B60) (Booted)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Booted)
404B8E48-6AB1-462B-AA6C-64D86F8E7939 (inactive, disconnected)
    Watch: TIL Pair Activate Watch B (687FA8D7-AAB2-4E6A-91B7-E890A73A3189) (Shutdown)
    Phone: TIL Pair Activate iPhone (C93E6676-4F63-4BAC-AE3B-639B5456440B) (Booted)

このことから、active/inactiveはどのペアを使うかという設定であり、connected/disconnectedはWatch自体が起動して実際にリンクしているかどうかを示す、別の軸の状態であることが分かる。 connectedはWatchをshutdownしない限り、inactiveになった後も残り続ける。