Kekeの日記

エンジニア、読書なんでも

便利すぎる!iOSアプリでネットワークテストをNetwork link Conditionerを使って行う

はじめに

iOSでもAndroid端末でもフロントエンドでも何かしらの通信を行ってコンテンツを取得しているでしょう。

簡略化した図を以下に記載しています。

f:id:bobchan1915:20180906011942p:plain

特にシミュレーターではオフィスを快適なネットワークを支えているケースがほとんどなので実機のスペック、環境でのテストなどはすることができません。

今回はNetwork Link Conditionerを使って、意図的にネットワーク環境を設定してから通信速度チェックをして確認していこうと思います。

Network Link Conditionerとは

Network Link Conditionerとは

iOS端末で、またはシミュレータ上で起動している端末のネットワーク状況を仮想的に3GやLTEなどにしたりするもの

です。

なぜ必要なのか

たとえばHTTPリクエストを送ってコンテンツを取得して、この一覧をUITableViewに表示するViewControllerがあるとします。

また、Cellが選択されると、新しいViewControllerがもつViewに遷移します。

このようなケースでクラッシュしそうなケースは何でしょうか。

たとえば

  • コンテンツが10個あるのにセルが11個あってコンテンツ[11]としてしまってクラッシュ

などが考えられますが、まず第一は

  • ViewControllerがコンテンツを取得している間にCellが一つもないのに押されて、遷移しようとしてクラッシュ

というケースが考えられます。

このようなケースは通信速度が速いと押す暇がないので、あまり気づきません。

しかし、ネットワークを仮想的に遅くしてみるとクラッシュ原因が見つかったりするのでテストする価値はあると思います。

ちゃんと図ををもって説明しようと思います。

通信速度が速い場合

取得をするアクションを押すと、、、

f:id:bobchan1915:20180906012807p:plain

速攻表示されます。

f:id:bobchan1915:20180906012302p:plain

 

通信速度や遅い場合

取得をするアクションを押すと、、、

f:id:bobchan1915:20180906012807p:plain

取得まで時間がかかります。

f:id:bobchan1915:20180906013056p:plain

よくあるケースですが、注意深く実装していないと以下のようにloadingのときは押せたりします。

f:id:bobchan1915:20180906013300p:plain

もちろん遷移をできないからクラッシュするわけです。

まずはインストールする

以下のように"More Developer Tools"を選択します。

f:id:bobchan1915:20180906013638p:plain

そして、Apple Developerでログインします。

以下のような画面が出るはずです。

f:id:bobchan1915:20180906013900p:plain

ここからはXcodeのバージョンごとに分かれます。

Xcode 8以上

Additional Tools for Xcode XXX

を入れてください。マイナーバージョンまでないものもあるので、メジャーバージョンされあっている、かつダウンクレードだったら使えます。

例:

  • 9.2 : Additional Tools for Xcode 9

それ以下

その場合は

Hardware IO Tools for Xcode XXX

をインストールしてください。

続き

.dmgファイルを開いて"Hardware" -> "Network Line Conditioner.prefPane"をインストールします。

すると以下のようにセットアップできます。

f:id:bobchan1915:20180906014655p:plain

各種プロフィール

比較表

今回は下り(Downlink)のプロフィールを比較しています。

profile bandwidth(帯域) パケット欠損率 遅延
LTE 50mbps 0% 50ms
Wifi 40mbps 0% 1ms
Wifi 802.11ac 250mbps 0% 1ms
3G(FOMA) 780kbps 0% 100ms
Very Bad Network 1mbps 10% 500ms
High Latency DNS max 0% 0ms
100% Loss max 100% 0ms
DSL 2mbps 0% 5ms
Edge 240kbps 0% 400ms

一般的にはWifiLTE3Gが主だと思います。

4G対応地域

LTEは4Gの一種です。

www.nttdocomo.co.jp

DOCOMOの場合は、以下のような対応です。

全国スケールでみることはできなかったので、適当に選びました。

f:id:bobchan1915:20180906022101p:plain

だいたいLTE(800MHz)以上には対応していることがわかります。

通信制限時の速度

通信制限時の速度はだいたい128kbpsになるそうなので、Edgeが一番近いかなと思います。

なので通信制限のかかったユーザーのテストにはEdgeを使えば良さそうです。

カスタムプロフィール

"Manage Profile"からカスタムプロフィールを設定します。

以下のサイトを参考にDocomo 通信制限時というものを設定しました。

f:id:bobchan1915:20180906022601p:plain

実際に試してみる

一応ですがios端末を使っている時にmacにも影響がないか調べます。

また、今回は以下のスピードテストを使います。

モバイルが使えるので以下の画像読み込み版にしました。

www.musen-lan.com

OFF時

f:id:bobchan1915:20180906015651p:plain

macbook pro

f:id:bobchan1915:20180906015735p:plain

iOSシミュレータ

f:id:bobchan1915:20180906020123p:plain

Wifi

f:id:bobchan1915:20180906020145p:plain

macbook pro

f:id:bobchan1915:20180906020243p:plain

iOSシミュレータ

f:id:bobchan1915:20180906020316p:plain

3G

f:id:bobchan1915:20180906020358p:plain

macbook pro

f:id:bobchan1915:20180906020500p:plain

iOSシミュレータ

f:id:bobchan1915:20180906020539p:plain

Very Bad Network

f:id:bobchan1915:20180906021800p:plain

macbook pro

f:id:bobchan1915:20180906021814p:plain

iOSシミュレータ

f:id:bobchan1915:20180906021824p:plain

まとめ

  • macbookも同時に通信がかかるのでマルチタスクで画像をあげたり、ブラウズするときは不便
  • chromeなどもフロントエンドではできるので、きちんとあらゆる通信環境で試す必要がある

参考記事

nshipster.com