Начиная с iOS 14 или 14.0.1 Wi-Fi работает, но LTE НЕ работает

У меня есть приложение, над которым я работаю, которое использует CloudKit и работает нормально. После обновления iPhone до iOS 14.x он продолжает работать с WiFi, но с LTE просто больше не завершает операцию CKFetchDatabaseChangesOperation. Могу снова включить WiFi и все отлично работает, переключаюсь на LTE и зависает на CKFetchDatabaseChangesOperation. Я даже могу запустить с LTE, он зависает, переключается на WiFi, все еще работая с приложением, оно завершает работу в обычном режиме.

Может ли кто-нибудь помочь мне выяснить, является ли это чем-то в моем коде или ошибкой iOS?

Я проверил обе копии, выполненные до xCode 12 iOS 14.x, и обе ведут себя одинаково странно?


person Rob    schedule 28.09.2020    source источник


Ответы (2)


Я бы проверил пару вещей.

== 1 ==

Во-первых, убедитесь, что сотовые данные включены для вашего приложения:

Settings > Cellular > [Your App]

== 2 ==

Второе, что нужно проверить, это установить для вашей операции более высокий приоритет. Это может на самом деле работает, но просто очень медленно.

let operation = CKFetchDatabaseChangesOperation()
  
//Set these...
operation.qualityOfService = .userInitiated
operation.queuePriority = .veryHigh

...

Возможно, iCloud задерживает передачу данных, чтобы не использовать слишком много сотовых данных.

person Clifton Labrum    schedule 28.09.2020
comment
Вот оно. == 2 == Странно, что это только начало происходить с iOS 14 или 14.0.1. У меня не было ни одного из этих двух наборов раньше, поэтому они были такими, какими были значения по умолчанию. Этого всегда было достаточно до этого последнего обновления. Теперь, когда я их явно установил, с LTE снова работает нормально. Спасибо!!!!! - person Rob; 28.09.2020
comment
@Rob У нас очень похожие проблемы с упомянутыми версиями iOS, тем не менее, я очень удивлен, что это единственная ветка, которую я нашел по этому поводу. Вы нашли больше информации о проблеме? все еще происходит на iOS 14.2? Спасибо - person pistoleta; 09.11.2020
comment
Ответ выше исправил проблему. Я изменил код, чтобы установить operation.qualityOfService и operation.queuePriority, после чего все снова заработало. - person Rob; 10.11.2020
comment
@ Роб, ты случайно не получил ошибку CKError 3? - person pistoleta; 10.11.2020

• Чтобы использовать CloudKit по сотовой связи, необходимо изменить - CKOperation.qualityOfService на .userInitiated или .userInteractive.

operation.qualityOfService = .userInitiated

Если для этого параметра установлено значение .background (по умолчанию), операция запроса не отвечает. (вы также не получите ошибку тайм-аута.)

• Синхронизация iCloud по сотовой сети должна быть включена.

 Settings app -> iCloud -> iCloud Drive -> Use Celluar Data -> ON

operation.allowsCellularAccess = true недостаточно.

person Shockki    schedule 30.12.2020