Someone in the Developer Forums of Apple found a solution:
https://forums.developer.apple.com/thread/20047
the magic happens when setting qualityOfService = .UserInitiated
Example:
let publicDB = CKContainer.defaultContainer().publicCloudDatabase
let operation = CKModifyRecordsOperation(recordsToSave: [aRecord], recordIDsToDelete: nil)
operation.allowsCellularAccess = true
operation.qualityOfService = .UserInitiated // <----- THATS THE CELLULAR FIX
operation.perRecordProgressBlock = {(record, progress) in
print("Progress: \(Int(progress*100.0))%")
}
operation.perRecordCompletionBlock = {(record, error) in
print("Upload complete") //Add awesome error handling here
}
publicDB.addOperation(operation)