Save And Get Data from HealthKit
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 , Authorisation , 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
Authorisation 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.
1import HealthKit
Step 2 : Create the instance of the healthStore,1let healthkitStore = HKHealthStore()
Step 3 : Create the function to read and write data from healthKit and call the function in ViewDidLoad.12345678910111213141516171819202122232425262728293031Save Health Data :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 Protein :
1234567891011func 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 :
12345678910func 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 :
1234567891011Read Weight 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) }
1234567891011Demo HealthKit :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) }
Thanks.
Comments
Post a Comment
Thank You.