func addContact()

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)
    }