É possível desativar a rede no iOS Simulator?

430

Estou tentando depurar algum comportamento inconsistente que estou vendo em um aplicativo que obtém seus dados primários da Internet. Não vejo os problemas no simulador, apenas no dispositivo, portanto, gostaria de reproduzir o ambiente de rede e conectividade no simulador.

Existe alguma maneira de desativar a rede no simulador?

(Estou conectando-me ao Mac remotamente para codificar, não há outra opção no momento, portanto, desativar a rede do SO não é uma opção).

Paul Hammond
fonte
Eu acho que você também pode usar CharlesProxy para executar testes semelhantes
Mel

Respostas:

273

Receio que não - o simulador compartilha qualquer conexão de rede que o sistema operacional esteja usando. Arquivei um relatório de bug do Radar sobre a simulação de condições de rede há algum tempo; você pode considerar fazer o mesmo.

Noah Witherspoon
fonte
52
Não tenho certeza se está em resposta a esse bug do radar, mas as Ferramentas do desenvolvedor agora incluem uma ferramenta Condicionador de link de rede .
samvermette
7
O Network Link Conditioner permite que você especifique uma porcentagem de pacotes a serem descartados, mas até onde eu vi, infelizmente, não há como desativar toda a conectividade.
Modocache
11
Atualmente, o Network Link Conditioner permite definir 100% de perda de pacotes e parece funcionar.
Gabriele Petronella 23/10
4
Como o Simulador compartilha a conexão de rede da máquina host, você pode desligar a Internet na máquina host para simular a "rede desativada". Não é ideal, mas funciona.
Adil Hussain
5
Aguarde, o condicionador de link de rede se aplica a toda a máquina host, não apenas ao simulador. Como isso é útil? Eu posso simplesmente desconectar minha ethernet, se eu quiser.
Sudo
1734

Use uma gaiola simples de Faraday para bloquear ou limitar o nível do sinal de RF externo.

Você pode fazer o seu próprio com papel de alumínio. As aberturas devem ser menores que o comprimento de onda de do seu serviço de dados, se é isso que você deseja bloquear.

800 Mhz tem um comprimento de onda de 37 cm (14 "), 1900 Mhz tem um comprimento de onda de 16 cm (6").

Isso funciona melhor com um dispositivo real do que com o simulador, pois é difícil trabalhar no Mac quando dentro da gaiola de Faraday ;-)

insira a descrição da imagem aqui

progrmr
fonte
179
Apenas uma sugestão rápida: se você criar uma gaiola de Faraday com uma mesa dentro, o Mac será muito mais fácil de trabalhar.
precisa
86
sua resposta é interessante, embora ele pediu simulador
vignesh Kumar
76
Como a pergunta era sobre o simulador, acho que vou fazer um no Photoshop e defini-lo como plano de fundo da área de trabalho. Provavelmente isso funcionará, certo?
Timothy Lee Russell
8
Esse 'truque' foi usado de verdade por profissionais :) Quando eu trabalhava nos primeiros smartphones da geração anterior, costumávamos usar latas de biscoito robustas. Nem todas as marcas funcionaram, mas as que foram perfeitas.
Will
11
deve ser aceito como resposta correta! (Eu prefiro usar a caixa plumbum para iKryptonite)
gaussblurinc
309

Sim. No Xcode, você pode ir para o Xcodeitem de menu -> Open Developer Tools-> More Developer Toolse baixar " Ferramentas Adicionais para o Xcode ", que terá o Condicionador de Link de Rede.

Usando essa ferramenta, você pode simular diferentes cenários de rede (como 100% de perda, 3G, DNS de alta latência e mais) e também pode criar seus próprios cenários personalizados.

swathy valluri
fonte
7
se você estiver no site do desenvolvedor, está no pacote HARDWARE IO TOOLS FOR XCODE.
liquid
156
De alguma forma, prefiro a ideia de envolver meu dispositivo em papel alumínio.
22714 Michael Michael Jackson
14
Desde o Xcode 8, o Condicionador de Link de Rede está no pacote " Ferramentas Adicionais para o Xcode ".
ElegyD
6
Além disso, 100% de perda limita a conexão do host, não sendo uma solução prática. Se você está preparado para desenvolver sem a Internet, basta puxar o plugue da máquina do desenvolvedor e melhor do que esta solução.
Jannie Theunissen
7
Está afetando todo o mac. Eu quero parar a conexão à internet apenas para o simulador, porque eu estou usando o Mac remotamente ...
JCarlosR
48

A única maneira de desativar a rede no simulador do iOS que conheço é usar ferramentas como Little Snitch ou Hands Off . Com eles, você pode negar / bloquear qualquer conexão de rede de entrada e saída. Você pode configurá-lo para bloquear apenas as conexões do aplicativo simulador. Funciona como um firewall.

Felix
fonte
11
mas isso não fará com que o simulador se comporte como se estivesse offline. Isso deixará seus servidores indisponíveis, o que é uma coisa completamente diferente.
Blitz
1
na verdade, SenhorT, isso pode ser suficiente para as circunstâncias específicas que tenho ...!
Paul Hammond
phix23 - você tem preferência entre essas duas ferramentas sugeridas?
Paul Hammond
Não, eu não tenho. Eu só tentei o Hands off, porque tem mais recursos.
Felix
2
+1: usei o Little Snitch exatamente para esse fim, testando para garantir que um aplicativo simulado funcione se a conexão de rede estiver interrompida.
hotpaw2
18

Basta desligar o seu Wi-Fi no Mac OSX, isso é um prazer!

benpalmer
fonte
1
Não ajuda o OP que afirmou especificamente que essa não era uma opção, mas esta é uma solução simples e perfeita para mim.
Johno 28/02
14

Download do pacote de ferramentas adicionais (condicionador de link de rede)

Descrição

Exemplo no Sierra: insira a descrição da imagem aqui

insira a descrição da imagem aqui

Nik Kov
fonte
9
Isso também limita a conexão do host, portanto, não é melhor do que desligar a máquina do desenvolvedor - sem colaboração ou referência da Internet. Portanto, não é uma solução prática.
Jannie Theunissen
11

Apenas atualizando a resposta para a data atual. Desde o Xcode 4 (?), Existe um painel de preferências /Applications/Utilitieschamado Network Link Conditioner. Você usa um dos perfis existentes ou cria seu próprio perfil personalizado com 0 Kbps Up / Downlink e 100% eliminado.


fonte
1
Só quero acrescentar que, se você criar uma configuração de rede personalizada com largura de banda 0, ela assumirá automaticamente o máximo. É importante colocar 100% de perda de pacotes.
Denis Kutlubaev 29/08/2012
Além disso, gostaria de acrescentar que esse método remove a Internet de tudo, não apenas do simulador. Talvez seja ainda mais fácil desligar completamente a Internet. Mas, no entanto, é uma ferramenta muito útil, pois você pode simular internet E e 3G de qualidade diferente.
Denis Kutlubaev 29/08/2012
Essa certamente é a melhor resposta, porque Network Link Conditioneré uma ferramenta oficial da Apple e é totalmente gratuita, em comparação com Little Snitchou Hands Off.
fatuhoku 8/09/14
Hmm, parece que essa ferramenta desliga a rede para tudo. Também descobri que ele não aciona notificações de acessibilidade (usei github.com/stefanomondino/STMReactiveReachability ).
fatuhoku 8/09/14
4
Esteja avisado - a ferramenta CONDICIONADOR DE LINK DA REDE afeta a máquina INTEIRA, não apenas o iPhone Simulator. Se você se conectar remotamente ao seu Mac para dev, como eu uso o Xamarin Build Host, isso matará sua conexão.
John Kocktoasten
10

Como o Xcode não fornece esse recurso, você definitivamente utilizará algum aplicativo / ferramenta de terceiros. Desativar a rede MAC também ajudará a desativar a rede do iOS Simulator.

Você pode desligar a Internet MAC em " System Preferences..."> " Network" e desligar a fonte de rede desejada.

Para desativar sua fonte de internet Ethernet MAC: Fonte de Rede EtherNet

Para desativar sua fonte de Internet WiFi MAC (se o seu MAC estiver na Internet Wifi): insira a descrição da imagem aqui

Todos
fonte
7

Você pode acelerar a conexão à Internet com um aplicativo de terceiros, como

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

Pressione command + shift + T em um Mac para configurar a regulagem.

mabounassif
fonte
6

Uma ideia ou patch provavelmente louco:

Apenas alterne o sinalizador de acessibilidade da rede

Esse é o código que eu uso para alternar meu tempo de execução do sinalizador, disparando o 'Simulator Memory Warning' e seu COMPLETAMENTE SEGURO, apenas certifique-se de que o código esteja apenas no modo DEBUG

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}
Darshit Shah
fonte
1
Eu tenho uma classe global com uma função estática verificando a conexão com a internet. O retorno falseé uma ótima idéia. Nenhuma instalação e posso continuar trabalhando remotamente! Obrigado.
JCarlosR
Onde isso está isInternetAvailabledefinido ?!
CSawy
@CSawy Seu sinalizador que envia o status atual da conexão com a Internet na classe de acessibilidade.
Darshit Shah 06/09/19
3

Você pode usar o Little Snitch para cortar o tráfego da rede para qualquer processo individual, incluindo os que são executados no simulador do iOS. Dessa forma, você pode manter sua conexão com a Internet e desconectar o aplicativo em execução.

Eran Goldin
fonte
3

Com o Xcode 8.3 e iOS 10.3:

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

Certifique-se de incluir @available(iOS 10.3, *)na parte superior do arquivo do conjunto de testes.

Como alternativa, você pode "Ativar o modo avião", se preferir.

Depois que o Siri desligar o Wi-Fi ou ativar o Modo Avião, será necessário descartar o diálogo Siri que diz que o Siri requer Internet. Isso é feito pressionando o botão home, que dispensa o diálogo e retorna ao seu aplicativo.

brandenbyers
fonte
Pode não funcionar no iOS11GM. Não consigo encontrar a configuração Wifi no simulador.
Bill Chan
2
Usar o Siri não é a única opção do Xcode 9, agora que é possível ativar vários aplicativos. A ativação do aplicativo Configurações do iOS para desligar o Wi-Fi agora também funciona.
brandenbyers
3

duas maneiras de desativar a Internet do IOS Simulator:

  • Desconecte sua conexão de rede
  • Desativar o Wi-Fi

É a maneira mais simples

Daniel Beltrami
fonte
3

Se o seu aplicativo estiver se conectando a um domínio específico, você pode simplesmente adicioná-lo ao seu /etc/hostsarquivo e encaminhá-lo para um IP inexistente na sua rede local ... Para o aplicativo, será o mesmo que se não houvesse conexão com a Internet ou o servidor não está acessível.

sudo nano /etc/hosts

adicione a seguinte linha:

192.168.1.123   example.com

ou use 127.0.0.1se você não estiver executando um servidor da web em sua máquina local.

Dion
fonte
2

Você pode usar OHHTTPStubs e stub as solicitações de rede para URLs específicos para falhar.

mwhuss
fonte
1

Uma solução simples é criar um modo de avião para o seu Mac. Aqui está como fazer isso:

  • vá para Rede em Preferências do sistema
  • clique no menu suspenso Localização
  • clique no ícone de adição para adicionar um novo local
  • nomeie o novo local como 'Modo avião' ou similar e clique em 'Concluído'
  • selecione o local que você acabou de criar no menu suspenso Localização
  • clique em cada interface de rede disponível na lista à esquerda da janela, desativando cada uma delas
  • clique no menu Configure iPv4 e escolha Off
  • para Wi-Fi, basta clicar no botão Desligar Wi-Fi
  • clique em Aplicar e este local bloqueará toda a atividade da rede

Quando quiser ativar a rede novamente, basta selecionar Automático no menu suspenso Localização e clique em Aplicar

ut9081
fonte
1

Eu sugiro que você use o aplicativo Charles Proxy no Mac

Permite usar o Bandwidth Throttlerecurso criado apenas para ajustar a conexão de rede

Star / Stop Throttling ⌘ command+ T
Configurações do acelerador ... ⌘ command+ T+⇧ shift

yoAlex5
fonte
0

você pode desativar a rede do host!

wshcdr
fonte
7
É inconveniente não poder ver o StackOverflow ao depurar os problemas de conexão do seu aplicativo!
fatuhoku 8/09/14
Leia a última linha da pergunta: "(Estou me conectando ao Mac remotamente para codificar, não há outra opção no momento, portanto, desativar a rede do SO não é uma opção)". Além disso, sua sugestão já foi dada há dois anos, por benpalmer.
Home
0

Se você tem pelo menos 2 redes wifi para conectar, é uma maneira muito simples: usar um bug no simulador do iOS:

  1. saia do simulador (cmd-q) se estiver aberto
  2. conecte seu Mac a um wifi (pode não estar conectado à Internet, não importa)
  3. inicie o simulador (menu: xCode-> Abra a Ferramenta de Desenvolvedor-> iOs Simulator) e aguarde enquanto ele está carregado
  4. mudar a rede wifi para outra
  5. lucro

O problema é que o simulador tenta usar uma rede (IP?) Que ainda não está conectada.

Até que você reinicie o simulador - ele não terá Internet (mesmo que a primeira rede Wi-Fi conectada tenha conexão com a Internet), para que você possa executar (cmd-R) e interromper (cmd-.) O (s) projeto (s) para usar o simulador sem conexão, mas o seu Mac estará conectado.

Então, se você precisar executar o simulador conectado, basta sair e iniciá-lo.

iGore
fonte
0

Você pode usar o condicionador de link de rede no seu Mac. Você pode baixá-lo no site do desenvolvedor da apple. Deve estar disponível onde obtemos as versões mais antigas do Xcode e iOS. Com este condicionador de rede, você pode alterar a força da rede de wifi para nenhuma rede.

Além disso, quando você instala o condicionador de rede, ele é instalado nas preferências do sistema.

Astha Trivedi
fonte