I had problem usinng CloudKit (CKQueryOperation, CKOperation) over cellular network. So far I have found out these work arounds.
• To use CloudKit over celluar, you need to change -CKOperation.qualityOfService to .UserInitiated or .UserInteractive
operation.qualityOfService = .UserInitiated
If this option is set to .Background (default), a query operation does not respond in iOS9. (you won't get time-out error too.)
• iCloud sync over celluar network must be ON.
Settings app -> iCloud -> iCloud Drive -> Use Celluar Data -> ON
"operation.allowsCellularAccess = true" is not enough.
If this option is off, you will get this "offline" error:
Error Domain=NSURLErrorDomain Code=-1009 "The Internet connection appears to be offline." UserInfo={NSErrorFailingURLStringKey=https://static.gc.apple.com/sap/setup.crt, NSErrorFailingURLKey=https://static.gc.apple.com/sap/setup.crt, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=50, NSLocalizedDescription=The Internet connection appears to be offline.}, NSErrorFailingURLKey: https://static.gc.apple.com/sap/setup.crt, NSDebugDescription: NSURLErrorDomain: -1009, NSLocalizedDescription: The Internet connection appears to be offline., _kCFStreamErrorDomainKey: 1, NSErrorFailingURLStringKey: https://static.gc.apple.com/sap/setup.crt, _kCFStreamErrorCodeKey: 50])
references: