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なペアがconnected(xcrun 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になった後も残り続ける。
