'Can't unarchive a file sent by watch

I have a class containing data that is being produced on the Apple Watch. I use the following method to archive the class, store the data in a file and then send the file to the iPhone.

func send(file counter: CounterModel) {
    let session = WCSession.default
    let fm = FileManager.default
    let documentsDirectory = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
    let transferStore = documentsDirectory.appendingPathComponent("transferfile").appendingPathExtension("cnt")

    do {
        let counterData = try NSKeyedArchiver.archivedData(
            withRootObject: counter,
            requiringSecureCoding: false
        )
        try counterData.write(to: transferStore)
        if session.activationState == .activated {
            session.transferFile(transferStore, metadata: nil)
        }
    } catch {
        print("Oops")
    }
}

Sending the file to the iPhone works fine, the delegate method is being called and the file is received. However, I can't unarchive the data and get the error message "The data couldn’t be read because it isn’t in the correct format." The delegate is simple:

func session(_ session: WCSession, didReceive file: WCSessionFile) {

    do {
        let contents = try Data(contentsOf: file.fileURL)
        
        if let newValue = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(contents) as? CounterModel {
            listOfCounters.append(newValue)
        } else {
            print("The content could not be decoded.")
        }
    } catch {
        print("Failed to retrieve the file with error \(error.localizedDescription).")
    }
}

Apparently, I'm doing something wrong. The un-archiving of the data on the iPhone works, so this is not the problem. Perhaps the file send has another format, but I can't get any information on that.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source