Приложение имеет разрешения приложения «Здоровье» на доступ к данным о сне. В настоящее время я могу узнать количество шагов и частоту сердечных сокращений, но данные о сне отображаются как 0. Вот код, который мне нужен для получения данных о сне. Пожалуйста, дайте мне знать, если я делаю что-то не так или что-то упускаю.
func fetchSleepData() {
let sleepType = HKObjectType.categoryType(forIdentifier: .sleepAnalysis)!
let startDate = Calendar.current.startOfDay(for: Date())
let endDate = Date()
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: .strictStartDate)
let query = HKSampleQuery(sampleType: sleepType, predicate: predicate, limit: HKObjectQueryNoLimit, sortDescriptors: nil) { query, samples, error in
guard let samples = samples as? [HKCategorySample], error == nil else {
print("Failed to fetch sleep data: \(error?.localizedDescription ?? "No error")")
return
}
// Calculate total sleep duration using .allAsleepValues
let totalSleep = samples.reduce(0.0) { sum, sample in
if HKCategoryValueSleepAnalysis.allAsleepValues.contains(HKCategoryValueSleepAnalysis(rawValue: sample.value) ?? .awake) {
let sleepDuration = sample.endDate.timeIntervalSince(sample.startDate)
return sum + sleepDuration
}
return sum
}
let sleepHours = totalSleep / 3600.0 // Convert seconds to hours
print("Total Sleep Hours: \(sleepHours)")
// Send Data to Backend
self.sendDataToServer(data: ["sleep_hours": sleepHours])
}
healthStore.execute(query)
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -output-is