Czy można wyłączyć sieć w symulatorze iOS?


430

Próbuję debugować niespójne zachowanie, które widzę w aplikacji, która pobiera swoje podstawowe dane z Internetu. Nie widzę problemów w symulatorze, tylko na urządzeniu, dlatego chciałbym odtworzyć środowisko sieci i łączności w symulatorze.

Czy jest jakiś sposób na wyłączenie sieci w symulatorze?

(Łączę się zdalnie z komputerem Mac, aby kodować, nie ma teraz innego wyboru, więc wyłączenie sieci systemu operacyjnego nie jest opcją).


Myślę, że możesz także użyć CharlesProxy do przeprowadzenia podobnych testów
Honey

Odpowiedzi:


273

Obawiam się, że nie - symulator udostępnia to samo połączenie sieciowe, z którego korzysta system operacyjny. Jakiś czas temu złożyłem raport o błędzie radaru dotyczący symulacji warunków sieciowych; możesz rozważyć zrobienie tego samego.


52
Nie jestem pewien, czy jest to odpowiedź na ten błąd radaru, ale Narzędzia dla programistów zawierają teraz narzędzie Network Link Conditioner .
samvermette,

7
Network Link Conditioner pozwala określić procent pakietów, które mają być odrzucane, ale o ile wiem, niestety nie ma możliwości wyłączenia wszystkich połączeń.
Modocache

11
Obecnie Network Link Conditioner pozwala ustawić 100% utraty pakietów i wydaje się, że działa.
Gabriele Petronella

4
Ponieważ Symulator współdzieli połączenie sieciowe komputera hosta, możesz wyłączyć internet na komputerze hosta, aby zasymulować „sieć wyłączona”. Nie idealne, ale działa.
Adil Hussain

5
Poczekaj, Network Link Conditioner dotyczy całej maszyny hosta, a nie tylko symulatora. Jak to jest przydatne? Mogę po prostu odłączyć sieć Ethernet, jeśli chcę.
sudo

1734

Użyj prostej klatki Faradaya, aby zablokować lub ograniczyć poziom zewnętrznego sygnału RF.

Możesz zrobić swój własny z folii aluminiowej. Otwory powinny być mniejsze niż długość fali usługi danych, jeśli chcesz to zablokować.

800 Mhz ma długość fali 37 cm (14 "), 1900 Mhz ma długość fali 16 cm (6").

Działa to lepiej na rzeczywistym urządzeniu niż na symulatorze, ponieważ na komputerze Mac ciężko jest pracować w klatce Faradaya ;-)

wprowadź opis zdjęcia tutaj


179
Krótka sugestia: jeśli stworzysz klatkę Faradaya z biurkiem w środku, z komputerem Mac będzie znacznie łatwiej pracować.
Kevin Laity

86
twoja odpowiedź jest interesująca, mimo że poprosił o symulator
vignesh kumar

76
Ponieważ pytanie dotyczyło symulatora, myślę, że zrobię jedną z nich w Photoshopie i ustawię ją jako tło pulpitu. To prawdopodobnie zadziała, prawda?
Timothy Lee Russell

8
Ta „sztuczka” była używana przez prawdziwych profesjonalistów :) Kiedy pracowałem nad smartfonami pierwszej generacji, używaliśmy grubych puszek do ciastek. Nie wszystkie marki działały, ale te, które działały, były idealne.
Czy

11
należy zaakceptować jako poprawną odpowiedź! (Wolę używać pionu dla iKryptonite)
gaussblurinc

309

Tak. W Xcode możesz przejść do Xcodepozycji menu -> Open Developer Tools-> More Developer Toolsi pobrać „ Dodatkowe narzędzia dla Xcode ”, które będą zawierały Network Link Conditioner.

Za pomocą tego narzędzia można symulować różne scenariusze sieciowe (takie jak utrata 100%, 3G, DNS z dużym opóźnieniem i inne), a także można tworzyć własne niestandardowe.


7
jeśli jesteś na stronie programistów, znajduje się w pakiecie HARDWARE IO TOOLS FOR XCODE.
płyn

156
W jakiś sposób wolę pomysł, aby zamknąć moje urządzenie w folię.
Michael Robinson

14
Od Xcode 8 Network Link Conditioner znajduje się w pakiecie „ Dodatkowe narzędzia dla Xcode ”.
ElegyD

6
Ponadto 100% straty ogranicza połączenie hosta, więc nie jest to praktyczne rozwiązanie. Jeśli jesteś przygotowany na rozwój bez Internetu, po prostu wyciągnięcie wtyczki na maszynie programisty jest lepsze niż to rozwiązanie.
Jannie Theunissen

7
Wpływa na wszystkie komputery Mac. Chcę zrezygnować z połączenia internetowego tylko dla symulatora, ponieważ używam komputera Mac zdalnie ...
JCarlosR

48

Jedyny znany mi sposób na wyłączenie sieci na symulatorze iOS to użycie narzędzi takich jak Little Snitch lub Hands Off . Za ich pomocą możesz odmówić / zablokować wszelkie wychodzące i przychodzące połączenia sieciowe. Możesz go skonfigurować tak, aby blokował tylko połączenia z aplikacji symulatora. Działa jak zapora ogniowa.


11
ale to nie sprawi, że symulator zachowa się tak, jakbyś był offline. To po prostu sprawi, że twoje serwery będą niedostępne, co jest zupełnie inną rzeczą.
Blitz

1
w rzeczywistości, LordT, może to wystarczyć w szczególnych okolicznościach, które mam ...!
Paul Hammond,

phix23 - czy preferujesz te dwa sugerowane narzędzia?
Paul Hammond

Nie, nie mam. Próbowałem tylko Hands Off, ponieważ ma więcej funkcji.
Felix

2
+1: Użyłem Little Snitch właśnie w tym celu, testując, aby upewnić się, że aplikacja Symulowana działa, jeśli połączenie sieciowe zostanie zerwane.
hotpaw2

18

Wystarczy wyłączyć Wi-Fi w Mac OSX, to działa na ucztę!


1
Nie pomaga OP, który wyraźnie stwierdził, że nie jest to opcja, ale jest to dla mnie idealne proste rozwiązanie.
Johno


11

Po prostu aktualizuję odpowiedź na bieżącą datę. Ponieważ Xcode 4 (?) Jest /Applications/Utilitieswywoływany panel preferencji Network Link Conditioner. Albo używasz jednego z istniejących profili, albo tworzysz swój własny profil z 0 Kbps w górę / w dół i 100% spadku.


1
Chcę tylko dodać, że jeśli utworzysz niestandardowe ustawienie sieci z przepustowością 0, automatycznie przyjmie to jako maksimum. Ważne jest, aby umieścić 100% utraty pakietów.
Denis Kutlubaev

Chciałbym również dodać, że ta metoda usuwa internet ze wszystkiego, nie tylko z symulatora. Być może nawet łatwiej jest całkowicie wyłączyć internet. Niemniej jednak jest to bardzo przydatne narzędzie, ponieważ można symulować internet E i 3G o różnej jakości.
Denis Kutlubaev

To z pewnością najlepsza odpowiedź, ponieważ Network Link Conditionerjest to oficjalne narzędzie Apple i jest całkowicie bezpłatne, w porównaniu do Little Snitchlub Hands Off.
fatuhoku

Hmm, wygląda na to, że to narzędzie wyłącza sieć dla wszystkiego. Odkryłem również, że nie wyzwala powiadomień o osiągalności (użyłem github.com/stefanomondino/STMReactiveReachability ).
fatuhoku

4
Ostrzegaj - narzędzie NETWORK LINK CONDITIONER wpływa na CAŁĄ maszynę, a nie tylko na symulator iPhone'a. Jeśli zdalnie uruchomisz swojego Maca dla dev, tak jak ja korzystam z Xamarin Build Host, to zabije twoje połączenie.
John Kocktoasten,

10

Ponieważ Xcode nie zapewnia takiej funkcji, na pewno wybierzesz aplikację / narzędzie innej firmy. Wyłączenie sieci MAC pomoże również wyłączyć sieć symulatora iOS.

Możesz wyłączyć swój Internet MAC z „ System Preferences...”> „ Network” i wyłączyć pożądane źródło sieci.

Aby wyłączyć źródło internetowe MAC Ethernet: Źródło sieci EtherNet

Aby wyłączyć źródło MAC WiFi WiFi (jeśli Twój MAC jest włączony Internet Wi-Fi): wprowadź opis zdjęcia tutaj



6

Jeden prawdopodobnie szalony pomysł lub łatka:

Wystarczy przełączyć flagę zasięgu sieci

Jest to kod, który używam, aby włączyć flagę czasu pracy przez wyzwalanie „Ostrzeżenie Symulator pamięci” oraz jej całkowicie bezpieczne, wystarczy upewnić się, kod powinien być w trybie debugowania tylko

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

1
Mam globalną klasę ze statyczną funkcją sprawdzającą połączenie internetowe. Powrót falseto świetny pomysł. Brak instalacji i mogę kontynuować pracę zdalnie! Dziękuję Ci.
JCarlosR

Gdzie to jest isInternetAvailablezdefiniowane ?!
CSawy,

@CSawy Jego flaga wysyłająca aktualny status połączenia internetowego w klasie osiągalności.
Darshit Shah,

3

Możesz użyć Little Snitch, aby odciąć ruch sieciowy do dowolnego indywidualnego procesu, w tym również tego, który działa na symulatorze iOS. W ten sposób możesz zachować połączenie internetowe i odłączyć działającą aplikację.


3

Z Xcode 8.3 i iOS 10.3:

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

Pamiętaj, aby dołączyć @available(iOS 10.3, *)na górze pliku zestawu testów.

Możesz również „Włącz tryb samolotowy”, jeśli wolisz.

Gdy Siri wyłączy Wi-Fi lub w trybie samolotowym, musisz zamknąć dialog Siri, który mówi, że Siri wymaga Internetu. Odbywa się to poprzez naciśnięcie przycisku Home, co powoduje zamknięcie dialogu i powrót do aplikacji.


To może nie działać na iOS11GM. Nie mogę znaleźć ustawienia Wi-Fi w symulatorze.
Bill Chan,

2
Korzystanie z Siri nie jest jedyną opcją w Xcode 9, ponieważ można aktywować wiele aplikacji. Teraz działa też aktywacja aplikacji Ustawienia iOS w celu wyłączenia Wi-Fi.
brandenbyers

3

Istnieją dwa sposoby, aby wyłączyć Internet IOS Simulator:

  • Odłącz połączenie sieciowe
  • Wyłącz Wi-Fi

To najprostszy sposób


3

Jeśli aplikacja łączy się z określoną domeną, możesz po prostu dodać ją do /etc/hostspliku i skierować do nieistniejącego adresu IP w sieci lokalnej ... W przypadku aplikacji będzie ona taka sama, jakby nie było połączenia z Internetem lub serwer jest nieosiągalny.

sudo nano /etc/hosts

dodaj następujący wiersz:

192.168.1.123   example.com

lub użyj, 127.0.0.1jeśli nie masz serwera WWW na komputerze lokalnym.



1

Prostym rozwiązaniem jest utworzenie trybu samolotowego na komputerze Mac. Oto jak to zrobić:

  • przejdź do sieci w Preferencjach systemowych
  • kliknij menu rozwijane Lokalizacja
  • kliknij ikonę plusa, aby dodać nową lokalizację
  • nazwij nową lokalizację „Tryb samolotowy” lub podobny i kliknij „Gotowe”
  • wybierz lokalizację, którą właśnie utworzyłeś z menu rozwijanego Lokalizacja
  • kliknij kolejno każdy dostępny interfejs sieciowy na liście po lewej stronie okna, wyłączając każdy z nich
  • kliknij menu Konfiguruj iPv4 i wybierz Wyłącz
  • w przypadku Wi-Fi wystarczy kliknąć przycisk Wyłącz Wi-Fi
  • kliknij Zastosuj, a ta lokalizacja zablokuje całą aktywność sieci

Jeśli chcesz ponownie włączyć sieć, wybierz Automatycznie z menu rozwijanego Lokalizacja i kliknij Zastosuj


1

Sugeruję skorzystanie z Charlesa Proxy aplikacji na Macu

Pozwala na używanie Bandwidth Throttle funkcji, która została stworzona wyłącznie w celu dostosowania połączenia sieciowego

Gwiazdka / Stop Ograniczanie ⌘ command+ T
Ustawienia przepustnicy ... ⌘ command+ T+⇧ shift


0

zamiast tego możesz wyłączyć sieć hosta!


7
Podczas debugowania problemów z połączeniem aplikacji niewygodne jest to, że nie widzisz StackOverflow!
fatuhoku

Przeczytaj ostatni wiersz pytania: „(Łączę się zdalnie z komputerem Mac w celu kodowania, teraz nie ma innego wyboru, więc wyłączenie sieci systemu operacyjnego nie jest opcją)”. Poza tym twoja sugestia została udzielona już dwa lata temu przez benpalmera.
ToolmakerSteve,

0

Jeśli masz co najmniej 2 sieci Wi-Fi do połączenia, to bardzo prosty sposób to skorzystanie z błędu w symulatorze iOS:

  1. wyjdź z symulatora (cmd-q), jeśli jest otwarty
  2. podłącz komputer Mac do jednego Wi-Fi (może nie być podłączony do Internetu, bez względu na to)
  3. uruchom symulator (menu: xCode-> Open Developer Tool-> iOs Simulator) i poczekaj, aż zostanie załadowany
  4. zmień sieć Wi-Fi na inną
  5. zysk

Błąd polega na tym, że symulator próbuje użyć sieci (IP?), Która nie jest jeszcze podłączona.

Dopóki nie uruchomisz ponownie symulatora - nie będzie on miał dostępu do Internetu (nawet jeśli ta pierwsza sieć Wi-Fi, którą podłączyłeś, miał połączenie internetowe), więc możesz uruchomić (cmd-R) i zatrzymać (cmd-) projekt (y), aby korzystać z symulatora bez połączenia, ale komputer Mac zostanie podłączony.

Następnie, jeśli będziesz musiał uruchomić symulator podłączony - po prostu wyjdź i uruchom go.


0

Możesz użyć kondycjonera łącza sieciowego na komputerze Mac. Możesz pobrać go ze strony dewelopera Apple. Powinien być dostępny tam, gdzie otrzymujemy starsze wersje Xcode i iOS. Dzięki temu kondycjonerowi sieciowemu możesz zmienić siłę sieci z Wi-Fi na brak sieci.

Również po zainstalowaniu kondycjonera sieciowego zostanie on zainstalowany w preferencjach systemu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.