È possibile disabilitare la rete in iOS Simulator?


430

Sto cercando di eseguire il debug di alcuni comportamenti incoerenti che vedo in un'applicazione che ottiene i suoi dati primari da Internet. Non vedo i problemi nel simulatore, solo sul dispositivo, quindi mi piacerebbe riprodurre la rete e l'ambiente di connettività nel simulatore.

Esiste un modo per disabilitare la rete nel simulatore?

(Mi sto collegando al Mac da remoto per codificare, nessun'altra scelta al momento, quindi disabilitare la rete del sistema operativo non è un'opzione).


Penso che puoi anche usare CharlesProxy per eseguire test simili
Honey

Risposte:


273

Temo di no: il simulatore condivide qualsiasi connessione di rete utilizzata dal sistema operativo. Ho archiviato un rapporto sui bug del radar sulla simulazione delle condizioni della rete qualche tempo fa; potresti considerare di fare lo stesso.


52
Non sono sicuro che sia in risposta a questo bug radar, ma gli Strumenti per gli sviluppatori ora includono uno strumento Condizionatore collegamento di rete .
samvermette,

7
Network Link Conditioner ti consente di specificare una percentuale di pacchetti da eliminare, ma per quanto ho visto non è purtroppo possibile disabilitare tutta la connettività.
Modocache,

11
Attualmente Network Link Conditioner consente di impostare una perdita di pacchetti del 100% e sembra funzionare.
Gabriele Petronella,

4
Poiché il simulatore condivide la connessione di rete della macchina host, è possibile disattivare Internet sulla macchina host per simulare "rete disabilitata". Non ideale ma funziona.
Adil Hussain,

5
Aspetta, Network Link Conditioner si applica all'intero computer host, non solo al simulatore. Come è utile? Posso semplicemente scollegare la mia Ethernet se lo desidero.
sudo,

1735

Utilizzare una semplice gabbia di Faraday per bloccare o limitare il livello del segnale RF esterno.

Puoi crearne uno tuo con un foglio di alluminio. Le aperture dovrebbero essere più piccole della lunghezza d' onda del servizio dati se questo è ciò che si desidera bloccare.

800 Mhz ha una lunghezza d'onda di 37 cm (14 "), 1900 Mhz ha una lunghezza d'onda di 16 cm (6").

Funziona meglio con un dispositivo reale che con il simulatore poiché il Mac è difficile da lavorare quando è all'interno della gabbia di Faraday ;-)

inserisci qui la descrizione dell'immagine


179
Solo un rapido suggerimento, se crei una gabbia di Faraday con una scrivania all'interno, il Mac sarà molto più facile da lavorare.
Kevin Laity,

86
la tua risposta è interessante anche se ha chiesto un simulatore
Vignesh Kumar

76
Dato che la domanda riguardava il simulatore, penso che ne farò uno solo in Photoshop e lo configurerò come sfondo del desktop. Probabilmente funzionerà, vero?
Timothy Lee Russell,

8
Questo "trucco" è stato usato davvero dai professionisti :) Ai tempi in cui lavoravo sui telefoni di prima generazione, usavamo solide scatole di biscotti. Non tutti i marchi hanno funzionato, ma quelli che lo hanno fatto sono stati perfetti.
Sarà il

11
dovrebbe essere accettato come risposta corretta! (Preferirei usare il plumbum box per iKryptonite)
gaussblurinc

309

Sì. In Xcode, puoi andare alla Xcodevoce di menu -> Open Developer Tools-> More Developer Toolse scaricare " Strumenti aggiuntivi per Xcode ", che avrà il Network Link Conditioner.

Usando questo strumento, puoi simulare diversi scenari di rete (come perdita al 100%, 3G, DNS ad alta latenza e altro) e puoi anche crearne di personalizzati.


7
se sei sul sito di sviluppo è nel pacchetto HARDWARE IO TOOLS FOR XCODE.
liquido

156
In qualche modo preferisco l'idea di racchiudere il mio dispositivo in un foglio.
Michael Robinson,

14
Da Xcode 8, Network Link Conditioner si trova nel pacchetto " Strumenti aggiuntivi per Xcode ".
ElegyD

6
Inoltre, la perdita del 100% limita la connessione dell'host, quindi non una soluzione pratica. Se sei pronto a sviluppare senza Internet, semplicemente staccare la spina dalla tua macchina sviluppatore è meglio di questa soluzione.
Jannie Theunissen,

7
Sta interessando tutto il mac. Voglio chiudere la connessione Internet solo per il simulatore, perché sto usando il mac da remoto ...
JCarlosR

48

L'unico modo per disabilitare la rete sul simulatore iOS che conosco è utilizzare strumenti come Little Snitch o Hands Off . Con loro puoi negare / bloccare qualsiasi connessione di rete in entrata e in uscita. Puoi configurarlo in modo che blocchi solo le connessioni dall'app del simulatore. Funziona come un firewall.


11
ma ciò non farà comportare il simulatore come se fossi offline. Renderà i tuoi server non disponibili, il che è una cosa abbastanza diversa.
Blitz,

1
in realtà, LordT, potrebbe essere sufficiente per le circostanze specifiche che ho ...!
Paul Hammond,

phix23 - hai una preferenza tra quei due strumenti suggeriti?
Paul Hammond,

No non l'ho fatto. Ho provato solo Hands off, perché ha più funzionalità.
Felix,

2
+1: Ho usato Little Snitch esattamente per questo scopo, test per assicurarmi che un'app simulata funzioni se la connessione di rete è interrotta.
hotpaw2,

18

Disattiva il tuo WiFi in Mac OSX e questo funziona a meraviglia!


1
Non aiuta l'OP che ha affermato specificamente che questa non era un'opzione, ma questa è una soluzione semplice e perfetta per me.
Johno,


11

Sto solo aggiornando la risposta alla data corrente. Da Xcode 4 (?) C'è un riquadro delle preferenze in /Applications/Utilitieschiamato Network Link Conditioner. O usi uno dei profili esistenti o crei il tuo profilo personalizzato con 0 Kbps su / giù e lasciato cadere al 100%.


1
Voglio solo aggiungere che se crei un'impostazione di rete personalizzata con larghezza di banda 0, la assume automaticamente come massima. È importante mettere il 100% di perdita di pacchetti.
Denis Kutlubaev,

Inoltre, vorrei aggiungere che questo metodo rimuove Internet da tutto, non solo dal simulatore. Potrebbe essere anche più semplice disattivare completamente Internet. Tuttavia, è uno strumento molto utile poiché puoi simulare Internet E e 3G di diversa qualità.
Denis Kutlubaev,

Questa è sicuramente la risposta migliore perché Network Link Conditionerè uno strumento Apple ufficiale ed è totalmente gratuito rispetto a Little Snitcho Hands Off.
Fatuhoku,

Hmm, sembra che questo strumento spenga la rete per tutto. Ho anche scoperto che non attiva le notifiche di raggiungibilità (ho usato github.com/stefanomondino/STMReactiveReachability ).
Fatuhoku,

4
ATTENZIONE: lo strumento NETWORK LINK CONDITIONER ha un impatto su TUTTA la macchina, non solo su iPhone Simulator. Se esegui il remote nel tuo mac per per dev, come faccio con Xamarin Build Host, la connessione si interromperà.
John Kocktoasten,

10

Dal momento che Xcode non fornisce tale funzionalità, sceglierai sicuramente un'applicazione / strumento di terze parti. La disattivazione della rete MAC aiuterà anche a disattivare la rete del simulatore iOS.

Puoi disattivare Internet MAC da " System Preferences..."> " Network" e disattivare la fonte di rete desiderata.

Per disattivare la fonte Internet MAC Ethernet: EtherNet Network Source

Per disattivare la sorgente Internet WiFi MAC (se il MAC è su Internet WiFi): inserisci qui la descrizione dell'immagine



6

Un'idea o patch probabilmente pazza:

Attiva o disattiva la bandiera della raggiungibilità della rete

Questo è il codice che uso per attivare il mio flag di runtime attivando "Simulator Memory Warning" e il suo COMPLETAMENTE SICURO, assicurati solo che il codice dovrebbe essere solo in modalità DEBUG

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

1
Ho una classe globale con una funzione statica che controlla la connessione a Internet. Il ritorno falseè un'ottima idea. Nessuna installazione e posso continuare a lavorare in remoto! Grazie.
JCarlosR,

Dove viene isInternetAvailabledefinito ?!
CSawy,

@CSawy La sua bandiera che invia lo stato corrente della connessione Internet nella classe di raggiungibilità.
Darshit Shah,

3

Puoi usare Little Snitch per tagliare il traffico di rete a qualsiasi singolo processo, inclusi quelli eseguiti sul simulatore iOS. In questo modo è possibile mantenere la connessione Internet e disconnettere l'app in esecuzione.


3

Con Xcode 8.3 e iOS 10.3:

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

Assicurati di includere @available(iOS 10.3, *)nella parte superiore del file della suite di test.

In alternativa, puoi attivare "Modalità aereo" se preferisci.

Una volta che Siri disattiva il wifi o attiva la Modalità aereo, dovrai chiudere il dialogo Siri che dice che Siri richiede Internet. Ciò si ottiene premendo il pulsante Home, che chiude la finestra di dialogo e torna all'app.


Potrebbe non funzionare su iOS11GM. Non riesco a trovare l'impostazione Wifi nel simulatore.
Bill Chan,

2
L'uso di Siri non è l'unica opzione con Xcode 9 ora che è possibile attivare più app. Anche l'attivazione dell'app Impostazioni iOS per disattivare il wifi ora funziona.
brandenbyers,

3

Esistono due modi per disabilitare Internet IOS Simulator:

  • Scollegare la connessione di rete
  • Disattiva il Wi-Fi

È il modo più semplice


3

Se la tua app si connette a un dominio specifico, puoi semplicemente aggiungerla al tuo /etc/hostsfile e indirizzarla a un IP inesistente nella tua rete locale ... Per l'applicazione sarà la stessa di se non ci fosse una connessione a Internet o il server non è raggiungibile.

sudo nano /etc/hosts

aggiungi la seguente riga:

192.168.1.123   example.com

oppure utilizzare 127.0.0.1se non si esegue un server Web sul proprio computer locale.



1

Una soluzione semplice è quella di creare una modalità aereo per il tuo Mac. Ecco come fare:

  • vai in Rete nelle Preferenze di Sistema
  • fai clic sul menu a discesa Posizione
  • fai clic sull'icona più per aggiungere una nuova posizione
  • denominare la nuova posizione "Modalità aereo" o simile e fare clic su "Fine"
  • seleziona la posizione appena creata dal menu a discesa Posizione
  • fare clic su ciascuna interfaccia di rete disponibile nell'elenco a sinistra della finestra a turno, disabilitandole
  • fai clic sul menu Configura iPv4 e scegli Disattivo
  • per il Wi-Fi, basta fare clic sul pulsante Disattiva Wi-Fi
  • fai clic su Applica e questa posizione bloccherà tutte le attività di rete

Quando desideri riattivare la rete, seleziona Automatico dal menu a discesa Posizione e fai clic su Applica


1

Ti suggerirei di utilizzare l' app Charles Proxy su Mac

Ti consente di utilizzare la Bandwidth Throttlefunzione creata solo per regolare la connessione di rete

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


0

potresti disabilitare invece la rete dell'host!


7
È scomodo non riuscire a vedere StackOverflow durante il debug dei problemi di connessione della tua app!
Fatuhoku,

Leggi l'ultima riga della domanda: "(Mi sto collegando al Mac da remoto per codificare, nessun'altra scelta al momento, quindi disabilitare la rete del sistema operativo non è un'opzione)." Inoltre, il tuo suggerimento è già stato dato due anni fa, da benpalmer.
ToolmakerSteve

0

Se hai almeno 2 reti wifi da connettere è un modo molto semplice è usare un bug nel simulatore iOS:

  1. uscire dal simulatore (cmd-q) se è aperto
  2. connetti il ​​tuo Mac a un wifi (potrebbe non essere collegato a internet, non importa)
  3. avvia il simulatore (menu: xCode-> Apri strumento di sviluppo-> iOs Simulator) e attendi che venga caricato
  4. passare la rete wifi ad un'altra
  5. profitto

Il bug è che il simulatore tenta di utilizzare una rete (IP?) Che non è già connessa.

Fino al riavvio del simulatore, non avrà Internet (anche se quella prima rete wifi che hai collegato aveva una connessione a Internet), quindi puoi eseguire (cmd-R) e interrompere (cmd-.) I progetti per utilizzare il simulatore senza connessione, ma il tuo Mac sarà collegato.

Quindi, se devi eseguire il simulatore collegato, basta uscire e avviarlo.


0

Puoi utilizzare il condizionatore di collegamento di rete sul tuo Mac. Puoi scaricarlo dal sito Web dello sviluppatore di Apple. Dovrebbe essere disponibile dove otteniamo le versioni precedenti di Xcode e iOS. Con questo condizionatore di rete puoi cambiare la potenza della rete da wifi a nessuna rete.

Inoltre, quando si installa il condizionatore di rete, questo viene installato nelle preferenze di sistema.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.