diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h index 8cc81ec73a0d471e35e83455bae246e8122f186e..08ca93717de60cafaa49eeebd7e270d0b8ec6889 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h @@ -17,4 +17,6 @@ - (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; +- (void)fitness_getDistanceWalkingRunningOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; + @end diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m index 39cea129fb328b530f2d90c3dc7aaf63187824bb..46bde3e9d62c1e728b30d9cc0b7bcf6678b05df9 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m @@ -91,19 +91,46 @@ return; } + HKQuantityType *stepCountType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; + + [self fetchCumulativeSumStatisticsCollection:stepCountType unit:unit startDate:startDate endDate:endDate ascending:ascending limit:limit completion:^(NSArray *arr, NSError *err){ + if (err != nil) { + NSLog(@"error with fetchCumulativeSumStatisticsCollection: %@", err); + callback(@[RCTMakeError(@"error with fetchCumulativeSumStatisticsCollection", err, nil)]); + return; + } + callback(@[[NSNull null], arr]); + }]; +} -// NSDate *startDate = [RCTAppleHealthKit startDateFromOptions:input]; -// NSDate *endDate = [RCTAppleHealthKit endDateFromOptionsDefaultNow:input]; -// if(startDate == nil) { -// callback(@[RCTMakeError(@"could not parse required startDate from options.startDate", nil, nil)]); +- (void)fitness_getDistanceWalkingRunningOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback +{ + HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit meterUnit]]; + NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit]; + BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false]; +// NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil]; +// NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]]; + NSDate *date = [RCTAppleHealthKit dateFromOptions:input key:@"date" withDefault:[NSDate date]]; +// if(startDate == nil){ +// callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]); // return; // } - HKQuantityType *stepCountType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; -// HKUnit *stepsUnit = [HKUnit countUnit]; + HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning]; + + [self fetchSumOfSamplesOnDayForType:quantityType unit:unit day:date completion:^(double distance, NSError *error) { + if (!distance) { + NSLog(@"ERROR getting DistanceWalkingRunning: %@", error); + callback(@[RCTMakeError(@"ERROR getting DistanceWalkingRunning", error, nil)]); + return; + } + + callback(@[[NSNull null], @(distance)]); + }]; -// [self fetchCumulativeSumStatisticsCollection:stepCountType unit:stepsUnit startDate:startDate endDate:endDate completion:^(NSArray *arr, NSError *err){ +// +// [self fetchCumulativeSumStatisticsCollection:quantityType unit:unit startDate:date endDate:date ascending:ascending limit:limit completion:^(NSArray *arr, NSError *err){ // if (err != nil) { // NSLog(@"error with fetchCumulativeSumStatisticsCollection: %@", err); // callback(@[RCTMakeError(@"error with fetchCumulativeSumStatisticsCollection", err, nil)]); @@ -111,17 +138,10 @@ // } // callback(@[[NSNull null], arr]); // }]; +} + - [self fetchCumulativeSumStatisticsCollection:stepCountType unit:unit startDate:startDate endDate:endDate ascending:ascending limit:limit completion:^(NSArray *arr, NSError *err){ - if (err != nil) { - NSLog(@"error with fetchCumulativeSumStatisticsCollection: %@", err); - callback(@[RCTMakeError(@"error with fetchCumulativeSumStatisticsCollection", err, nil)]); - return; - } - callback(@[[NSNull null], arr]); - }]; -} diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m b/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m index dea660fed37491c67a75e76f797000dd782455ec..f6b59c67c90bee339a6fc74e114e0a8dc386a4c1 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Utils.m @@ -126,8 +126,9 @@ return date; } - - +// ========== +// DEPRECATED +// ========== + (HKUnit *)hkUnitFromOptions:(NSDictionary *)options { NSString *unitString = [options objectForKey:@"unit"]; HKUnit *theUnit; @@ -141,6 +142,9 @@ if([unitString isEqualToString:@"meter"]){ theUnit = [HKUnit meterUnit]; } + if([unitString isEqualToString:@"mile"]){ + theUnit = [HKUnit mileUnit]; + } if([unitString isEqualToString:@"inch"]){ theUnit = [HKUnit inchUnit]; } @@ -191,6 +195,9 @@ if([unitString isEqualToString:@"inch"]){ theUnit = [HKUnit inchUnit]; } + if([unitString isEqualToString:@"mile"]){ + theUnit = [HKUnit mileUnit]; + } if([unitString isEqualToString:@"foot"]){ theUnit = [HKUnit footUnit]; } diff --git a/RCTAppleHealthKit/RCTAppleHealthKit.m b/RCTAppleHealthKit/RCTAppleHealthKit.m index cc8c9570874e7b020676b47b837c32e5b3646f2b..5a144e943a7f67acbac0fba7862910d9a7a0bd83 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit.m @@ -114,6 +114,11 @@ RCT_EXPORT_METHOD(getDailyStepSamples:(NSDictionary *)input callback:(RCTRespons [self fitness_getDailyStepSamples:input callback:callback]; } +RCT_EXPORT_METHOD(getDistanceWalkingRunning:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) +{ + [self fitness_getDistanceWalkingRunningOnDay:input callback:callback]; +} + RCT_EXPORT_METHOD(getInfo:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) diff --git a/examples/StepsDemo/app/components/home/index.js b/examples/StepsDemo/app/components/home/index.js index bc4101803f9a75047a4547ee366db51bc4d175ff..65af63de4a5fa9b038f83953c5a587e874decf28 100644 --- a/examples/StepsDemo/app/components/home/index.js +++ b/examples/StepsDemo/app/components/home/index.js @@ -20,12 +20,12 @@ import AppleHealthKit from 'react-native-apple-healthkit'; import History from './history'; -const WPERMS = AppleHealthKit.CONSTANTS.PERMISSIONS.WRITE; -const RPERMS = AppleHealthKit.CONSTANTS.PERMISSIONS.READ; +const WPERMS = AppleHealthKit.Constants.Permissions.WRITE; +const RPERMS = AppleHealthKit.Constants.Permissions.READ; const HKOPTIONS = { permissions: { - read: [RPERMS.StepCount], + read: [RPERMS.StepCount, RPERMS.DistanceWalkingRunning], write: [WPERMS.StepCount], } }; @@ -43,7 +43,7 @@ class Home extends Component { componentDidMount() { - console.log('CONSTANTS: ', AppleHealthKit.CONSTANTS); + console.log('CONSTANTS: ', AppleHealthKit.Constants); //console.log('balls: ', ahk); AppleHealthKit.isAvailable((err,available) => { @@ -82,6 +82,14 @@ class Home extends Component { } this.setState({stepHistory: res}); }); + + AppleHealthKit.getDistanceWalkingRunning(null, (err, res) => { + if(this._handleHKError(err, 'getDistanceWalkingRunning')){ + return; + } + console.log('getDistanceWalkingRunning -res-> ', res); + }); + } _onPressItem(key) { diff --git a/examples/StepsDemo/ios/StepsDemo.xcodeproj/project.pbxproj b/examples/StepsDemo/ios/StepsDemo.xcodeproj/project.pbxproj index b60f5a8439c686a4ad689674d63727a6943708fd..bb90ce1640e5383af008af617f2078dc7f2f05b4 100644 --- a/examples/StepsDemo/ios/StepsDemo.xcodeproj/project.pbxproj +++ b/examples/StepsDemo/ios/StepsDemo.xcodeproj/project.pbxproj @@ -23,7 +23,7 @@ 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 378616B61D257B040027C300 /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 378616B51D257B040027C300 /* HealthKit.framework */; }; - 3787CCA91D25E10E0080733E /* libRCTAppleHealthKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3787CCA81D25E10A0080733E /* libRCTAppleHealthKit.a */; }; + 3787CCB01D25ED040080733E /* libRCTAppleHealthKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3787CCAF1D25ED010080733E /* libRCTAppleHealthKit.a */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; /* End PBXBuildFile section */ @@ -91,9 +91,9 @@ remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; remoteInfo = React; }; - 3787CCA71D25E10A0080733E /* PBXContainerItemProxy */ = { + 3787CCAE1D25ED010080733E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 3787CCA31D25E10A0080733E /* RCTAppleHealthKit.xcodeproj */; + containerPortal = 3787CCAA1D25ED010080733E /* RCTAppleHealthKit.xcodeproj */; proxyType = 2; remoteGlobalIDString = 3774C88D1D2092F20000B3F3; remoteInfo = RCTAppleHealthKit; @@ -136,7 +136,7 @@ 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 378616B51D257B040027C300 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; }; 378616B71D257B040027C300 /* StepsDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = StepsDemo.entitlements; path = StepsDemo/StepsDemo.entitlements; sourceTree = ""; }; - 3787CCA31D25E10A0080733E /* RCTAppleHealthKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAppleHealthKit.xcodeproj; path = "../node_modules/react-native-apple-healthkit/RCTAppleHealthKit.xcodeproj"; sourceTree = ""; }; + 3787CCAA1D25ED010080733E /* RCTAppleHealthKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAppleHealthKit.xcodeproj; path = "../node_modules/react-native-apple-healthkit/RCTAppleHealthKit.xcodeproj"; sourceTree = ""; }; 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -154,7 +154,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3787CCA91D25E10E0080733E /* libRCTAppleHealthKit.a in Frameworks */, + 3787CCB01D25ED040080733E /* libRCTAppleHealthKit.a in Frameworks */, 146834051AC3E58100842450 /* libReact.a in Frameworks */, 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 378616B61D257B040027C300 /* HealthKit.framework in Frameworks */, @@ -268,10 +268,10 @@ name = Products; sourceTree = ""; }; - 3787CCA41D25E10A0080733E /* Products */ = { + 3787CCAB1D25ED010080733E /* Products */ = { isa = PBXGroup; children = ( - 3787CCA81D25E10A0080733E /* libRCTAppleHealthKit.a */, + 3787CCAF1D25ED010080733E /* libRCTAppleHealthKit.a */, ); name = Products; sourceTree = ""; @@ -287,7 +287,7 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( - 3787CCA31D25E10A0080733E /* RCTAppleHealthKit.xcodeproj */, + 3787CCAA1D25ED010080733E /* RCTAppleHealthKit.xcodeproj */, 146833FF1AC3E56700842450 /* React.xcodeproj */, 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, @@ -411,8 +411,8 @@ ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; }, { - ProductGroup = 3787CCA41D25E10A0080733E /* Products */; - ProjectRef = 3787CCA31D25E10A0080733E /* RCTAppleHealthKit.xcodeproj */; + ProductGroup = 3787CCAB1D25ED010080733E /* Products */; + ProjectRef = 3787CCAA1D25ED010080733E /* RCTAppleHealthKit.xcodeproj */; }, { ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; @@ -516,11 +516,11 @@ remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 3787CCA81D25E10A0080733E /* libRCTAppleHealthKit.a */ = { + 3787CCAF1D25ED010080733E /* libRCTAppleHealthKit.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libRCTAppleHealthKit.a; - remoteRef = 3787CCA71D25E10A0080733E /* PBXContainerItemProxy */; + remoteRef = 3787CCAE1D25ED010080733E /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {