iOSシミュレータでネットワークを無効にすることはできますか?


430

インターネットからプライマリデータを取得するアプリケーションで発生する、一貫性のない動作をデバッグしようとしています。シミュレータでは問題が発生せず、デバイス上でのみ発生するため、シミュレータでネットワークと接続環境を再現したいと思います。

シミュレータでネットワークを無効にする方法はありますか?

(私はコードにリモートでMacに接続していますが、現時点では他に選択肢がないため、OSネットワークを無効にすることはできません)。


CharlesProxyを使用して同様のテストを実行することもできると思います
Honey

回答:


273

恐れ入ります—シミュレータは、OSが使用しているネットワーク接続を共有します。しばらく前に、ネットワーク状態のシミュレーションに関するレーダーバグレポートを提出しました。同じことを検討するかもしれません。


52
このレーダーのバグに対応しているかどうかはわかりませんが、開発者ツールにNetwork Link Conditionerツールが含まれるようになりました。
samvermette 2012

7
ネットワークリンクコンディショナーを使用すると、ドロップするパケットの割合を指定できますが、私が見た限りでは、残念ながらすべての接続を無効にする方法はありません。
modocache 2012

11
現在、ネットワークリンクコンディショナーでは、100%のパケット損失を設定できます。
ガブリエレペトロネラ2013年

4
シミュレータはホストマシンのネットワーク接続を共有するため、ホストマシンでインターネットをオフにして、「ネットワーク無効」をシミュレートできます。理想的ではありませんが、機能します。
アディルフセイン

5
ネットワークリンクコンディショナーは、シミュレータだけでなく、ホストマシン全体に適用されます。これはどのように役立ちますか?必要に応じて、イーサネットのプラグを抜くことができます。
sudo

1734

シンプルなファラデー箱を使用して、外部RF信号レベルをブロックまたは制限します。

アルミホイルで自作できます。開口部は、ブロックしたい場合は、データサービスの波長より小さくする必要があります。

800 Mhzの波長は37 cm(14インチ)、1900 Mhzの波長は16 cm(6インチ)です。

これは、Macがファラデー箱の内側で作業するのが難しいため、シミュレータよりも実際のデバイスでうまく機能します;-)

ここに画像の説明を入力してください


179
簡単な提案ですが、中にデスクが付いているウォークインファラデーケージを作成すると、Macの操作がはるかに簡単になります。
Kevin Laity

86
彼がシミュレーターを求めたとしても、あなたの答えは興味深い
vignesh kumar 2013年

76
質問はシミュレーターに関するものだったので、Photoshopでこれらの1つを作成し、それをデスクトップの背景として設定します。それはおそらくうまくいくでしょう?
ティモシーリーラッセル

8
この「トリック」は、プロが実際に使用してきました:)かつて私が最初の世代のスマートフォンで作業していたときは、スタウトのビスケット缶を使用していました。すべてのブランドが機能するわけではありませんが、機能するブランドは完璧でした。
ウィル

11
正解として受け入れられるべきです!(私はiKryptoniteにプラムボックスを使用したい)
gaussblurinc

309

はい。Xcodeでは、Xcodeメニュー項目-> Open Developer Tools->に移動してMore Developer Tools、「Xcodeの追加ツール」をダウンロードできます。これには、ネットワークリンクコンディショナーが含まれます。

このツールを使用すると、さまざまなネットワークシナリオ(100%損失、3G、高遅延DNSなど)をシミュレートでき、独自のカスタムシナリオを作成することもできます。


7
開発者サイトを利用している場合は、XCODE用のハードウェアIOツールパッケージに含まれています。
液体

156
どういうわけか、デバイスをホイルで包むという考えが好きです。
Michael Robinson

14
Xcode 8以降、ネットワークリンクコンディショナーは「Xcodeの追加ツール」パッケージに含まれています。
ElegyD 2017年

6
また、100%の損失はホストの接続を制限するため、実用的な解決策ではありません。インターネットなしで開発する準備ができている場合は、開発者のマシンのプラグを抜くだけでこのソリューションよりも優れています。
Jannie Theunissen

7
すべてのMacに影響を与えています。Macをリモートで使用しているため、シミュレータのみのインターネット接続を終了したい...
JCarlosR

48

私が知っているiOSシミュレータでネットワークを無効にする唯一の方法は、Little SnitchHands Offなどのツールを使用することです。それらを使用すると、送受信するネットワーク接続を拒否/ブロックできます。シミュレーターアプリからの接続のみをブロックするように設定できます。ファイアウォールのように機能します。


11
しかし、それによってシミュレータがオフラインのように動作することはありません。それはあなたのサーバーを利用できなくするだけです、それは全く違うことです。
Blitz、2011年

1
実際、LordT、私が持っている特定の状況ではそれで十分かもしれません...!
ポールハモンド

phix23-これら2つの推奨ツールのどちらを好みますか?
ポールハモンド

いいえ、していません。私はハンズオフを試してみましたが、それはより多くの機能があるためです。
Felix

2
+1:私はこの目的のためにLittle Snitchを使用しました。ネットワーク接続が切断された場合にシミュレートされたアプリが機能することを確認するためにテストしました。
hotpaw2 '26年

18

Mac OSXでWiFiをオフにするだけです。


1
これはオプションではないと具体的に述べたOPを助けませんが、これは私にとって完璧な単純なソリューションです。
ジョノ2013


11

現在の日付に対する回答を更新するだけです。Xcode 4(?)以降、/Applications/Utilitiesと呼ばれる設定ウィンドウがありNetwork Link Conditionerます。既存のプロファイルの1つを使用するか、0 Kbpsアップ/ダウンリンクで100%ドロップした独自のカスタムプロファイルを作成します。


1
追加したいのは、帯域幅が0のカスタムネットワーク設定を作成すると、自動的に最大値と見なされるということです。パケットの損失を100%にすることが重要です。
Denis Kutlubaev 2012

また、この方法では、シミュレータだけでなく、すべてからインターネットが削除されることを付け加えておきます。インターネットを完全にオフにする方が簡単かもしれません。ただし、品質の異なるEおよび3Gインターネットをシミュレートできるため、非常に便利なツールです。
Denis Kutlubaev 2012

これは確かに最良の答えであるNetwork Link ConditionerAppleの公式ツールであり、そしてそれはに比べて、完全に無料ですLittle SnitchHands Off
fatuhoku 2014

うーん、このツールはすべてのネットワークをオフにするようです。また、それが到達可能性通知をトリガーしないこともわかりました(私はgithub.com/stefanomondino/STMReactiveReachabilityを使用しました)。
fatuhoku

4
警告される-NETWORK LINK CONDITIONERツールは、iPhoneシミュレータだけでなく、マシン全体に影響を与えます。私がXamarin Build Hostを使用しているように、Macにリモートで開発している場合、接続が切断されます。
John Kocktoasten、2015

10

Xcodeはそのような機能を提供しないので、あなたは間違いなくいくつかのサードパーティのアプリケーション/ツールに行きます。MACネットワークをオフにすると、iOSシミュレータネットワークもオフになります。

" System Preferences..."> " Network" からMACインターネットをオフにして、目的のネットワークソースをオフにすることができます。

MACイーサネットインターネットソースをオフにするには: EtherNetネットワークソース

MAC WiFiインターネットソースをオフにするには(MACがWifiインターネット上にある場合): ここに画像の説明を入力してください


7

次のようなサードパーティのアプリでインターネット接続を絞ることができます

チャールズ:http : //www.charlesproxy.com/

Macでcommand + shift + Tを押して、スロットルを設定します。


6

おそらくクレイジーなアイデアやパッチ:

ネットワーク到達可能性のフラグを切り替えるだけ

これは、「シミュレータメモリ警告」とその完全な安全性をトリガーすることによってフラグランタイムを切り替えるために使用する コードです。コードがデバッグモードのみであることを確認してください

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}

1
インターネット接続をチェックする静的関数を持つグローバルクラスがあります。リターンfalseは素晴らしいアイデアです。インストールは不要です。リモートで作業を続けることができます。ありがとうございました。
JCarlosR

これはどこでisInternetAvailable定義されていますか?!
CSawy

@CSawy到達可能性クラスでインターネット接続の現在のステータスを送信するフラグ。
Darshit Shah

3

Little Snitchを使用して、iOSシミュレーターで実行されるプロセスを含む、個々のプロセスへのネットワークトラフィックを遮断できます。そうすれば、インターネット接続を維持し、実行中のアプリを切断できます。


3

Xcode 8.3およびiOS 10.3の場合:

XCUIDevice.shared().siriService.activate(voiceRecognitionText: "Turn off wifi")
XCUIDevice.shared().press(XCUIDeviceButton.home)

@available(iOS 10.3, *)テストスイートファイルの先頭に必ず含めてください。

または、必要に応じて「機内モードをオンにする」こともできます。

Siriがwifiをオフにするか、機内モードをオンにしたら、Siriがインターネットを必要とするというSiriダイアログを閉じる必要があります。これは、ダイアログを閉じてアプリに戻るホームボタンを押すことで実行されます。


iOS11GMでは動作しない場合があります。シミュレーターでWifi設定が見つかりません。
ビルチャン

2
Xcode 9では、複数のアプリをアクティブ化できるため、Siriを使用することだけがオプションではありません。iOS設定アプリをアクティブにしてWi-Fiをオンにすることもできるようになりました。
brandenbyers

3

IOS Simulatorインターネットを無効にする方法は2つあります。

  • ネットワーク接続を外します
  • Wi-Fiをオフにする

最も簡単な方法です


3

アプリが特定のドメインに接続している場合は、それを/etc/hostsファイルに追加して、ローカルネットワーク内の存在しないIPにルーティングするだけです...アプリケーションの場合、インターネット接続がない場合と同じです。サーバーに到達できません。

sudo nano /etc/hosts

次の行を追加します。

192.168.1.123   example.com

または127.0.0.1、ローカルマシンでウェブサーバーを実行していない場合に使用します。


2

OHHTTPStubsを使用して、特定のURLへのネットワーク要求をスタブして失敗する可能性があります。


1

簡単な解決策は、Macの機内モードを作成することです。これを行う方法は次のとおりです。

  • システム環境設定のネットワークに入ります
  • [場所]ドロップダウンメニューをクリックします
  • プラスアイコンをクリックして、新しい場所を追加します
  • 新しい場所に「機内モード」などの名前を付け、「完了」をクリックします
  • [場所]ドロップダウンメニューから、作成した場所を選択します
  • ウィンドウの左側にあるリストで使用可能な各ネットワークインターフェイスをクリックし、それぞれを無効にします。
  • [iPv4の構成]メニューをクリックし、[オフ]を選択します
  • Wi-Fiの場合は、[Wi-Fiをオフにする]ボタンをクリックするだけです
  • [適用]をクリックすると、この場所ですべてのネットワークアクティビティがブロックされます

ネットワークを再びオンにしたい場合は、[場所]ドロップダウンメニューから[自動]を選択し、[適用]をクリックします。


1

MacでCharles Proxyアプリを使用することをお勧めします

Bandwidth Throttleネットワーク接続を調整するためだけに作成された機能を使用できます

スター/ストップ スロットル⌘ command+ T
スロットル設定... ⌘ command+ T+⇧ shift


0

代わりにホストのネットワークを無効にすることができます!


7
アプリの接続の問題をデバッグするときにStackOverflowが表示されないのは不便です。
fatuhoku

質問の最後の行を読んでください:「私はコードにリモートでMacに接続しています。現在、他に選択肢がないため、OSネットワークを無効にすることはできません。」その上、あなたの提案はベンパルマーによってすでに2年前に与えられました。
ToolmakerSteve、2015

0

接続するWi-Fiネットワークが2つ以上ある場合は、iOSシミュレーターのバグを使用するのが非常に簡単です。

  1. シミュレーター(cmd-q)が開いている場合は終了します
  2. Macを1つのwifiに接続します(インターネットに接続されていない可能性があります)。
  3. シミュレーターを起動し(メニュー:xCode-> Open Developer Tool-> iOs Simulator)、ロードされるまで待ちます
  4. 無線LANネットワークを他のものに切り替える
  5. 利益

バグは、シミュレーターがまだ接続されていないネットワーク(IP?)を使用しようとすることです。

シミュレータを再起動するまでは、インターネットはありません(接続した最初のwifiネットワークにインターネット接続があったとしても)。そのため、プロジェクトを実行(cmd-R)および停止(cmd-。)して、接続なしでシミュレータを使用できます。 Macは接続されます。

次に、接続されたシミュレータを実行する必要がある場合は、終了して起動します。


0

Macでネットワークリンクコンディショナーを使用できます。アップルの開発者向けWebサイトからダウンロードできます。古いバージョンのXcodeとiOSを入手できる場所で利用できるはずです。このネットワークコンディショナーを使用すると、ネットワークの強度をwifiからネットワークなしに変更できます。

また、ネットワークコンディショナーをインストールすると、システム設定にインストールされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.