パケットキャプチャツール「Charles」を用いて、iOS端末(特にiOS Simulator)の通信をキャプチャする方法についてまとめます。
また、Charlesは通信のキャプチャだけでなく、レスポンスの差し替えなどもツール上から行えるのでとても便利です。
こんなときに役に立ちます!
- Xcodeでのデバッグでは追いにくい、実際の通信処理の中身を確認したい
- iOSアプリの結合試験時など、無駄にリクエストをしていないか確認したい
- 実機でパケットキャプチャする時のプロキシの設定が毎回めんどくさい(←自分は地味にこれです)
必要なものはMacだけ
- Mac
- Xcode (iOS Simulator) ※Xcodeの導入方法は割愛
- Charles (パケットキャプチャツール)
- 無料でも使えます
やり方
一度設定してしまえば、以降はCharlesを起動するだけで通信のキャプチャが可能です
Charlesの設定
-
こちらから最新版をインストールします
- Homebrewでインストールすることもできます
$ brew tap homebrew/cask
$ brew cask install charles
- インストールが完了したらCharlesを起動します
- ダイアログが出るので、Grant Privilegesを選択します
Charlesの証明書の設定
Charlesでパケットキャプチャするには、証明書を対象のmacOS/iOS端末に登録する必要があります。
この登録処理自体をしなくてもパケットキャプチャ自体はできるのですが、SSL(https)通信まではキャプチャできないので、SSL通信をキャプチャしたい場合は、この設定が必要となります。
やっておいて損はないと思います。
- メニューバーのHelp > SSL Proxying > Install Charles Root Certificateを選択します
- キーチェーンアクセスに追加されたか確認します(charlesで検索するとよいです
iOS Simulatorの証明書設定
- メニューバーのHelp > SSL Proxying > Install Charles Root Certificate in iOS Simulatorを選択します
- ダイアログが出るのでOKを選択します
iOS Simulator上の設定(iOS10.3以降)
iOS10.3以降のSimulatorにて、https(SSL通信)の中身をキャプチャするには、下記設定が必須となりますのでご注意ください
- Charlesを起動します
- 通信をキャプチャしたいiOS Simulatorを起動します
- 設定(Settings).Appを開き、一般(General) > 情報(About) > 信頼書設定(Certifiacte Trust Settings) > Charles Proxy CA のスイッチをOnにします
Let's Capture!!!
- 試しに先ほど設定したSimulatorでSafariでAppleのサイトを開いてみます
- 正常にSSL通信がキャプチャできているのがわかりますね
実機ではどうやるの?
iPhone/iPadなどの実機の場合も、同様にCharlesメニューバーのHelpからMobile Device用のRootCertificateを実機にインストールすれば可能です。
が、通信をPCでキャプチャするために端末のネットワーク設定に対してプロキシを毎回設定しなくてはならないので、ちょっぴりめんどくさいです。
また、キャプチャ完了した後にプロキシの設定を有効にしたまま閉じてしまって、通信を使うときにエラーになってなんでだろう?とよくなってしまいがちなので、Simulatorの方がよく使います。
まとめ
Charlesを使ってiOS Simulatorにて通信キャプチャをするための手順を書きました。
無駄に通信をしているアプリを生み出してしまうのは、ユーザにとってもサーバにとっても負荷が高いので、通信キャプチャをしながらエコなアプリを提供しましょう。
最後までお読みいただき、ありがとうございました。