Можно ли отключить сеть в iOS Simulator?

430

Я пытаюсь отладить некоторые противоречивые поведения, которые я вижу в приложении, которое получает свои первичные данные из Интернета. Я не вижу проблем в симуляторе, только на устройстве, поэтому я хотел бы воспроизвести среду сети и подключения в симуляторе.

Есть ли способ отключить сеть в симуляторе?

(Я подключаюсь к Mac удаленно, чтобы кодировать, другого выбора сейчас нет, поэтому отключение сети ОС не вариант).

Пол Хаммонд
источник
Я думаю, что вы также можете использовать CharlesProxy для запуска подобных тестов
Honey

Ответы:

273

Боюсь, что нет - симулятор использует любое сетевое соединение, которое использует ОС. Некоторое время назад я отправил отчет об ошибке радара о симуляции состояния сети; Вы могли бы рассмотреть возможность сделать то же самое.

Ной Уизерспун
источник
52
Не уверен, что это в ответ на эту ошибку радара, но инструменты разработчика теперь включают инструмент Network Link Conditioner .
Самверметт
7
Network Link Conditioner позволяет вам указать процент пакетов, которые будут отброшены, но, насколько я видел, к сожалению, нет способа отключить все соединения.
modocache
11
В настоящее время Network Link Conditioner позволяет установить 100% потери пакетов, и, похоже, работает.
Габриэле Петронелла
4
Поскольку Simulator использует сетевое соединение хост-машины, вы можете отключить интернет на хост-компьютере, чтобы имитировать «сеть отключена». Не идеально, но это работает.
Адиль Хуссейн
5
Подождите, Network Link Conditioner распространяется на весь хост-компьютер, а не только на симулятор. Чем это полезно? Я могу просто отключить мой Ethernet, если я этого хочу.
Судо
1735

Используйте простую клетку Фарадея, чтобы заблокировать или ограничить уровень внешнего радиосигнала.

Вы можете сделать свой собственный с алюминиевой фольгой. Отверстия должны быть меньше длины волны вашей службы данных, если это то, что вы хотите заблокировать.

800 МГц имеет длину волны 37 см (14 дюймов), 1900 МГц имеет длину волны 16 см (6 дюймов).

Это работает лучше с реальным устройством, чем с симулятором, так как на Mac трудно работать в клетке Фарадея ;-)

введите описание изображения здесь

progrmr
источник
179
Просто быстрое предложение: если вы создадите встроенную клетку Фарадея с письменным столом внутри, с Mac будет намного проще работать.
Кевин Лейти
86
Ваш ответ интересен, хотя он попросил симулятор
vignesh kumar
76
Поскольку вопрос был об симуляторе, я думаю, я просто сделаю один из них в Photoshop и установлю его в качестве фона рабочего стола. Это, вероятно, будет работать, верно?
Тимоти Ли Рассел
8
Этот «трюк» по-настоящему использовался профессионалами :) Вернувшись, когда я работал над смартфонами первого поколения, которые мы использовали, чтобы использовать жесткие бисквитные банки. Не все бренды работали, но те, которые работали, были идеальными.
Будет
11
должен быть принят как правильный ответ! (Я бы предпочел использовать свинцовую коробку для iKryptonite)
gaussblurinc
309

Да. В XCode вы можете перейти к Xcodeпункту меню -> Open Developer Tools-> More Developer Toolsи скачать « Дополнительные инструменты для XCode », который будет иметь Network Link Conditioner.

Используя этот инструмент, вы можете моделировать различные сетевые сценарии (например, 100% потери, 3G, DNS с высокой задержкой и т. Д.), А также можете создавать свои собственные.

сват Валлури
источник
7
если вы находитесь на сайте разработчиков, он находится в пакете HARDWARE IO TOOLS FOR XCODE.
жидкость
156
Почему-то я предпочитаю идею заключать свое устройство в фольгу.
Майкл Робинсон
14
Начиная с Xcode 8, Network Link Conditioner находится в пакете « Дополнительные инструменты для Xcode ».
ElegyD
6
Кроме того, потеря 100% ограничивает соединение с хостом, поэтому не является практическим решением. Если вы готовы к разработке без Интернета, тогда лучше просто отключить компьютер от разработчика.
Дженни
7
Это влияет на все макинтош. Я хочу выйти из интернет-соединения только для симулятора, потому что я использую Mac удаленно ...
JCarlosR
48

Я знаю, что единственный способ отключить сеть на симуляторе iOS - использовать такие инструменты, как Little Snitch или Hands Off . С их помощью вы можете запретить / заблокировать любые входящие и исходящие сетевые подключения. Вы можете настроить его так, чтобы он блокировал только соединения из приложения симулятора. Работает как брандмауэр.

Феликс
источник
11
но это не заставит симулятор вести себя так, как будто вы не в сети. Это просто сделает ваши серверы недоступными, а это совсем другое.
Blitz
1
на самом деле, LordT, этого может быть достаточно для конкретных обстоятельств, которые у меня есть ...!
Пол Хаммонд
phix23 - у вас есть предпочтения между этими двумя предлагаемыми инструментами?
Пол Хаммонд
Нет, не имею Я только попробовал Hands off, потому что у него больше возможностей.
Феликс
2
+1: я использовал Little Snitch именно для этой цели, тестируя, чтобы убедиться, что приложение Simulated работает, если сетевое соединение разорвано.
hotpaw2
18

Просто отключите ваш WiFi в Mac OSX, это работает удовольствие!

benpalmer
источник
1
Не помогает ОП, который конкретно заявил, что это не вариант, но это идеальное простое решение для меня.
Джоно
14

Скачать пакет дополнительных инструментов (Network Link Conditioner)

Описание

Пример в Сьерре: введите описание изображения здесь

введите описание изображения здесь

Ник Ков
источник
9
Это также душит соединение с хостом, так что это ничуть не лучше, чем отключить штепсель от компьютера разработчика - нет совместной работы или интернет-ссылки. Так что не практическое решение.
Дженни
11

Просто обновляем ответ на текущую дату. Начиная с XCode 4 (?) В /Applications/Utilitiesвызываемой панели есть панель настроек Network Link Conditioner. Либо вы используете один из существующих профилей, либо вы создаете свой собственный профиль с 0 кбит / с Up / Downlink и 100% отбрасыванием.


источник
1
Просто хочу добавить, что если вы создаете пользовательский сетевой параметр с пропускной способностью 0, он автоматически принимает его как максимальный. Важно поставить 100% потерь пакетов.
Денис Кутлубаев
Кроме того, я хотел бы добавить, что этот метод удаляет интернет из всего, а не только из симулятора. Может быть, даже проще просто полностью отключить интернет. Но, тем не менее, это очень удобный инструмент, поскольку вы можете имитировать Интернет E и 3G разного качества.
Денис Кутлубаев
Это, безусловно, лучший ответ, потому что Network Link Conditionerэто официальный инструмент Apple, и он абсолютно бесплатный по сравнению с Little Snitchили Hands Off.
фатухоку
Хм, похоже, этот инструмент отключает сеть для всего. Я также обнаружил, что он не вызывает уведомления Reachability (я использовал github.com/stefanomondino/STMReactiveReachability ).
фатухоку
4
ПРЕДУПРЕЖДЕНИЕ. Инструмент NETWORK LINK CONDITIONER воздействует на ВСЮ машину, а не только на iPhone Simulator. Если вы подключитесь к своему компьютеру Mac для разработки, как я использую Xamarin Build Host, это приведет к разрыву вашего соединения.
Джон Коктоастен
10

Поскольку XCode не предоставляет такую ​​функцию, вам определенно понадобится стороннее приложение / инструмент. Выключение сети MAC также поможет отключить сеть iOS Simulator.

Вы можете отключить свой MAC-интернет от " System Preferences..."> " Network" и отключить нужный сетевой источник.

Чтобы отключить ваш интернет-источник MAC Ethernet: Сетевой источник EtherNet

Чтобы отключить ваш интернет-источник MAC WiFi (если ваш MAC подключен к сети Wi-Fi): введите описание изображения здесь

Али
источник
7

Вы можете ограничить интернет-соединение с помощью стороннего приложения, такого как

Чарльз: http://www.charlesproxy.com/

Нажмите Ctrl + Shift + T на Mac, чтобы настроить регулирование.

mabounassif
источник
6

Одна, вероятно, сумасшедшая идея или патч:

Просто переключите флаг доступности сети

Это код , который я использую , чтобы переключить мое время выполнения флага, запуская «Предупреждение Тренажер памяти» и его полностью безопасным, просто убедитесь , что код должен находиться в режиме отладки только

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
{
#ifdef DEBUG
    isInternetAvailable = !isInternetAvailable;
#endif 
}
Даршит Шах
источник
1
У меня есть глобальный класс со статической функцией проверки интернет-соединения. Возвращение false- отличная идея. Нет установки, и я могу продолжать работать удаленно! Спасибо.
JCarlosR
Где это isInternetAvailableопределено ?!
CSawy
@CSawy Флаг, который отправляет текущее состояние интернет-соединения в классе достижимости.
Даршит Шах
3

Вы можете использовать Little Snitch, чтобы отключить сетевой трафик для любого отдельного процесса, включая те, которые выполняются на симуляторе iOS. Таким образом, вы можете сохранить подключение к Интернету и отключить работающее приложение.

Эран Голдин
источник
3

С Xcode 8.3 и iOS 10.3:

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

Не забудьте указать @available(iOS 10.3, *)в верхней части файла набора тестов.

Вы также можете «Включить режим полета», если хотите.

Как только Siri выключит Wi-Fi или включит режим полета, вам нужно будет закрыть диалоговое окно Siri, в котором говорится, что Siri требует Интернет. Это достигается нажатием кнопки «Домой», которая закрывает диалог и возвращает в ваше приложение.

brandenbyers
источник
Это может не работать на iOS11GM. Не могу найти настройку Wifi в симуляторе.
Билл Чан,
2
Использование Siri не единственный вариант с Xcode 9 теперь, когда можно активировать несколько приложений. Активация приложения настроек iOS для включения Wi-Fi теперь тоже работает.
Brandenbyers
3

Есть два способа отключить интернет IOS Simulator:

  • Отключите ваше сетевое соединение
  • Выключить Wi-Fi

Это самый простой способ

Даниэль Бельтрами
источник
3

Если ваше приложение подключается к определенному домену, вы можете просто добавить его в свой /etc/hostsфайл и направить его на несуществующий IP-адрес в локальной сети ... Для приложения это будет так же, как если бы не было подключения к Интернету или сервер недоступен

sudo nano /etc/hosts

добавьте следующую строку:

192.168.1.123   example.com

или используйте, 127.0.0.1если вы не используете веб-сервер на локальном компьютере.

Дион
источник
1

Простое решение - создать режим полета для вашего Mac. Вот как это сделать:

  • зайдите в Сеть в Системных настройках
  • нажмите на выпадающее меню Местоположение
  • нажмите на значок плюс, чтобы добавить новое местоположение
  • назовите новое местоположение «Режим полета» или подобное и нажмите «Готово»
  • выберите местоположение, которое вы только что создали из выпадающего меню Местоположение
  • щелкните по каждому доступному сетевому интерфейсу в списке слева от окна по очереди, отключив каждый
  • щелкните меню «Настройка iPv4» и выберите «Выкл.»
  • для Wi-Fi, просто нажмите кнопку Turn Wi-Fi Off
  • нажмите Apply, и это местоположение заблокирует всю сетевую активность

Если вы хотите снова включить сеть, просто выберите «Автоматически» в раскрывающемся меню «Расположение» и нажмите «Применить».

ut9081
источник
1

Я бы предложил вам использовать приложение Charles Proxy на Mac

Это позволяет использовать Bandwidth Throttleфункцию, которая была создана только для настройки сетевого подключения

Звезд / Стоп Дросселирование ⌘ command+ T
Настройки Дросселя ... ⌘ command+ T+⇧ shift

yoAlex5
источник
0

вместо этого вы можете отключить сеть хоста!

wshcdr
источник
7
Не удобно видеть StackOverflow при отладке проблем подключения вашего приложения!
фатухоку
Прочитайте последнюю строчку вопроса: «(Я подключаюсь к Mac удаленно, чтобы написать код, другого выбора сейчас нет, поэтому отключение сети ОС не вариант)». Кроме того, ваше предложение было дано еще два года назад, Бенпалмер.
ToolmakerSteve
0

Если у вас есть как минимум 2 сети Wi-Fi для подключения, очень просто использовать ошибку в симуляторе iOS:

  1. выйти из симулятора (cmd-q), если он открыт
  2. подключите ваш Mac к одному Wi-Fi (он может быть не подключен к Интернету, не имеет значения)
  3. запустите симулятор (меню: xCode-> Open Developer Tool-> iOs Simulator) и дождитесь его загрузки
  4. переключить сеть Wi-Fi на другой
  5. прибыль

Ошибка в том, что симулятор пытается использовать сеть (IP?), Которая еще не подключена.

Пока вы не перезапустите симулятор - у него не будет интернета (даже если у той первой сети Wi-Fi, к которой вы подключились, было подключение к интернету), поэтому вы можете запускать (cmd-R) и останавливать (cmd-) проекты, чтобы использовать симулятор без подключения, но ваш Mac будет подключен.

Затем, если вам нужно запустить подключенный симулятор - просто выйдите и запустите его.

iGore
источник
0

Вы можете использовать сетевой кондиционер на вашем Mac. Вы можете скачать его с сайта разработчика Apple. Он должен быть доступен там, где мы получим более старые версии Xcode и iOS. С помощью этого сетевого кондиционера вы можете изменить мощность сети с Wi-Fi на отсутствие сети.

Также при установке сетевого кондиционера он устанавливается в системных настройках.

Аста Триведи
источник