从 iOS 14 或 14.0.1 开始 WiFi 可用,但 LTE 不可用

Starting with iOS 14 or 14.0.1 WiFi works but LTE does NOT

我有一个正在开发的应用程序使用 CloudKit 并且运行良好。将 iPhone 升级到 iOS 14.x 后,它可以继续使用 WiFi,但使用 LTE 时,它不再完成 CKFetchDatabaseChangesOperation。我可以重新打开 WiFi,一切正常,切换到 LTE 并挂在 CKFetchDatabaseChangesOperation 上。我什至可以使用 LTE 启动,它挂起,切换到 WiFi,同时仍然是 运行 应用程序,它启动并正常完成操作。

任何人都可以帮我弄清楚这是我的代码中的问题还是 iOS 错误?

我已经检查过 xCode 12 iOS 14.x 和 post 之前的两个副本是否都以同样奇怪的方式运行?

我会检查几件事。

== 1 ==

首先,确保为您的应用打开手机网络数据:

Settings > Cellular > [Your App]

== 2 ==

要检查的第二件事是将您的操作设置为具有更高的优先级。它可能确实有效,但速度非常慢。

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

...

iCloud 可能会延迟数据传输,以免使用过多的蜂窝数据。

• 要在手机上使用 CloudKit,您需要将 - CKOperation.qualityOfService 更改为 .userInitiated.userInteractive

operation.qualityOfService = .userInitiated

如果此选项设置为.background(默认),则查询操作不响应。 (您也不会收到超时错误。)

• 必须打开通过蜂窝网络的 iCloud 同步。

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

operation.allowsCellularAccess = true 不够。