in Encryption/ViewModels/ViewModel.swift [102:129]
func addContact(
name: String,
phoneNumber: String,
completionHandler: @escaping (Result<Contact?, Error>) -> Void
) {
let record = CKRecord(recordType: "Contact", recordID: CKRecord.ID(zoneID: recordZone.zoneID))
record["name"] = name
record.encryptedValues["phoneNumber"] = phoneNumber
let saveOperation = CKModifyRecordsOperation(recordsToSave: [record])
saveOperation.savePolicy = .allKeys
saveOperation.modifyRecordsResultBlock = { [weak self] result in
DispatchQueue.main.async {
switch result {
case .failure(let error):
self?.handleError(error)
completionHandler(.failure(error))
case .success:
let contact = Contact(record: record)
completionHandler(.success(contact))
}
}
}
database.add(saveOperation)
}