"Подключение к Интернету, как представляется, в автономном режиме" при выполнении запросов URLSession на Apple Watch с помощью LTE

ошибка:

Я постоянно получаю код ошибки -1009 " подключение к интернету, похоже, отключено."ошибки при выполнении запросов URLSession в расширении Apple Watch на Apple Watch Series 3 при подключении к Интернету только через LTE.

воспроизведение:

  1. установить приложение.
  2. настройте устройство так, чтобы оно было только на LTE.
  3. проверьте подключение к LTE через iMessages, например
  4. запустить приложение.
  5. инициализировать URLSession с помощью .невыполнение или. эфемерная конфигурация сеанса.
  6. сделайте запрос задачи данных для любого известного хорошего URL https.

Ожидаемое Поведение:

запрос достигает пункта назначения.

Наблюдаемое Поведение:

запрос немедленно завершается с кодом ошибки -1009 "подключение к интернету кажется, он отключен."

Код:

let config = URLSessionConfiguration.ephemeral
let sesh = URLSession(configuration: config)
let url = URL(string: "https://google.com")!
sesh.dataTask(with: request) { (_, _, error) in
    print(error)
}.resume()

1 ответов


НЕТ: СМ. ОБНОВЛЕНИЕ #3 НИЖЕ: решающий недостающий элемент: вы должны установить waitsForConnectivity флаг в конфигурации сеанса в true.

let config = URLSessionConfiguration.ephemeral
config.waitsForConnectivity = true
let sesh = URLSession(configuration: config)
let url = URL(string: "https://google.com")!
sesh.dataTask(with: request) { (_, _, error) in
    print(error)
}.resume()

если вы не установите этот флаг, запросы немедленно завершатся неудачей, потому что доступ к LTE недоступен мгновенно, но только после самой короткой задержки. Установка этого флага в true заставляет запросы работать. В моем тестировании даже нет заметной разницы во времени между включением waitsForConnectivity через LTE и делает тот же запрос без включение waitsForConnectivity но проводится по WiFi, почти как период ожидания включен waitsForConnectivity в некоторых сценариях это ситуация следующего поворота в runloop.

обновление #1

Я не могу сделать какие-либо запросы через LTE. Когда waitsForConnectivity установлено значение true запросы просто тайм-аут по свойствам таймаут сессии конфиг. Когда waitsForConnectivity is false, в запросы не выполняются немедленно. Я обновлю свой вопрос и ответ, когда у меня будет больше информации. Я жду ответа от запроса Apple TSI, который обычно занимает несколько дней.

обновление #2

добавляя к тайне, тот же пример кода отлично работает на сотовой связи на оборудовании двух других разработчиков. Я знаю это мой оборудование хорошо, потому что приложения Apple fun fine over LTE на нем (телефонные звонки катятся по шоссе ни с чем, кроме мои часы в машине). Значит, происходит что-то подозрительное. Я попросил Apple DTS изучить это, и они также не могут воспроизвести проблему. Я свяжусь с ними, как только смогу.

обновление #3

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

единственное, что странно, я заметил, что я получил три, спина к спине, идентичные SMS-сообщения от AT&T, уведомляющие меня, что мои Apple Watch теперь связаны с моим номером iPhone. Что странно, потому что эта связь предположительно произошла в ночь, когда я распаковал свой телефон, а не два месяца спустя. Я понятия не имею, связано ли это с моей проблемой. Все, что я знаю, что сотовые запросы сейчас работают.

\_(ツ)_/