Ist es möglich, das Netzwerk in iOS Simulator zu deaktivieren?


428

Ich versuche, ein inkonsistentes Verhalten zu debuggen, das in einer Anwendung auftritt, deren Primärdaten aus dem Internet stammen. Ich sehe die Probleme nicht im Simulator, sondern nur auf dem Gerät. Daher möchte ich die Netzwerk- und Konnektivitätsumgebung im Simulator reproduzieren.

Gibt es eine Möglichkeit, das Netzwerk im Simulator zu deaktivieren?

(Ich verbinde mich remote mit dem Mac, um Code zu erhalten, derzeit keine andere Wahl, daher ist das Deaktivieren des Betriebssystemnetzwerks keine Option.)


Ich denke, Sie können auch CharlesProxy verwenden, um ähnliche Tests durchzuführen
Honey

Antworten:


274

Ich fürchte nicht - der Simulator teilt die Netzwerkverbindung, die das Betriebssystem verwendet. Ich habe vor einiger Zeit einen Radar-Fehlerbericht über die Simulation von Netzwerkbedingungen eingereicht . Sie könnten das Gleiche in Betracht ziehen.


50
Ich bin nicht sicher, ob es auf diesen Radarfehler reagiert, aber die Entwicklertools enthalten jetzt ein Netzwerkverbindungs-Conditioner- Tool.
Samvermette

7
Mit Network Link Conditioner können Sie einen Prozentsatz der zu verwerfenden Pakete angeben, aber meines Erachtens gibt es leider keine Möglichkeit, die gesamte Konnektivität zu deaktivieren.
Modocache

11
Derzeit erlaubt Network Link Conditioner, einen Paketverlust von 100% festzulegen, und es scheint zu funktionieren.
Gabriele Petronella

4
Da der Simulator die Netzwerkverbindung des Host-Computers gemeinsam nutzt, können Sie das Internet auf Ihrem Host-Computer deaktivieren, um "Netzwerk deaktiviert" zu simulieren. Nicht ideal, aber es funktioniert.
Adil Hussain

4
Warten Sie, Network Link Conditioner gilt für den gesamten Host-Computer, nicht nur für den Simulator. Wie ist das nützlich? Ich kann mein Ethernet einfach ausstecken, wenn ich das will.
Sudo

1733

Verwenden Sie einen einfachen Faradayschen Käfig , um den externen HF-Signalpegel zu blockieren oder zu begrenzen.

Sie können Ihre eigenen mit Aluminiumfolie machen. Die Öffnungen sollten kleiner als die Wellenlänge Ihres Datendienstes sein, wenn Sie dies blockieren möchten.

800 MHz haben eine Wellenlänge von 37 cm (1900 "), 1900 MHz haben eine Wellenlänge von 16 cm (6").

Dies funktioniert mit einem tatsächlichen Gerät besser als mit dem Simulator, da der Mac im Faradayschen Käfig schwer zu bearbeiten ist ;-)

Geben Sie hier die Bildbeschreibung ein


179
Nur ein kurzer Vorschlag: Wenn Sie einen begehbaren Faradayschen Käfig mit einem Schreibtisch im Inneren erstellen, ist die Arbeit mit dem Mac viel einfacher.
Kevin

86
Ihre Antwort ist interessant, obwohl er nach Simulator gefragt hat
Vignesh Kumar

76
Da es sich um eine Frage zum Simulator handelte, werde ich wahrscheinlich eine davon in Photoshop erstellen und als Desktop-Hintergrund festlegen. Das wird wahrscheinlich funktionieren, oder?
Timothy Lee Russell

8
Dieser 'Trick' wurde von Profis wirklich benutzt :) Als ich an den Smartphones der ersten Generation arbeitete, verwendeten wir dicke Keksdosen. Nicht alle Marken funktionierten, aber diejenigen, die es taten, waren perfekt.
Will

11
sollte als richtige Antwort akzeptiert werden! (Ich würde lieber Plumbum Box für iKryptonite verwenden)
Gaussblurinc

309

Ja. In Xcode können Sie zum XcodeMenüpunkt -> Open Developer Tools-> gehen More Developer Toolsund " Zusätzliche Tools für Xcode " herunterladen , die den Network Link Conditioner enthalten.

Mit diesem Tool können Sie verschiedene Netzwerkszenarien simulieren (z. B. 100% Verlust, 3G, DNS mit hoher Latenz usw.) und eigene benutzerdefinierte Szenarien erstellen.


7
Wenn Sie auf der Entwicklerseite sind, ist es im Paket HARDWARE IO TOOLS FOR XCODE enthalten.
Flüssigkeit

155
Irgendwie bevorzuge ich die Idee, mein Gerät in Folie zu hüllen.
Michael Robinson

14
Seit Xcode 8 befindet sich der Network Link Conditioner im Paket " Zusätzliche Tools für Xcode ".
ElegyD

5
Außerdem drosselt ein 100% iger Verlust die Verbindung des Hosts, was keine praktische Lösung darstellt. Wenn Sie bereit sind, ohne Internet zu entwickeln, ist es besser, einfach den Stecker auf Ihrem Entwicklercomputer zu ziehen als diese Lösung.
Jannie Theunissen

6
Es betrifft den gesamten Mac. Ich möchte die Internetverbindung nur für den Simulator beenden, da ich den Mac remote verwende ...
JCarlosR

47

Die einzige Möglichkeit, das Netzwerk in einem mir bekannten iOS-Simulator zu deaktivieren, ist die Verwendung von Tools wie Little Snitch oder Hands Off . Mit ihnen können Sie alle ausgehenden und eingehenden Netzwerkverbindungen verweigern / blockieren. Sie können es so einrichten, dass nur Verbindungen von der Simulator-App blockiert werden. Funktioniert wie eine Firewall.


11
Dadurch verhält sich der Simulator jedoch nicht so, als wären Sie offline. Dadurch werden Ihre Server nur nicht verfügbar, was etwas ganz anderes ist.
Blitz

1
Eigentlich, LordT, kann das für die besonderen Umstände, die ich habe, ausreichen ...!
Paul Hammond

phix23 - haben Sie eine Präferenz zwischen diesen beiden vorgeschlagenen Tools?
Paul Hammond

Nein, habe ich nicht. Ich habe nur Hands off ausprobiert, weil es mehr Funktionen hat.
Felix

2
+1: Ich habe Little Snitch genau für diesen Zweck verwendet und getestet, ob eine simulierte App funktioniert, wenn die Netzwerkverbindung unterbrochen ist.
hotpaw2

18

Schalten Sie einfach Ihr WiFi in Mac OSX aus, das ist ein Vergnügen!


1
Hilft dem OP nicht, der ausdrücklich erklärt hat, dass dies keine Option ist, aber dies ist eine perfekte einfache Lösung für mich.
Johno


11

Aktualisieren Sie einfach die Antwort auf das aktuelle Datum. Seit Xcode 4 (?) Wird ein Einstellungsbereich /Applications/Utilitiesaufgerufen Network Link Conditioner. Entweder verwenden Sie eines der vorhandenen Profile oder Sie erstellen ein eigenes benutzerdefiniertes Profil mit 0 Kbit / s Up / Downlink und 100% Drop.


1
Ich möchte nur hinzufügen, dass beim Erstellen einer benutzerdefinierten Netzwerkeinstellung mit einer Bandbreite von 0 diese automatisch als Maximum angenommen wird. Es ist wichtig, 100% Paketverlust zu setzen.
Denis Kutlubaev

Außerdem möchte ich hinzufügen, dass diese Methode das Internet von allem entfernt, nicht nur vom Simulator. Vielleicht ist es sogar noch einfacher, das Internet vollständig auszuschalten. Trotzdem ist es ein sehr praktisches Tool, da Sie E- und 3G-Internet unterschiedlicher Qualität simulieren können.
Denis Kutlubaev

Dies ist sicherlich die beste Antwort, da Network Link Conditioneres sich um ein offizielles Apple-Tool handelt und es im Vergleich zu Little Snitchoder völlig kostenlos ist Hands Off.
Fatuhoku

Hmm, es sieht so aus, als würde dieses Tool das Netzwerk für alles ausschalten. Ich habe auch festgestellt, dass es keine Erreichbarkeitsbenachrichtigungen auslöst (ich habe github.com/stefanomondino/STMReactiveReachability verwendet ).
Fatuhoku

4
ACHTUNG - Das Tool NETWORK LINK CONDITIONER wirkt sich auf die GESAMTE Maschine aus, nicht nur auf den iPhone Simulator. Wenn Sie wie bei Verwendung des Xamarin Build Hosts eine Remote-Verbindung zu Ihrem Mac für Entwickler herstellen, wird Ihre Verbindung unterbrochen.
John Kocktoasten

10

Da Xcode diese Funktion nicht bietet, werden Sie sich auf jeden Fall für eine Anwendung / ein Tool eines Drittanbieters entscheiden. Durch Deaktivieren des MAC-Netzwerks können Sie auch das iOS Simulator-Netzwerk deaktivieren.

Sie können Ihr MAC-Internet über " System Preferences..."> " Network" ausschalten und die gewünschte Netzwerkquelle ausschalten.

So schalten Sie Ihre MAC-Ethernet-Internetquelle aus: EtherNet-Netzwerkquelle

So schalten Sie Ihre MAC WiFi-Internetquelle aus (wenn sich Ihr MAC im Wifi-Internet befindet): Geben Sie hier die Bildbeschreibung ein



6

Eine wahrscheinlich verrückte Idee oder ein Patch:

Schalten Sie einfach die Flagge für die Erreichbarkeit des Netzwerks um

Dieser Code ist , die ich nutzen , um meine Flagge Laufzeit zu umschalten durch Auslösen ‚Simulator Speicher Warning‘ und seine völlig sicher, stellen Sie sicher , Code in sein sollte DEBUG - Modus nur

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

1
Ich habe eine globale Klasse mit einer statischen Funktion, die nach der Internetverbindung sucht. Rückkehr falseist eine großartige Idee. Keine Installation, und ich kann weiterhin remote arbeiten! Vielen Dank.
JCarlosR

Wo ist das isInternetAvailabledefiniert?!
CSawy

@CSawy Sein Flag, das den aktuellen Status der Internetverbindung in der Erreichbarkeitsklasse sendet.
Darshit Shah

4

Es gibt zwei Möglichkeiten, das Internet von IOS Simulator zu deaktivieren :

  • Trennen Sie Ihre Netzwerkverbindung
  • Schalten Sie Wi-Fi aus

Es ist der einfachste Weg


3

Sie können Little Snitch verwenden , um den Netzwerkverkehr für jeden einzelnen Prozess zu unterbrechen , einschließlich solcher, die auf dem iOS-Simulator ausgeführt werden. Auf diese Weise können Sie Ihre Internetverbindung beibehalten und Ihre laufende App trennen.


3

Mit Xcode 8.3 und iOS 10.3:

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

Stellen Sie sicher, dass Sie @available(iOS 10.3, *)oben in Ihrer Testsuite-Datei einfügen.

Sie können alternativ "Flugzeugmodus einschalten", wenn Sie dies bevorzugen.

Sobald Siri WLAN ausschaltet oder den Flugzeugmodus einschaltet, müssen Sie den Siri-Dialog schließen, der besagt, dass Siri Internet benötigt. Dies wird durch Drücken der Home-Taste erreicht, wodurch der Dialog geschlossen und zu Ihrer App zurückgekehrt wird.


Es funktioniert möglicherweise nicht unter iOS11GM. Ich kann die Wifi-Einstellung im Simulator nicht finden.
Bill Chan

2
Die Verwendung von Siri ist nicht die einzige Option mit Xcode 9, da jetzt mehrere Apps aktiviert werden können. Das Aktivieren der iOS-Einstellungs-App zum Ausschalten von WLAN funktioniert jetzt auch.
Brandenbyers

3

Wenn Ihre App eine Verbindung zu einer bestimmten Domain herstellt, können Sie diese einfach zu Ihrer hinzufügen /etc/hosts Datei und an eine nicht vorhandene IP in Ihrem lokalen Netzwerk weiterleiten Der Server ist nicht erreichbar.

sudo nano /etc/hosts

Fügen Sie die folgende Zeile hinzu:

192.168.1.123   example.com

oder verwenden 127.0.0.1Sie, wenn Sie keinen Webserver auf Ihrem lokalen Computer ausführen.



1

Eine einfache Lösung besteht darin, einen Flugzeugmodus für Ihren Mac zu erstellen. So geht's:

  • Gehen Sie in den Systemeinstellungen zu Netzwerk
  • Klicken Sie auf das Dropdown-Menü Standort
  • Klicken Sie auf das Plus-Symbol, um einen neuen Speicherort hinzuzufügen
  • Benennen Sie den neuen Standort mit "Flugzeugmodus" oder ähnlichem und klicken Sie auf "Fertig".
  • Wählen Sie den soeben erstellten Standort aus dem Dropdown-Menü Standort aus
  • Klicken Sie nacheinander auf jede verfügbare Netzwerkschnittstelle in der Liste links im Fenster und deaktivieren Sie jede
  • Klicken Sie auf das Menü iPv4 konfigurieren und wählen Sie Aus
  • Klicken Sie für Wi-Fi einfach auf die Schaltfläche Wi-Fi ausschalten
  • Klicken Sie auf Übernehmen. Dieser Speicherort blockiert alle Netzwerkaktivitäten

Wenn Sie das Netzwerk wieder aktivieren möchten, wählen Sie einfach Automatisch aus dem Dropdown-Menü Standort und klicken Sie auf Übernehmen


1

Ich würde vorschlagen, dass Sie Charles Proxy verwenden App auf dem Mac verwenden

Es ermöglicht Ihnen die Verwendung Bandwidth Throttle Funktion verwenden, die nur zum Anpassen der Netzwerkverbindung erstellt wurde

Stern / Stopp-Drosselung ⌘ command+ T
Drosselklappeneinstellungen ... ⌘ command+ T+⇧ shift


0

Sie können stattdessen das Netzwerk des Hosts deaktivieren!


6
Es ist unpraktisch, StackOverflow beim Debuggen der Verbindungsprobleme Ihrer App nicht zu sehen!
Fatuhoku

Lesen Sie die letzte Zeile der Frage: "(Ich verbinde mich remote mit dem Mac, um Code zu erstellen, derzeit keine andere Wahl, daher ist das Deaktivieren des Betriebssystemnetzwerks keine Option.) Außerdem wurde Ihr Vorschlag bereits vor zwei Jahren von benpalmer gegeben.
ToolmakerSteve

0

Wenn Sie mindestens 2 WLAN-Netzwerke zum Verbinden haben, können Sie ganz einfach einen Fehler im iOS-Simulator verwenden:

  1. Beenden Sie den Simulator (cmd-q), wenn er geöffnet ist
  2. Verbinden Sie Ihren Mac mit einem WLAN (möglicherweise ist er nicht mit dem Internet verbunden, egal)
  3. Starten Sie den Simulator (Menü: xCode-> Open Developer Tool-> iOs Simulator) und warten Sie, bis er geladen ist
  4. Schalten Sie das WLAN-Netzwerk auf ein anderes um
  5. profitieren

Der Fehler ist, dass der Simulator versucht, ein Netzwerk (IP?) Zu verwenden, das noch nicht verbunden ist.

Bis Sie den Simulator neu gestartet haben, gibt es kein Internet (auch wenn das erste WLAN-Netzwerk, mit dem Sie verbunden waren, über eine Internetverbindung verfügt). Sie können also Projekte ausführen (cmd-R) und stoppen (cmd-.), Um den Simulator ohne Verbindung zu verwenden. Ihr Mac wird jedoch verbunden.

Wenn Sie dann den verbundenen Simulator ausführen müssen, beenden Sie ihn einfach und starten Sie ihn.


0

Sie können den Netzwerkverbindungs-Conditioner auf Ihrem Mac verwenden. Sie können es von der Apple-Entwickler-Website herunterladen. Es sollte verfügbar sein, wo wir die älteren Versionen von Xcode und iOS bekommen. Mit diesem Netzwerk-Conditioner können Sie die Stärke des Netzwerks von WLAN auf kein Netzwerk ändern.

Auch wenn Sie den Netzwerkkonditionierer installieren, wird er in den Systemeinstellungen installiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.