I am writing a code to capture the accelerometer data for one hour, it suppose to save in the iOS device first, and then I would like to upload to cloudkit. Here is my code.
import UIKit import CoreMotion import CloudKit
class ViewController: UIViewController {
@IBOutlet weak var accelerometerSwitch: UISwitch!
private let recorder = CMSensorRecorder()
private let cloudKitContainer = CKContainer(identifier: "iCloud.com.example.accelerometer-recorder")
override func viewDidLoad() {
super.viewDidLoad()
accelerometerSwitch.addTarget(self, action: #selector(accelerometerSwitchValueChanged), for: .valueChanged)
}
private func saveDataToAppFolder(data: [CMSensorRecordingData]) {
let fileName = "accelerometer_data.dat"
let fileManager = FileManager.default
let documentsDirectoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first!
let fileURL = documentsDirectoryURL.appendingPathComponent(fileName)
let jsonData = try! JSONEncoder().encode(data)
try! jsonData.write(to: fileURL)
}
@objc private func accelerometerSwitchValueChanged() {
if accelerometerSwitch.isOn {
recorder.recordAccelerometer(forDuration: 3600.0) { sensorData in
if let sensorData = sensorData {
// Handle the recorded data
saveDataToAppFolder(data: sensorData)
uploadDataToCloudKit(data: sensorData)
} else {
print("No accelerometer data recorded")
}
}
} else {
// No need to stop recording since it will stop automatically after the duration
}
}
private func uploadDataToCloudKit(filePath: String) {
let fileURL = URL(fileURLWithPath: filePath)
let data = try! Data(contentsOf: fileURL)
let record = CKRecord(recordType: "RecordedData")
record["data"] = data
let database = cloudKitContainer.publicCloudDatabase
database.save(record, completionHandler: { record, error in
if let error = error {
print("Error uploading data to CloudKit: \(error)")
} else {
print("Data uploaded to CloudKit successfully")
}
})
}
}
Anyone can help to fix the error. Thanks a lot.