¿Es posible deshabilitar la red en iOS Simulator?

430

Estoy tratando de depurar un comportamiento inconsistente que estoy viendo en una aplicación que obtiene sus datos principales de Internet. No veo los problemas en el simulador, solo en el dispositivo, por lo que me gustaría reproducir el entorno de red y conectividad en el simulador.

¿Hay alguna forma de deshabilitar la red en el simulador?

(Me estoy conectando a la Mac de forma remota para codificar, no hay otra opción en este momento, por lo que deshabilitar la red del sistema operativo no es una opción).

Paul Hammond
fuente
Creo que también puedes usar CharlesProxy para ejecutar pruebas similares
Honey

Respuestas:

273

Me temo que no, el simulador comparte cualquier conexión de red que esté usando el sistema operativo. Hace un tiempo presenté un informe de error de radar sobre la simulación de condiciones de red; podrías considerar hacer lo mismo.

Noah Witherspoon
fuente
52
No estoy seguro de si es en respuesta a este error de radar, pero las Herramientas para desarrolladores ahora incluyen una herramienta de acondicionador de enlace de red .
samvermette
77
Network Link Conditioner le permite especificar un porcentaje de paquetes que se descartarán, pero, por lo que he visto, desafortunadamente no hay forma de desactivar toda la conectividad.
modocache
11
Actualmente, Network Link Conditioner permite establecer una pérdida de paquetes del 100%, y parece funcionar.
Gabriele Petronella
44
Dado que el simulador comparte la conexión de red de la máquina host, puede apagar Internet en su máquina host para simular "red deshabilitada". No es ideal, pero funciona.
Adil Hussain
55
Espere, el Acondicionador de enlace de red se aplica a toda la máquina host, no solo al simulador. ¿Cómo es esto útil? Simplemente puedo desconectar mi ethernet si quiero eso.
sudo
1735

Use una jaula de Faraday simple para bloquear o limitar el nivel de señal de RF externo.

Puedes hacer el tuyo con papel de aluminio. Las aberturas deben ser más pequeñas que la longitud de onda de su servicio de datos si eso es lo que desea bloquear.

800 Mhz tiene una longitud de onda de 37 cm (14 "), 1900 Mhz tiene una longitud de onda de 16 cm (6").

Esto funciona mejor con un dispositivo real que con el simulador, ya que es difícil trabajar con Mac cuando está dentro de la jaula de Faraday ;-)

ingrese la descripción de la imagen aquí

programador
fuente
179
Solo una sugerencia rápida, si crea una jaula de Faraday con un escritorio dentro, la Mac será mucho más fácil de trabajar.
Kevin Laity
86
su respuesta es interesante a pesar de que pidió un simulador
vignesh kumar
76
Como la pregunta era sobre el simulador, creo que haré uno de estos en Photoshop y lo configuraré como fondo de escritorio. Eso probablemente funcionará, ¿verdad?
Timothy Lee Russell
8
Este 'truco' ha sido utilizado de verdad por profesionales :) Cuando trabajaba en los teléfonos inteligentes de primera generación, solíamos usar latas de galletas robustas. No todas las marcas funcionaron, pero las que lo hicieron fueron perfectas.
Will
11
debe ser aceptado como respuesta correcta! (Prefiero usar plumbum box para iKryptonite)
gaussblurinc
309

Si. En Xcode, puede ir al Xcodeelemento de menú -> Open Developer Tools-> More Developer Toolsy descargar " Herramientas adicionales para Xcode ", que tendrá el Acondicionador de enlace de red.

Con esta herramienta, puede simular diferentes escenarios de red (como pérdida del 100%, 3G, DNS de alta latencia y más) y también puede crear sus propios escenarios personalizados.

valluri swathy
fuente
77
si está en el sitio del desarrollador, está en el paquete HARDWARE IO TOOLS FOR XCODE.
líquido
156
De alguna manera, prefiero la idea de encerrar mi dispositivo en papel de aluminio.
Michael Robinson
14
Desde Xcode 8, el acondicionador de enlace de red está en el paquete " Herramientas adicionales para Xcode ".
ElegyD
66
Además, la pérdida del 100% acelera la conexión del host, por lo que no es una solución práctica. Si está preparado para desarrollar sin Internet, simplemente desconectar el equipo de su desarrollador es mejor que esta solución.
Jannie Theunissen
77
Está afectando a todos los mac. Quiero cerrar la conexión a Internet solo para el simulador, porque estoy usando la Mac de forma remota ...
JCarlosR
48

La única forma de deshabilitar la red en el simulador de iOS que conozco es usando herramientas como Little Snitch o Hands Off . Con ellos puede negar / bloquear cualquier conexión de red saliente o entrante. Puede configurarlo para que solo bloquee las conexiones desde la aplicación del simulador. Funciona como un firewall.

Felix
fuente
11
pero eso no hará que el simulador se comporte como si estuvieras fuera de línea. Simplemente hará que sus servidores no estén disponibles, lo cual es algo muy diferente.
Blitz
1
en realidad, LordT, ¡eso puede ser suficiente para las circunstancias específicas que tengo ...!
Paul Hammond el
phix23: ¿tiene preferencia entre esas dos herramientas sugeridas?
Paul Hammond el
No, no lo he hecho. Solo he probado Hands off, porque tiene más funciones.
Felix
2
+1: He usado Little Snitch exactamente para este propósito, probando para asegurarme de que una aplicación simulada funcione si la conexión de red está interrumpida.
hotpaw2
18

Simplemente apague su WiFi en Mac OSX, ¡esto funciona de maravilla!

benpalmer
fuente
1
No ayuda al OP que declaró específicamente que esta no era una opción, pero esta es una solución simple y perfecta para mí.
Johno
14

Descargue el paquete de herramientas adicionales (Network Link Conditioner)

Descripción

Ejemplo en Sierra: ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Nik Kov
fuente
99
Esto también acelera la conexión del host, por lo que no es mejor que desconectar el equipo de su desarrollador, sin colaboración ni referencia de Internet. Entonces, no es una solución práctica.
Jannie Theunissen
11

Simplemente actualizando la respuesta a la fecha actual. Desde Xcode 4 (?) Hay un panel de preferencias en /Applications/Utilitiesllamado Network Link Conditioner. O utiliza uno de los perfiles existentes o crea su propio perfil personalizado con 0 Kbps de enlace ascendente / descendente y 100% eliminado.


fuente
1
Solo quiero agregar, que si crea una configuración de red personalizada con ancho de banda 0, automáticamente la asume como un máximo. Es importante poner el 100% de pérdida de paquetes.
Denis Kutlubaev
Además, me gustaría agregar que este método elimina Internet de todo, no solo del simulador. Puede ser aún más fácil apagar completamente Internet. Sin embargo, es una herramienta muy útil ya que puede simular Internet E y 3G de diferente calidad.
Denis Kutlubaev
Esta es seguramente la mejor respuesta porque Network Link Conditioneres una herramienta oficial de Apple, y es totalmente gratuita, en comparación con Little Snitcho Hands Off.
fatuhoku
Hmm, parece que esta herramienta apaga la red para todo. También descubrí que no activa las notificaciones de accesibilidad (utilicé github.com/stefanomondino/STMReactiveReachability ).
fatuhoku
44
Tenga cuidado: la herramienta NETWORK LINK CONDITIONER afecta a TODA la máquina, no solo al iPhone Simulator. Si te remotas a tu Mac para desarrolladores, como lo hago con el host de compilación Xamarin, matará tu conexión.
John Kocktoasten
10

Dado que Xcode no proporciona dicha función, definitivamente usará alguna aplicación / herramienta de terceros. Apagar la red MAC también ayudará a apagar la red del simulador de iOS.

Puede apagar su MAC internet desde " System Preferences..."> " Network" y apagar la fuente de red deseada.

Para apagar su fuente de internet MAC Ethernet: Fuente de red EtherNet

Para apagar su fuente de Internet MAC WiFi (si su MAC está en Internet Wifi): ingrese la descripción de la imagen aquí

Ali
fuente
7

Puede regular la conexión a Internet con una aplicación de terceros, como

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

Presiona comando + shift + T en una Mac para configurar la aceleración.

mabounassif
fuente
6

Una idea o parche probablemente loco:

Solo alterna la bandera de alcance de red

Este es el código que utilizo para cambiar mi tiempo de ejecución mediante la activación de la bandera 'Memoria Simulador de advertencia' y su completamente seguro, sólo asegúrese de código debe estar en modo de depuración solamente

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}
Darshit Shah
fuente
1
Tengo una clase global con una función estática que verifica la conexión a Internet. El regreso falsees una gran idea. ¡Sin instalaciones, y puedo seguir trabajando de forma remota! Gracias.
JCarlosR
¿Dónde se isInternetAvailabledefine esto ?
CSawy
@CSawy Su bandera que envía el estado actual de la conexión a Internet en la clase de accesibilidad.
Darshit Shah
3

Puede usar Little Snitch para cortar el tráfico de red a cualquier proceso individual, incluidos los que se ejecutan en el simulador de iOS. De esa manera, puede mantener su conexión a Internet y desconectar su aplicación en ejecución.

Eran Goldin
fuente
3

Con Xcode 8.3 y iOS 10.3:

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

Asegúrese de incluir @available(iOS 10.3, *)en la parte superior de su archivo de suite de prueba.

Alternativamente, puede "Activar el modo avión" si lo prefiere.

Una vez que Siri apague el wifi o active el Modo avión, deberá cerrar el diálogo de Siri que dice que Siri requiere internet. Esto se logra presionando el botón de inicio, que cierra el diálogo y vuelve a su aplicación.

Brandenbyers
fuente
Es posible que no funcione en iOS11GM. No puedo encontrar la configuración de Wifi en el simulador.
Bill Chan
2
Usar Siri no es la única opción con Xcode 9 ahora que es posible activar múltiples aplicaciones. La activación de la aplicación de configuración de iOS para activar wifi ahora también funciona.
brandenbyers
3

Hay dos formas de deshabilitar el simulador de Internet de IOS:

  • Desenchufe su conexión de red
  • Desactiva el wifi

Es la forma más sencilla

Daniel Beltrami
fuente
3

Si su aplicación se está conectando a un dominio específico, simplemente puede agregarlo a su /etc/hostsarchivo y enrutarlo a una IP no existente en su red local ... Para la aplicación será lo mismo que si no hubiera conexión a Internet o No se puede acceder al servidor.

sudo nano /etc/hosts

agregue la siguiente línea:

192.168.1.123   example.com

o úselo 127.0.0.1si no está ejecutando un servidor web en su máquina local.

Dion
fuente
1

Una solución simple es crear un Modo avión para tu Mac. Aquí es cómo hacer esto:

  • ir a la red en Preferencias del sistema
  • haga clic en el menú desplegable Ubicación
  • haga clic en el ícono más para agregar una nueva ubicación
  • nombra la nueva ubicación 'Modo avión' o similar y haz clic en 'Listo'
  • seleccione la ubicación que acaba de crear en el menú desplegable Ubicación
  • haga clic en cada interfaz de red disponible en la lista a la izquierda de la ventana, deshabilitando cada una
  • haga clic en el menú Configurar iPv4 y elija Desactivar
  • para Wi-Fi, simplemente haga clic en el botón Desactivar Wi-Fi
  • haga clic en Aplicar, y esta ubicación bloqueará toda la actividad de la red

Cuando desee volver a activar la red, simplemente seleccione Automático en el menú desplegable Ubicación y haga clic en Aplicar

ut9081
fuente
1

Te sugiero que uses la aplicación Charles Proxy en Mac

Le permite usar la Bandwidth Throttlefunción que se creó solo para ajustar la conexión de red

Acelerador de estrella / parada ⌘ command+ T
Configuración del acelerador ... ⌘ command+ T+⇧ shift

yoAlex5
fuente
0

¡podría deshabilitar la red del host en su lugar!

wshcdr
fuente
77
¡Es inconveniente no poder ver StackOverflow al depurar los problemas de conexión de su aplicación!
fatuhoku
Lea la última línea de la pregunta: "(Me estoy conectando a la Mac de forma remota para codificar, no hay otra opción en este momento, por lo que deshabilitar la red del sistema operativo no es una opción)". Además, su sugerencia ya fue dada hace dos años, por benpalmer.
ToolmakerSteve
0

Si tiene al menos 2 redes wifi para conectarse, una forma muy simple es usar un error en el simulador de iOS:

  1. salir del simulador (cmd-q) si está abierto
  2. conecta tu Mac a un wifi (puede que no esté conectado a internet, no importa)
  3. inicie el simulador (menú: xCode-> Open Developer Tool-> iOs Simulator) y espere mientras se carga
  4. cambiar la red wifi a otra
  5. lucro

El error es que el simulador intenta usar una red (IP?) Que no está conectada todavía.

Hasta que reinicies el simulador, no tendrá Internet (incluso si esa primera red wifi que conectaste tenía conexión a Internet), por lo que puedes ejecutar (cmd-R) y detener (cmd-) proyectos para usar el simulador sin conexión, pero tu Mac estará conectada.

Luego, si necesita ejecutar el simulador conectado, simplemente salga y ejecútelo.

iGore
fuente
0

Puede usar el acondicionador de enlace de red en su Mac. Puede descargarlo del sitio web del desarrollador de Apple. Debería estar disponible donde obtengamos las versiones anteriores de Xcode e iOS. Con este acondicionador de red, puede cambiar la fuerza de la red de wifi a ninguna red.

Además, cuando instala el acondicionador de red, se instala en las preferencias del sistema.

Astha Trivedi
fuente