From e43cdf93a7ceef3d870082299c7a6f9da294bf27 Mon Sep 17 00:00:00 2001 From: Greg Wilson Date: Sat, 2 Jul 2016 16:45:46 -0400 Subject: [PATCH] added fitness_saveSteps method and exported RCT method saveSteps --- .../RCTAppleHealthKit+Methods_Fitness.h | 3 +- .../RCTAppleHealthKit+Methods_Fitness.m | 42 +++++++++++++++++++ RCTAppleHealthKit/RCTAppleHealthKit.m | 5 +++ .../StepsDemo/app/components/home/index.js | 17 ++++++++ .../ios/StepsDemo.xcodeproj/project.pbxproj | 24 +++++------ 5 files changed, 78 insertions(+), 13 deletions(-) diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h index 30d6613..60c97b8 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.h @@ -14,9 +14,10 @@ - (void)fitness_getStepCountForDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_getDailyStepCounts:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - - (void)fitness_getDailyStepSamples:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; +- (void)fitness_saveSteps:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; + - (void)fitness_getDistanceWalkingRunningOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_getDistanceCyclingOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; - (void)fitness_getFlightsClimbedOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback; diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m index f2d2a8e..e73b878 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m @@ -104,6 +104,48 @@ } + +- (void)fitness_saveSteps:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback +{ + +// double height = [RCTAppleHealthKit doubleValueFromOptions:input]; + double value = [RCTAppleHealthKit doubleFromOptions:input key:@"value" withDefault:(double)0]; + + NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil]; + NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]]; + + HKUnit *unit = [HKUnit countUnit]; + +// NSDate *sampleDate = [RCTAppleHealthKit dateFromOptionsDefaultNow:input]; + +// HKUnit *heightUnit = [RCTAppleHealthKit hkUnitFromOptions:input]; +// if(heightUnit == nil){ +// heightUnit = [HKUnit inchUnit]; +// } + + if(startDate == nil || endDate == nil){ + callback(@[RCTMakeError(@"startDate and endDate are required in options", nil, nil)]); + return; + } + + HKQuantity *quantity = [HKQuantity quantityWithUnit:unit doubleValue:value]; + HKQuantityType *type = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; + HKQuantitySample *sample = [HKQuantitySample quantitySampleWithType:type quantity:quantity startDate:startDate endDate:endDate]; + + [self.healthStore saveObject:sample withCompletion:^(BOOL success, NSError *error) { + if (!success) { + NSLog(@"An error occured saving the step count sample %@. The error was: %@.", sample, error); + callback(@[RCTMakeError(@"An error occured saving the step count sample", error, nil)]); + return; + } + callback(@[[NSNull null], @(value)]); + }]; +} + + + + + - (void)fitness_getDistanceWalkingRunningOnDay:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback { HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit meterUnit]]; diff --git a/RCTAppleHealthKit/RCTAppleHealthKit.m b/RCTAppleHealthKit/RCTAppleHealthKit.m index 7ddb0fd..b6b254a 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(saveSteps:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) +{ + [self fitness_saveSteps:input callback:callback]; +} + RCT_EXPORT_METHOD(getDistanceWalkingRunning:(NSDictionary *)input callback:(RCTResponseSenderBlock)callback) { [self fitness_getDistanceWalkingRunningOnDay:input callback:callback]; diff --git a/examples/StepsDemo/app/components/home/index.js b/examples/StepsDemo/app/components/home/index.js index d31cb6f..f4698a7 100644 --- a/examples/StepsDemo/app/components/home/index.js +++ b/examples/StepsDemo/app/components/home/index.js @@ -59,6 +59,23 @@ class Home extends Component { } this._fetchStepsToday(); this._fetchStepsHistory(); + + //setTimeout(() => { + // + // let options = { + // value: 350, + // startDate: (new Date(2016,6,2,6,0,0)).toISOString(), + // endDate: (new Date(2016,6,2,6,30,0)).toISOString() + // }; + // AppleHealthKit.saveSteps(options, (err, res) => { + // if(this._handleHKError(err, 'saveSteps')){ + // return; + // } + // console.log('steps saved...'); + // }); + // + //},1000); + }); } }); diff --git a/examples/StepsDemo/ios/StepsDemo.xcodeproj/project.pbxproj b/examples/StepsDemo/ios/StepsDemo.xcodeproj/project.pbxproj index f2d7843..3c8420d 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 */; }; - 3787CCB71D25F1D60080733E /* libRCTAppleHealthKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3787CCB61D25F1D30080733E /* libRCTAppleHealthKit.a */; }; + 379EEE921D285CA70062AF55 /* libRCTAppleHealthKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 379EEE911D285CA30062AF55 /* libRCTAppleHealthKit.a */; }; 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; /* End PBXBuildFile section */ @@ -91,9 +91,9 @@ remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; remoteInfo = React; }; - 3787CCB51D25F1D30080733E /* PBXContainerItemProxy */ = { + 379EEE901D285CA30062AF55 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = 3787CCB11D25F1D30080733E /* RCTAppleHealthKit.xcodeproj */; + containerPortal = 379EEE8C1D285CA20062AF55 /* 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 = ""; }; - 3787CCB11D25F1D30080733E /* RCTAppleHealthKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAppleHealthKit.xcodeproj; path = "../node_modules/react-native-apple-healthkit/RCTAppleHealthKit.xcodeproj"; sourceTree = ""; }; + 379EEE8C1D285CA20062AF55 /* 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 = ( - 3787CCB71D25F1D60080733E /* libRCTAppleHealthKit.a in Frameworks */, + 379EEE921D285CA70062AF55 /* 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 = ""; }; - 3787CCB21D25F1D30080733E /* Products */ = { + 379EEE8D1D285CA20062AF55 /* Products */ = { isa = PBXGroup; children = ( - 3787CCB61D25F1D30080733E /* libRCTAppleHealthKit.a */, + 379EEE911D285CA30062AF55 /* libRCTAppleHealthKit.a */, ); name = Products; sourceTree = ""; @@ -287,7 +287,7 @@ 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( - 3787CCB11D25F1D30080733E /* RCTAppleHealthKit.xcodeproj */, + 379EEE8C1D285CA20062AF55 /* RCTAppleHealthKit.xcodeproj */, 146833FF1AC3E56700842450 /* React.xcodeproj */, 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, @@ -411,8 +411,8 @@ ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; }, { - ProductGroup = 3787CCB21D25F1D30080733E /* Products */; - ProjectRef = 3787CCB11D25F1D30080733E /* RCTAppleHealthKit.xcodeproj */; + ProductGroup = 379EEE8D1D285CA20062AF55 /* Products */; + ProjectRef = 379EEE8C1D285CA20062AF55 /* RCTAppleHealthKit.xcodeproj */; }, { ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; @@ -516,11 +516,11 @@ remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - 3787CCB61D25F1D30080733E /* libRCTAppleHealthKit.a */ = { + 379EEE911D285CA30062AF55 /* libRCTAppleHealthKit.a */ = { isa = PBXReferenceProxy; fileType = archive.ar; path = libRCTAppleHealthKit.a; - remoteRef = 3787CCB51D25F1D30080733E /* PBXContainerItemProxy */; + remoteRef = 379EEE901D285CA30062AF55 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { -- 2.26.2