How To Save And Get Data from HealthKit in Swift 3.0?

Apple providing the healthKit for storing,  managing , reading and sharing health data. HealthKit enables developer to read and write health data to a database managed by operating system. 



This tutorial, We are providing the details of HealthKit configuration , Authorization , Save health data and Write health data. 

Configuration : 

Step  1 :  Create a project with Bundle Identifier com.iosDevCenter.Health. Add this bundle identifier in the developer account and enable the healthKit for the AppId. 



Step  2 :  Go to the Xcode, Select the project and go to the Capability section enable the healthKit. 



Step  3:  You have also permission for HealthKit Share and Update data, So have to adding permission in info.plist file. for more information : info.Plist 




Authorization and Code :

To read or Write data on healthKit have to take permission for it. Here we take permission to read data Height and bodyMass, and Write data permission activeEnergyBurned, Height , DietaryProtein , DietaryFatTotal.





Step 1: Import the healthKit in the file.
import HealthKit
Step 2 : Create the instance of the healthStore,
let healthkitStore = HKHealthStore()
Step 3 : Create the function to read and write data from healthKit and call the function in ViewDidLoad.
func getHealthKitPermission() {
    let healthkitTypesToRead = NSSet(array: [
         HKObjectType.categoryType(forIdentifier: HKCategoryTypeIdentifier.sexualActivity) ?? "",
         HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.height) ?? "",
         HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass) ?? "",
        ])

    let healthkitTypesToWrite = NSSet(array: [
        // Here we are only requesting access to write for the amount of Energy Burned.
        HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.activeEnergyBurned) ?? "",
        HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.height) ?? "",
        HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryProtein) ?? "",
        HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryCarbohydrates) ?? "",
        HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryFatTotal) ?? "",
        ])

    healthkitStore.requestAuthorization(toShare: healthkitTypesToWrite as? Set, read: healthkitTypesToRead as? Set) { (success, error) in
        if success {
            print("Permission accept.")
            self.saveProtin()
            self.saveHeight()
            self.readHeight()
            self.readWeight()
        } else {
            if error != nil {
                print(error ?? "")
            }
            print("Permission denied.")
        }
    }
}

Save Health Data :

Save Protein : 
func saveProtin(){
    if let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.dietaryProtein) {
        let date = Date()
        let quantity = HKQuantity(unit: HKUnit.gram(), doubleValue: 50.0)
        let sample = HKQuantitySample(type: type, quantity: quantity, start: date, end: date)
        self.healthkitStore.save(sample, withCompletion: { (success, error) in
            print("Saved \(success), error \(error)")
        })
    }

}

Save Height :
func saveHeight() {
    if let type = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.height) {
        let date = Date()
        let quantity = HKQuantity(unit: HKUnit.inch(), doubleValue: 100.0)
        let sample = HKQuantitySample(type: type, quantity: quantity, start: date, end: date)
        self.healthkitStore.save(sample, withCompletion: { (success, error) in
            print("Saved \(success), error \(error)")
        })
    }
}

Read Health Data :

Read Height Data :
func readHeight(){
    let heightType = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.height)!
    let query = HKSampleQuery(sampleType: heightType, predicate: nil, limit: 1, sortDescriptors: nil) { (query, results, error) in
        if let result = results?.first as? HKQuantitySample{
            print("Height => \(result.quantity)")
        }else{
            print("OOPS didnt get height \nResults => \(results), error => \(error)")
        }
    }
    self.healthkitStore.execute(query)
}

 Read Weight Data :
func readWeight(){
    let bodyMass = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bodyMass)!
    let query = HKSampleQuery(sampleType: bodyMass, predicate: nil, limit: 1, sortDescriptors: nil) { (query, results, error) in
        if let result = results?.first as? HKQuantitySample{
            print("bodyMass => \(result.quantity)")
        }else{
            print("OOPS didnt get height \nResults => \(results), error => \(error)")
        }
    }
    self.healthkitStore.execute(query)
}

Demo HealthKit : 

Thanks.
How To Save And Get Data from HealthKit in Swift 3.0? How To Save And Get Data from HealthKit in Swift 3.0? Reviewed by Kirit Modi on 00:15:00 Rating: 5

No comments:

Powered by Blogger.