Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

Reading Health Data with HealthKit

Introduction

HealthKit provides a central repository for health and fitness data on iOS devices. It allows apps to access and share this data with the user’s permission. This tutorial will guide you through the process of reading health data using HealthKit.

Setting Up HealthKit

Before you can read health data, you need to set up HealthKit in your project. Follow these steps:

  1. Add the HealthKit capability in your Xcode project.
  2. Import HealthKit framework in your project.
  3. Request authorization to read health data.

Example: Requesting authorization

import HealthKit

let healthStore = HKHealthStore()

let healthDataToRead = Set([
    HKObjectType.quantityType(forIdentifier: .stepCount)!
])

healthStore.requestAuthorization(toShare: nil, read: healthDataToRead) { success, error in
    if success {
        print("Authorization granted")
    } else {
        print("Authorization denied")
    }
}
                

Reading Health Data

Once you have authorization, you can read health data. The following example demonstrates how to read step count data:

Example: Reading step count data

let stepType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
let startDate = Calendar.current.startOfDay(for: Date())
let endDate = Date()

let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: .strictStartDate)

let query = HKStatisticsQuery(quantityType: stepType, quantitySamplePredicate: predicate, options: .cumulativeSum) { _, result, error in
    guard let result = result, let sum = result.sumQuantity() else {
        print("Failed to fetch steps = \(error?.localizedDescription ?? "N/A")")
        return
    }
    let steps = sum.doubleValue(for: HKUnit.count())
    print("Steps = \(steps)")
}

healthStore.execute(query)
                

Handling Errors

It's important to handle errors appropriately. Ensure you check for errors when requesting authorization and reading data.

Example: Handling errors

healthStore.requestAuthorization(toShare: nil, read: healthDataToRead) { success, error in
    if success {
        print("Authorization granted")
    } else if let error = error {
        print("Error: \(error.localizedDescription)")
    }
}

let query = HKStatisticsQuery(quantityType: stepType, quantitySamplePredicate: predicate, options: .cumulativeSum) { _, result, error in
    if let error = error {
        print("Error: \(error.localizedDescription)")
        return
    }
    guard let result = result, let sum = result.sumQuantity() else {
        print("No data available")
        return
    }
    let steps = sum.doubleValue(for: HKUnit.count())
    print("Steps = \(steps)")
}
                

Conclusion

In this tutorial, you learned how to set up HealthKit, request authorization, and read health data such as step counts. Always ensure you handle errors and respect the user's privacy by requesting only the necessary permissions.