Est-il possible de désactiver le réseau dans iOS Simulator?

430

J'essaie de déboguer un comportement incohérent que je vois dans une application qui obtient ses données primaires d'Internet. Je ne vois pas les problèmes dans le simulateur, uniquement sur l'appareil, donc je voudrais reproduire l'environnement de réseau et de connectivité dans le simulateur.

Existe-t-il un moyen de désactiver le réseau dans le simulateur?

(Je me connecte au Mac à distance pour coder, aucun autre choix pour le moment, donc la désactivation du réseau OS n'est pas une option).

Paul Hammond
la source
Je pense que vous pouvez également utiliser CharlesProxy pour exécuter des tests similaires
Honey

Réponses:

273

Je crains que non: le simulateur partage la connexion réseau que le système d'exploitation utilise. J'ai déposé un rapport de bogue Radar sur la simulation des conditions du réseau il y a quelque temps; vous pourriez envisager de faire de même.

Noah Witherspoon
la source
52
Je ne sais pas si c'est en réponse à ce bogue radar, mais les outils de développement incluent désormais un outil Network Link Conditioner .
samvermette
7
Network Link Conditioner vous permet de spécifier un pourcentage de paquets à supprimer, mais pour autant que je sache, il n'y a malheureusement aucun moyen de désactiver toute la connectivité.
Modocache
11
Actuellement, Network Link Conditioner permet de définir une perte de paquets de 100%, et cela semble fonctionner.
Gabriele Petronella
4
Étant donné que le simulateur partage la connexion réseau de la machine hôte, vous pouvez désactiver Internet sur votre machine hôte pour simuler "réseau désactivé". Pas idéal, mais ça marche.
Adil Hussain
5
Attendez, Network Link Conditioner s'applique à l'ensemble de la machine hôte, pas seulement au simulateur. Comment est-ce utile? Je peux simplement débrancher mon Ethernet si je le veux.
sudo
1735

Utilisez une simple cage de Faraday pour bloquer ou limiter le niveau du signal RF externe.

Vous pouvez faire votre propre papier d'aluminium. Les ouvertures doivent être plus petites que la longueur d' onde de votre service de données si c'est ce que vous souhaitez bloquer.

800 Mhz a une longueur d'onde de 37 cm (14 "), 1900 Mhz a une longueur d'onde de 16 cm (6").

Cela fonctionne mieux avec un appareil réel qu'avec le simulateur car le Mac est difficile à travailler lorsqu'il est à l'intérieur de la cage de Faraday ;-)

entrez la description de l'image ici

progrmr
la source
179
Juste une suggestion rapide, si vous créez une cage Faraday sans rendez-vous avec un bureau à l'intérieur, le Mac sera beaucoup plus facile à utiliser.
Kevin Laity
86
votre réponse est intéressante même s'il a demandé un simulateur
vignesh kumar
76
Étant donné que la question concernait le simulateur, je pense que je vais en créer un dans Photoshop et le définir comme arrière-plan du bureau. Cela fonctionnera probablement, non?
Timothy Lee Russell
8
Cette «astuce» a été utilisée pour de vrai par des professionnels :) À l'époque où je travaillais sur les téléphones intelligents de première génération, nous utilisions des boîtes à biscuits solides. Toutes les marques n'ont pas fonctionné, mais celles qui l'ont fait étaient parfaites.
Will
11
devrait être accepté comme réponse correcte! (Je préfère utiliser une boîte à plomb pour iKryptonite)
gaussblurinc
309

Oui. Dans Xcode, vous pouvez aller à l' Xcodeélément de menu -> Open Developer Tools-> More Developer Toolset télécharger " Outils supplémentaires pour Xcode ", qui aura le conditionneur de liaison réseau.

En utilisant cet outil, vous pouvez simuler différents scénarios de réseau (tels que 100% de perte, 3G, DNS à latence élevée, etc.) et vous pouvez également créer vos propres scénarios personnalisés.

swathy valluri
la source
7
si vous êtes sur le site du développeur, c'est dans le package HARDWARE IO TOOLS FOR XCODE.
liquide
156
D'une certaine manière, je préfère l'idée de recouvrir mon appareil de papier d'aluminium.
Michael Robinson
14
Depuis Xcode 8, le conditionneur de liaison réseau est dans le package " Outils supplémentaires pour Xcode ".
ElegyD
6
De plus, une perte de 100% limite la connexion de l'hôte, donc pas une solution pratique. Si vous êtes prêt à développer sans Internet, il est préférable de simplement débrancher la prise de votre machine de développeur que cette solution.
Jannie Theunissen
7
Cela affecte tous les mac. Je veux quitter la connexion Internet uniquement pour le simulateur, car j'utilise le mac à distance ...
JCarlosR
48

La seule façon de désactiver le réseau sur le simulateur iOS que je connais est d'utiliser des outils comme Little Snitch ou Hands Off . Avec eux, vous pouvez refuser / bloquer toutes les connexions réseau sortantes et entrantes. Vous pouvez le configurer de sorte qu'il bloque uniquement les connexions de l'application de simulation. Fonctionne comme un pare-feu.

Felix
la source
11
mais cela ne fera pas en sorte que le simulateur se comporte comme si vous étiez hors ligne. Cela rendra vos serveurs indisponibles, ce qui est très différent.
Blitz
1
en fait, LordT, cela peut être suffisant pour les circonstances spécifiques que j'ai ...!
Paul Hammond
phix23 - avez-vous une préférence entre ces deux outils suggérés?
Paul Hammond
Non, je ne l'ai pas fait. J'ai seulement essayé Hands off, car il a plus de fonctionnalités.
Felix
2
+1: J'ai utilisé Little Snitch à cette fin, testant pour s'assurer qu'une application simulée fonctionne si la connexion réseau est rompue.
hotpaw2
18

Il suffit de désactiver votre WiFi dans Mac OSX, cela fonctionne un régal!

benpalmer
la source
1
N'aide pas le PO qui a spécifiquement déclaré que ce n'était pas une option, mais c'est une solution simple parfaite pour moi.
Johno
14

Télécharger un ensemble d'outils supplémentaires (conditionneur de liaison réseau)

La description

Exemple dans Sierra: entrez la description de l'image ici

entrez la description de l'image ici

Nik Kov
la source
9
Cela limite également la connexion de l'hôte, donc ce n'est pas mieux que de débrancher la prise sur votre machine de développeur - pas de collaboration ou de référence Internet. Donc, pas une solution pratique.
Jannie Theunissen
11

Il suffit de mettre à jour la réponse à la date actuelle. Depuis Xcode 4 (?), Un volet de préférences est /Applications/Utilitiesappelé Network Link Conditioner. Soit vous utilisez l'un des profils existants, soit vous créez votre propre profil personnalisé avec 0 Kbps Up / Downlink et 100% abandonné.


la source
1
Je veux juste ajouter que si vous créez un paramètre réseau personnalisé avec 0 bande passante, il le suppose automatiquement au maximum. Il est important de mettre 100% de perte de paquets.
Denis Kutlubaev
Je voudrais également ajouter que cette méthode supprime Internet de tout, pas seulement du simulateur. Il est peut-être encore plus facile de désactiver complètement Internet. Mais néanmoins, c'est un outil très pratique car vous pouvez simuler Internet E et 3G de qualité différente.
Denis Kutlubaev
C'est sûrement la meilleure réponse car Network Link Conditionerc'est un outil officiel d'Apple, et il est totalement gratuit, par rapport à Little Snitchou Hands Off.
fatuhoku
Hmm, on dirait que cet outil éteint le réseau pour tout. J'ai également constaté que cela ne déclenche pas les notifications d' accessibilité (j'ai utilisé github.com/stefanomondino/STMReactiveReachability ).
fatuhoku
4
ATTENTION: l'outil NETWORK LINK CONDITIONER a un impact sur la machine ENTIÈRE, pas seulement sur le simulateur iPhone. Si vous vous connectez à distance à votre mac pour for dev, comme j'utilise Xamarin Build Host, cela tuera votre connexion.
John Kocktoasten
10

Étant donné que Xcode ne fournit pas une telle fonctionnalité, vous allez certainement opter pour une application / un outil tiers. La désactivation du réseau MAC aidera également à désactiver le réseau du simulateur iOS.

Vous pouvez désactiver votre MAC Internet à partir de " System Preferences..."> " Network" et désactiver la source réseau désirée.

Pour désactiver votre source Internet Ethernet MAC: Source réseau EtherNet

Pour désactiver votre source Internet WiFi MAC (si votre MAC est sur Internet Wifi): entrez la description de l'image ici

Ali
la source
7

Vous pouvez limiter la connexion Internet avec une application tierce telle que

Charles: http://www.charlesproxy.com/

Appuyez sur commande + Maj + T sur un Mac pour configurer la limitation.

mabounassif
la source
6

Une idée ou un patch probablement fou:

Basculez simplement le drapeau de l'accessibilité du réseau

Il s'agit du code que j'utilise pour basculer le temps d'exécution de mon indicateur en déclenchant 'Simulator Memory Warning' et son COMPLETELY SAFE, assurez-vous simplement que le code doit être en mode DEBUG uniquement

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}
Darshit Shah
la source
1
J'ai une classe globale avec une fonction statique vérifiant la connexion Internet. Le retour falseest une excellente idée. Aucune installation, et je peux continuer à travailler à distance! Je vous remercie.
JCarlosR
Où est-ce isInternetAvailabledéfini?!
CSawy
@CSawy Son indicateur qui envoie l'état actuel de la connexion Internet dans la classe d'accessibilité.
Darshit Shah
3

Vous pouvez utiliser Little Snitch pour couper le trafic réseau vers n'importe quel processus individuel, y compris ceux qui s'exécutent sur le simulateur iOS. De cette façon, vous pouvez conserver votre connexion Internet et déconnecter votre application en cours d'exécution.

Eran Goldin
la source
3

Avec Xcode 8.3 et iOS 10.3:

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

Assurez-vous d'inclure @available(iOS 10.3, *)en haut de votre fichier de suite de tests.

Vous pouvez également "Activer le mode avion" si vous préférez.

Une fois que Siri désactive le wifi ou active le mode avion, vous devrez fermer la boîte de dialogue Siri qui dit que Siri nécessite Internet. Pour ce faire, appuyez sur le bouton d'accueil, qui ferme la boîte de dialogue et revient à votre application.

brandenbyers
la source
Cela peut ne pas fonctionner sur iOS11GM. Je ne trouve pas le paramètre Wifi dans le simulateur.
Bill Chan
2
L'utilisation de Siri n'est pas la seule option avec Xcode 9 maintenant qu'il est possible d'activer plusieurs applications. L'activation de l'application Paramètres iOS pour désactiver le wifi fonctionne désormais également.
brandenbyers
3

Il existe deux façons de désactiver Internet IOS Simulator:

  • Débranchez votre connexion réseau
  • Désactivez le Wi-Fi

C'est le moyen le plus simple

Daniel Beltrami
la source
3

Si votre application se connecte à un domaine spécifique, vous pouvez simplement l'ajouter à votre /etc/hostsfichier et l'acheminer vers une adresse IP non existante dans votre réseau local ... Pour l'application, ce sera la même que s'il n'y avait pas de connexion Internet ou le serveur n'est pas accessible.

sudo nano /etc/hosts

ajoutez la ligne suivante:

192.168.1.123   example.com

ou utilisez-le 127.0.0.1si vous n'exécutez pas de serveur Web sur votre ordinateur local.

Dion
la source
1

Une solution simple consiste à créer un mode avion pour votre Mac. Voici comment procéder:

  • aller dans Réseau dans les Préférences Système
  • cliquez sur le menu déroulant Emplacement
  • cliquez sur l'icône plus pour ajouter un nouvel emplacement
  • nommez le nouvel emplacement «Mode avion» ou similaire, puis cliquez sur «Terminé»
  • sélectionnez l'emplacement que vous venez de créer dans le menu déroulant Emplacement
  • cliquez successivement sur chaque interface réseau disponible dans la liste à gauche de la fenêtre, désactivant chacune
  • cliquez sur le menu Configurer iPv4 et choisissez Désactivé
  • pour le Wi-Fi, cliquez simplement sur le bouton Désactiver le Wi-Fi
  • cliquez sur Appliquer, et cet emplacement bloquera toute activité réseau

Lorsque vous souhaitez réactiver la mise en réseau, sélectionnez simplement Automatique dans le menu déroulant Emplacement, puis cliquez sur Appliquer

ut9081
la source
1

Je vous suggère d'utiliser l' application Charles Proxy sur Mac

Il vous permet d'utiliser une Bandwidth Throttlefonctionnalité qui a été créée juste pour ajuster la connexion réseau

Star / Stop Throttling ⌘ command+ T
Throttle Settings ... ⌘ command+ T+⇧ shift

yoAlex5
la source
0

vous pouvez désactiver le réseau de l'hôte à la place!

wshcdr
la source
7
Il n'est pas pratique de ne pas voir StackOverflow lors du débogage des problèmes de connexion de votre application!
fatuhoku
Lisez la dernière ligne de la question: "(Je me connecte au Mac à distance pour coder, aucun autre choix pour le moment, donc la désactivation du réseau OS n'est pas une option)." D'ailleurs, votre suggestion a déjà été donnée il y a deux ans, par benpalmer.
ToolmakerSteve
0

Si vous avez au moins 2 réseaux wifi à connecter c'est un moyen très simple d'utiliser un bug dans le simulateur iOS:

  1. quitter le simulateur (cmd-q) s'il est ouvert
  2. connectez votre Mac à un wifi (il peut ne pas être connecté à Internet, peu importe)
  3. lancez le simulateur (menu: xCode-> Open Developer Tool-> iOs Simulator) et attendez qu'il soit chargé
  4. passer du réseau wifi à un autre
  5. profit

Le bogue est que le simulateur essaie d'utiliser un réseau (IP?) Qui n'est pas déjà connecté.

Jusqu'à ce que vous relanciez le simulateur, il n'aura pas d'Internet (même si le premier réseau wifi que vous avez connecté avait une connexion Internet), vous pouvez donc exécuter (cmd-R) et arrêter (cmd-.) Projet (s) pour utiliser le simulateur sans connexion, mais votre Mac sera connecté.

Ensuite, si vous devez exécuter le simulateur connecté, quittez-le et lancez-le.

iGore
la source
0

Vous pouvez utiliser le conditionneur de liaison réseau sur votre Mac. Vous pouvez le télécharger sur le site Web des développeurs Apple. Il devrait être disponible là où nous obtenons les anciennes versions de Xcode et iOS. Avec ce conditionneur de réseau, vous pouvez changer la force du réseau de wifi à aucun réseau.

De plus, lorsque vous installez le conditionneur de réseau, il est installé dans les préférences système.

Astha Trivedi
la source