Healthkit
HealthKit
Section titled “HealthKit”Objective-C
First go the Target->Capabilities and enable HealthKit. This would setup the info.plist entry.
Make a new CocoaClass of type NSObject
The filename I gave is GSHealthKitManager and the header file is as shown below
GSHealthKitManager.h
#import <Foundation/Foundation.h>#import <HealthKit/HealthKit.h>@interface GSHealthKitManager : NSObject
+ (GSHealthKitManager *)sharedManager;
- (void)requestAuthorization;
- (NSDate *)readBirthDate;- (void)writeWeightSample:(double)weight;- (NSString *)readGender;
@endGSHealthKitManager.m
#import "GSHealthKitManager.h"#import <HealthKit/HealthKit.h>
@interface GSHealthKitManager ()
@property (nonatomic, retain) HKHealthStore *healthStore;
@end
@implementation GSHealthKitManager
+ (GSHealthKitManager *)sharedManager { static dispatch_once_t pred = 0; static GSHealthKitManager *instance = nil; dispatch_once(&pred, ^{ instance = [[GSHealthKitManager alloc] init]; instance.healthStore = [[HKHealthStore alloc] init]; }); return instance;}
- (void)requestAuthorization {
if ([HKHealthStore isHealthDataAvailable] == NO) { // If our device doesn't support HealthKit -> return. return; }
NSArray *readTypes = @[[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierDateOfBirth],[HKObjectType characteristicTypeForIdentifier:HKCharacteristicTypeIdentifierBiologicalSex]];
[self.healthStore requestAuthorizationToShareTypes:nil readTypes:[NSSet setWithArray:readTypes] completion:nil];}
- (NSDate *)readBirthDate { NSError *error; NSDate *dateOfBirth = [self.healthStore dateOfBirthWithError:&error]; // Convenience method of HKHealthStore to get date of birth directly.
if (!dateOfBirth) { NSLog(@"Either an error occured fetching the user's age information or none has been stored yet. In your app, try to handle this gracefully."); }
return dateOfBirth;}
- (NSString *)readGender{ NSError *error; HKBiologicalSexObject *gen=[self.healthStore biologicalSexWithError:&error]; if (gen.biologicalSex==HKBiologicalSexMale) { return(@"Male"); } else if (gen.biologicalSex==HKBiologicalSexFemale) { return (@"Female"); } else if (gen.biologicalSex==HKBiologicalSexOther) { return (@"Other"); } else{ return (@"Not Set"); }}
@endCalling from ViewController
- (IBAction)pressed:(id)sender {
[[GSHealthKitManager sharedManager] requestAuthorization]; NSDate *birthDate = [[GSHealthKitManager sharedManager] readBirthDate]; NSLog(@"birthdate %@", birthDate); NSLog(@"gender 2131321 %@", [[GSHealthKitManager sharedManager] readGender]);
}Log Output
2016-10-13 14:41:39.568 random[778:26371] birthdate 1992-11-29 18:30:00 +00002016-10-13 14:41:39.570 random[778:26371] gender 2131321 Male