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ą).

Paul Hammond
źródło
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.

Noah Witherspoon
źródło
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

progrmr
źródło
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.

Swathy Valluri
źródło
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.

Felix
źródło
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ę!

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

Pobierz pakiet dodatkowych narzędzi (Network Link Conditioner)

Opis

Przykład w Sierra: wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Nik Kov
źródło
9
Ogranicza to również połączenie hosta, więc nie jest lepsze niż wyciągnięcie wtyczki na maszynie programisty - brak współpracy lub odniesienia do Internetu. Nie jest to praktyczne rozwiązanie.
Jannie Theunissen
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.


źródło
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

Ali
źródło
7

Możesz dławić połączenie internetowe za pomocą aplikacji innej firmy, takiej jak

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

Naciśnij Command + Shift + T na komputerze Mac, aby skonfigurować dławienie.

mabounassif
źródło
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 
}
Darshit Shah
źródło
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ę.

Eran Goldin
źródło
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.

Brandenbyers
źródło
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

Daniel Beltrami
źródło
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.

Dion
źródło
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

ut9081
źródło
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

yoAlex5
źródło
0

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

wshcdr
źródło
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.

iGore
źródło
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.

Astha Trivedi
źródło