はじめに
「rvictl」はiPhone(実機)の通信ログ(パケットのキャプチャ)を取得する際に使用されるコマンドです。
iPhoneをMacにライトニングケーブルに繋いだ後、Macから以下のコマンドを実行することで仮想的なネットワークカードが作成され、WiresharkなどからiPhoneの通信を参照することが可能となります。
$ rvictl -s "iPhoneのUDID"
iPhone(実機)から通信ログ(パケットのキャプチャ)を参照する方法については、他の記事を参照すると良いでしょう。
参考記事
"rvictl"が"FAILED"になった
# rvictl -s "iPhoneのUDID"
あるとき、上記のコマンドを実行した場合、以下のように"FAILED"になってしまいました。
Starting device "iPhoneのUDID" [FAILED]
こちらの解決策について書きたいと思います。
ちなみに、私の環境は以下の通りです。
項目 | 詳細 |
---|---|
Mac | Apple Silicon Macではない |
OS | macOS Monterey バージョン 12.1 |
Xcode | Version 13.2.1(13c100) |
iPhone | iPhone11(iOS 15.2) |
一応の確認
今回紹介するのは、あくまで以下のような"FAILED"になったときの解決策となります。
Starting device "iPhoneのUDID" [FAILED]
もし、コマンドを実行しても何も起こらずにプロンプトが返ってくるのであれば、「UDIDが誤っている」可能性が高いかと思います。
その場合は、UDIDが大文字英数であれば小文字英数に変換したり、その逆を行なっていただければうまく行くかもしれません。
解決策
"rvictl"が"FAILED"になるのは、MacのOSがアップデートにより、Appleシステムのセキュリティパフォーマンスが改善されたためとのことです。(詳細は私も良くわかっていません。。)
以下を行うことで解決することができました。
- Macをシャットダウンし、macOS 復旧システムで再起動させる。(macOS 復旧システムは、Mac起動時に「command(⌘) + R」を押下することでなることができます)
- macOS 復旧システムで起動したら、画面右上のメニューバーから「ターミナル」を起動
- ターミナルから、コマンド「csrutil disable」を実行
- Macをシャットダウンし、通常モードで再起動
- 通常モードで起動したら、「システム環境設定」 > 「セキュリティとプライバシー」へと遷移すると、「一般」タブの下部に「Apple.Incからの設定変更があります」(うろ覚え)のような文言が表示されますので、それを許可します。
- これでOKです。再度「rvictl -s "iPhoneのUDID"」を実行しましょう。
おわりに
macOS 復旧システムで実行したコマンド「csrutil disable」は、System Integrity Protection (SIP) を無効にするコマンドのようです。
iPhoneの通信ログを参照し終わったら、再度有効にした方が良いと思います。その場合は、上記の「3.」のコマンドを以下に置き換えれば、SIPを再び有効にすることができます。
# csrutil enable
以上、お役に立てたら幸いです。