Смысл кода
-1009 — это константа not connected to internet. Система сообщает приложению, что на текущий момент у устройства нет пригодного сетевого пути. Это решение принимается локально, ещё до обращения к серверу: сеть либо отключена, либо запрещена для приложения, либо интернет не проходит через подключение.
В отличие от таймаута, здесь запрос даже не уходит. Поэтому проверять надо устройство и сеть, а не сервер.
Если ошибка возникает при переходе между сетями, например при выходе из дома, дайте системе несколько секунд на переключение и повторите запрос: многие приложения справляются сами.
Что чаще всего к этому приводит
Самый простой вариант — действительно нет связи: выключены Wi-Fi и сотовая передача данных, включён режим полёта, Wi-Fi подключён без выхода в интернет. Далее идут запреты для конкретного приложения: отключены сотовые данные для него, включён режим низкого объёма данных.
Встречаются и косвенные причины: сеть с окном входа, которое не пройдено, роутер без интернета, DNS не отвечает, сторонний сетевой профиль потерял связь и задерживает трафик, ограничения экранного времени. Нередко ошибка появляется сразу после смены сети, пока система не переключилась на другую.
Проверка шаг за шагом: NSURLErrorDomain -1009
Откройте в Safari любой сайт. Если он открывается, сеть работает и проблема связана с приложением. Если нет, проверьте значки соединения, режим полёта, состояние Wi-Fi и сотовых данных. Отключитесь от Wi-Fi и пробуйте по мобильной сети, затем наоборот.
Если Wi-Fi показывается подключённым, но интернета нет, проверьте роутер и другие устройства. Найдите в настройках сотовой связи список приложений и разрешите данные для проблемного приложения. Отключите режим низкого объёма данных для этой сети на время проверки.
Выключите сторонний сетевой профиль и повторите попытку.
Что делать дальше
Перезапустите приложение и устройство. Забудьте Wi-Fi сеть и подключитесь заново. Если интернета нет только дома, перезагрузите роутер, проверьте индикаторы и обратитесь к провайдеру, если проблема сохраняется.
Если ошибка появилась неожиданно на устройстве, где всё работало, проверьте обновления системы и приложения. В крайнем случае сбросьте настройки сети, предварительно записав пароли от Wi-Fi.
Отдельно проверьте, не находится ли устройство в сети с ограничением: гостевая сеть, точка доступа с квотой трафика, сеть, где после подключения нужно принять условия.
Заметка для разработчиков
Код -1009 нужно обрабатывать спокойно: показывать понятное сообщение, а не технический текст, и предлагать повторить попытку. Не следует считать его окончательным: связь может восстановиться через секунды. Разумно использовать механизм ожидания подключения либо отслеживать изменения состояния сети, чтобы повторять запрос автоматически.
Не путайте этот код с -1001 (истекло время) и -1004 (не удалось подключиться к серверу): у них разные источники, и сообщения пользователю должны отличаться.
Особенности режимов экономии и сетей с ограничениями
На устройствах Apple есть режим низкого объёма данных для Wi-Fi и сотовой связи. Он не отключает интернет полностью, но ограничивает фоновые операции, и некоторые приложения из-за этого выдают ошибки. Проверьте настройки сети: у конкретного подключения есть переключатель этого режима.
Сети с ограничениями бывают в гостиницах, кампусах и офисах: они нередко требуют принять условия или пройти авторизацию. До этого момента приложения могут получать -1009, хотя значок Wi-Fi выглядит нормально. Откройте Safari и завершите вход, затем вернитесь в приложение. Если сеть постоянно требует повторного входа, свяжитесь с её администратором: возможно, срок сеанса слишком короткий.
Порядок проверки коротко: Значок связи и режим полёта; открытие сайта в Safari; смена Wi-Fi и сотовой сети; разрешение данных для приложения; отключение режима экономии и сторонних сетевых профилей; перезагрузка роутера и устройства; сброс сети как последняя мера. Если сайт в Safari открывается, а приложение выдаёт -1009, ищите ограничения именно для этого приложения.