├── .watchmanconfig
├── .babelrc
├── ios
├── healthPulse
│ ├── Images.xcassets
│ │ ├── Contents.json
│ │ ├── LaunchImage.launchimage
│ │ │ ├── iPhone 6@2x.png
│ │ │ ├── iPhone 6 Plus@2x.png
│ │ │ └── Contents.json
│ │ └── AppIcon.appiconset
│ │ │ ├── Icon-App-20x20@2x.png
│ │ │ ├── Icon-App-20x20@3x.png
│ │ │ ├── Icon-App-29x29@2x.png
│ │ │ ├── Icon-App-29x29@3x.png
│ │ │ ├── Icon-App-40x40@2x.png
│ │ │ ├── Icon-App-40x40@3x.png
│ │ │ ├── Icon-App-60x60@2x.png
│ │ │ ├── Icon-App-60x60@3x.png
│ │ │ └── Contents.json
│ ├── healthPulse.entitlements
│ ├── Images-2.xcassets
│ │ └── LaunchImage.launchimage
│ │ │ └── Contents.json
│ ├── AppDelegate.h
│ ├── main.m
│ ├── AppDelegate.m
│ └── Info.plist
├── healthPulseTests
│ ├── Info.plist
│ └── healthPulseTests.m
└── healthPulse.xcodeproj
│ ├── xcshareddata
│ └── xcschemes
│ │ └── healthPulse.xcscheme
│ └── project.pbxproj
├── .buckconfig
├── index.ios.js
├── __tests__
├── index.ios.js
└── index.android.js
├── .gitignore
├── app
├── healthkit
│ └── index.js
├── styles.js
└── index.js
├── package.json
├── .flowconfig
└── README.md
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["react-native"]
3 | }
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/.buckconfig:
--------------------------------------------------------------------------------
1 |
2 | [android]
3 | target = Google Inc.:Google APIs:23
4 |
5 | [maven_repositories]
6 | central = https://repo1.maven.org/maven2
7 |
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/LaunchImage.launchimage/iPhone 6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/LaunchImage.launchimage/iPhone 6@2x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/LaunchImage.launchimage/iPhone 6 Plus@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MaximeHeckel/healthpulse/HEAD/ios/healthPulse/Images.xcassets/LaunchImage.launchimage/iPhone 6 Plus@2x.png
--------------------------------------------------------------------------------
/index.ios.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {
3 | AppRegistry,
4 | } from 'react-native';
5 |
6 | import healthPulse from './app'
7 |
8 | AppRegistry.registerComponent('healthPulse', () => healthPulse);
9 |
--------------------------------------------------------------------------------
/ios/healthPulse/healthPulse.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.healthkit
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/__tests__/index.ios.js:
--------------------------------------------------------------------------------
1 | import 'react-native';
2 | import React from 'react';
3 | import Index from '../index.ios.js';
4 |
5 | // Note: test renderer must be required after react-native.
6 | import renderer from 'react-test-renderer';
7 |
8 | it('renders correctly', () => {
9 | const tree = renderer.create(
10 |
11 | );
12 | });
13 |
--------------------------------------------------------------------------------
/__tests__/index.android.js:
--------------------------------------------------------------------------------
1 | import 'react-native';
2 | import React from 'react';
3 | import Index from '../index.android.js';
4 |
5 | // Note: test renderer must be required after react-native.
6 | import renderer from 'react-test-renderer';
7 |
8 | it('renders correctly', () => {
9 | const tree = renderer.create(
10 |
11 | );
12 | });
13 |
--------------------------------------------------------------------------------
/ios/healthPulse/Images-2.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "minimum-system-version" : "7.0",
7 | "scale" : "2x"
8 | },
9 | {
10 | "orientation" : "portrait",
11 | "idiom" : "iphone",
12 | "minimum-system-version" : "7.0",
13 | "subtype" : "retina4",
14 | "scale" : "2x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/ios/healthPulse/AppDelegate.h:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015-present, Facebook, Inc.
3 | * All rights reserved.
4 | *
5 | * This source code is licensed under the BSD-style license found in the
6 | * LICENSE file in the root directory of this source tree. An additional grant
7 | * of patent rights can be found in the PATENTS file in the same directory.
8 | */
9 |
10 | #import
11 |
12 | @interface AppDelegate : UIResponder
13 |
14 | @property (nonatomic, strong) UIWindow *window;
15 |
16 | @end
17 |
--------------------------------------------------------------------------------
/ios/healthPulse/main.m:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Copyright (c) 2015-present, Facebook, Inc.
4 | * All rights reserved.
5 | *
6 | * This source code is licensed under the BSD-style license found in the
7 | * LICENSE file in the root directory of this source tree. An additional grant
8 | * of patent rights can be found in the PATENTS file in the same directory.
9 | */
10 |
11 | #import
12 |
13 | #import "AppDelegate.h"
14 |
15 | int main(int argc, char * argv[]) {
16 | @autoreleasepool {
17 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Xcode
6 | #
7 | build/
8 | *.pbxuser
9 | !default.pbxuser
10 | *.mode1v3
11 | !default.mode1v3
12 | *.mode2v3
13 | !default.mode2v3
14 | *.perspectivev3
15 | !default.perspectivev3
16 | xcuserdata
17 | *.xccheckout
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 | *.xcuserstate
23 | project.xcworkspace
24 |
25 | # Android/IJ
26 | #
27 | *.iml
28 | .idea
29 | .gradle
30 | local.properties
31 |
32 | # node.js
33 | #
34 | node_modules/
35 | npm-debug.log
36 |
37 | # BUCK
38 | buck-out/
39 | \.buckd/
40 | android/app/libs
41 | android/keystores/debug.keystore
42 |
43 | main.jsbundle
44 | main.jsbundle.meta
45 |
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "extent" : "full-screen",
5 | "idiom" : "iphone",
6 | "subtype" : "736h",
7 | "filename" : "iPhone 6 Plus@2x.png",
8 | "minimum-system-version" : "8.0",
9 | "orientation" : "portrait",
10 | "scale" : "3x"
11 | },
12 | {
13 | "extent" : "full-screen",
14 | "idiom" : "iphone",
15 | "subtype" : "667h",
16 | "filename" : "iPhone 6@2x.png",
17 | "minimum-system-version" : "8.0",
18 | "orientation" : "portrait",
19 | "scale" : "2x"
20 | }
21 | ],
22 | "info" : {
23 | "version" : 1,
24 | "author" : "xcode"
25 | }
26 | }
--------------------------------------------------------------------------------
/app/healthkit/index.js:
--------------------------------------------------------------------------------
1 | import AppleHealthKit from 'react-native-apple-healthkit';
2 |
3 | // setup the HealthKit initialization options
4 | const HKPERMS = AppleHealthKit.Constants.Permissions;
5 |
6 | const HKOPTIONS = {
7 | permissions: {
8 | read: [
9 | HKPERMS.DistanceWalkingRunning,
10 | HKPERMS.DistanceCycling,
11 | HKPERMS.BasalEnergyBurned,
12 | HKPERMS.ActiveEnergyBurned,
13 | HKPERMS.AppleExerciseTime,
14 | HKPERMS.StepCount,
15 | HKPERMS.HeartRate,
16 | HKPERMS.SleepAnalysis,
17 | HKPERMS.Weight,
18 | HKPERMS.BodyFatPercentage,
19 | HKPERMS.BodyMassIndex,
20 | ],
21 | }
22 | };
23 |
24 | module.exports = {
25 | HKOPTIONS,
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "healthPulse",
3 | "version": "0.0.5",
4 | "private": true,
5 | "scripts": {
6 | "start": "node node_modules/react-native/local-cli/cli.js start",
7 | "test": "jest"
8 | },
9 | "dependencies": {
10 | "base-64": "^0.1.0",
11 | "moment": "^2.17.1",
12 | "react": "15.3.2",
13 | "react-native": "0.36.0",
14 | "react-native-apple-healthkit": "^0.2.1",
15 | "react-native-background-fetch": "^1.0.0",
16 | "react-native-dismiss-keyboard": "^1.0.0"
17 | },
18 | "jest": {
19 | "preset": "jest-react-native"
20 | },
21 | "devDependencies": {
22 | "babel-jest": "16.0.0",
23 | "babel-preset-react-native": "1.9.0",
24 | "jest": "16.0.2",
25 | "jest-react-native": "16.0.0",
26 | "react-test-renderer": "15.3.2"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/ios/healthPulseTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ios/healthPulse/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@3x.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-40x40@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-60x60@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@3x.png",
49 | "scale" : "3x"
50 | }
51 | ],
52 | "info" : {
53 | "version" : 1,
54 | "author" : "xcode"
55 | }
56 | }
--------------------------------------------------------------------------------
/app/styles.js:
--------------------------------------------------------------------------------
1 | export default css = {
2 | container: {
3 | flex: 1,
4 | justifyContent: 'center',
5 | alignItems: 'center',
6 | backgroundColor: '#ECECF4',
7 | },
8 | textContainer: {
9 | alignItems: 'flex-start',
10 | },
11 | mainTitle: {
12 | fontSize: 36,
13 | textAlign: 'left',
14 | margin: 10,
15 | marginTop: 0,
16 | color: '#050505',
17 | fontWeight: '700',
18 | },
19 |
20 | update: {
21 | textAlign: 'center',
22 | color: '#050505',
23 | fontWeight: '700',
24 | marginBottom: 5,
25 | marginTop: 30,
26 | },
27 | instructions: {
28 | marginTop: 30,
29 | maxWidth: 300,
30 | textAlign: 'left',
31 | color: '#050505',
32 | paddingBottom: 20,
33 | },
34 | inputWrapper: {
35 | marginTop: 5,
36 | borderBottomWidth: 2,
37 | borderBottomColor: '#F45B69',
38 | },
39 | input: {
40 | height: 50,
41 | color: '#F45B69',
42 | width: 300,
43 | paddingLeft: 5,
44 | fontSize: 20,
45 | fontWeight: '700',
46 | },
47 | buttonContainer: {
48 | height: 75,
49 | width: 300,
50 | flexDirection: 'column',
51 | alignItems: 'flex-start',
52 | },
53 | button: {
54 | backgroundColor: '#F45B69',
55 | borderStyle: 'solid',
56 | borderWidth: 1,
57 | borderColor: '#F45B69',
58 | borderRadius: 3,
59 | height: 55,
60 | width: 300,
61 | position: 'absolute',
62 | bottom: 0,
63 | },
64 | buttonInside: {
65 | textAlign: 'center',
66 | color: 'white',
67 | fontWeight: "700",
68 | lineHeight: 50,
69 | },
70 | };
71 |
--------------------------------------------------------------------------------
/ios/healthPulse/AppDelegate.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015-present, Facebook, Inc.
3 | * All rights reserved.
4 | *
5 | * This source code is licensed under the BSD-style license found in the
6 | * LICENSE file in the root directory of this source tree. An additional grant
7 | * of patent rights can be found in the PATENTS file in the same directory.
8 | */
9 |
10 | #import "AppDelegate.h"
11 |
12 | #import "RCTBundleURLProvider.h"
13 | #import "RCTRootView.h"
14 |
15 | @implementation AppDelegate
16 |
17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
18 | {
19 | NSURL *jsCodeLocation;
20 |
21 | //jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
22 | jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
23 |
24 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
25 | moduleName:@"healthPulse"
26 | initialProperties:nil
27 | launchOptions:launchOptions];
28 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
29 |
30 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
31 | UIViewController *rootViewController = [UIViewController new];
32 | rootViewController.view = rootView;
33 | self.window.rootViewController = rootViewController;
34 | [self.window makeKeyAndVisible];
35 | return YES;
36 | }
37 |
38 | @end
39 |
--------------------------------------------------------------------------------
/.flowconfig:
--------------------------------------------------------------------------------
1 | [ignore]
2 |
3 | # We fork some components by platform.
4 | .*/*[.]android.js
5 |
6 | # Ignore templates with `@flow` in header
7 | .*/local-cli/generator.*
8 |
9 | # Ignore malformed json
10 | .*/node_modules/y18n/test/.*\.json
11 |
12 | # Ignore the website subdir
13 | /website/.*
14 |
15 | # Ignore BUCK generated dirs
16 | /\.buckd/
17 |
18 | # Ignore unexpected extra @providesModule
19 | .*/node_modules/commoner/test/source/widget/share.js
20 |
21 | # Ignore duplicate module providers
22 | # For RN Apps installed via npm, "Libraries" folder is inside node_modules/react-native but in the source repo it is in the root
23 | .*/Libraries/react-native/React.js
24 | .*/Libraries/react-native/ReactNative.js
25 | .*/node_modules/jest-runtime/build/__tests__/.*
26 |
27 | [include]
28 |
29 | [libs]
30 | node_modules/react-native/Libraries/react-native/react-native-interface.js
31 | node_modules/react-native/flow
32 | flow/
33 |
34 | [options]
35 | module.system=haste
36 |
37 | esproposal.class_static_fields=enable
38 | esproposal.class_instance_fields=enable
39 |
40 | experimental.strict_type_args=true
41 |
42 | munge_underscores=true
43 |
44 | module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub'
45 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
46 |
47 | suppress_type=$FlowIssue
48 | suppress_type=$FlowFixMe
49 | suppress_type=$FixMe
50 |
51 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-3]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
52 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-3]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
53 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
54 |
55 | unsafe.enable_getters_and_setters=true
56 |
57 | [version]
58 | ^0.33.0
59 |
--------------------------------------------------------------------------------
/ios/healthPulse/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | Health Pulse
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1
25 | LSRequiresIPhoneOS
26 |
27 | NSAppTransportSecurity
28 |
29 | NSExceptionDomains
30 |
31 | localhost
32 |
33 | NSExceptionAllowsInsecureHTTPLoads
34 |
35 |
36 |
37 |
38 | NSHealthShareUsageDescription
39 | Read heart rate monitor data.
40 | NSHealthUpdateUsageDescription
41 | Share workout data with other apps.
42 | NSLocationWhenInUseUsageDescription
43 |
44 | UIBackgroundModes
45 |
46 | fetch
47 |
48 | UIRequiredDeviceCapabilities
49 |
50 | armv7
51 | healthkit
52 |
53 | UISupportedInterfaceOrientations
54 |
55 | UIInterfaceOrientationPortrait
56 | UIInterfaceOrientationLandscapeLeft
57 | UIInterfaceOrientationLandscapeRight
58 |
59 | UIViewControllerBasedStatusBarAppearance
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/ios/healthPulseTests/healthPulseTests.m:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) 2015-present, Facebook, Inc.
3 | * All rights reserved.
4 | *
5 | * This source code is licensed under the BSD-style license found in the
6 | * LICENSE file in the root directory of this source tree. An additional grant
7 | * of patent rights can be found in the PATENTS file in the same directory.
8 | */
9 |
10 | #import
11 | #import
12 |
13 | #import "RCTLog.h"
14 | #import "RCTRootView.h"
15 |
16 | #define TIMEOUT_SECONDS 600
17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
18 |
19 | @interface healthPulseTests : XCTestCase
20 |
21 | @end
22 |
23 | @implementation healthPulseTests
24 |
25 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
26 | {
27 | if (test(view)) {
28 | return YES;
29 | }
30 | for (UIView *subview in [view subviews]) {
31 | if ([self findSubviewInView:subview matching:test]) {
32 | return YES;
33 | }
34 | }
35 | return NO;
36 | }
37 |
38 | - (void)testRendersWelcomeScreen
39 | {
40 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
41 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
42 | BOOL foundElement = NO;
43 |
44 | __block NSString *redboxError = nil;
45 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
46 | if (level >= RCTLogLevelError) {
47 | redboxError = message;
48 | }
49 | });
50 |
51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
54 |
55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
57 | return YES;
58 | }
59 | return NO;
60 | }];
61 | }
62 |
63 | RCTSetLogFunction(RCTDefaultLogFunction);
64 |
65 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
66 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
67 | }
68 |
69 |
70 | @end
71 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #HealthPulse
2 |
3 | HealthPulse is a small iOS app, built with React Native, that pushes data from HealthKit to a desired endpoint.
4 |
5 |
6 | ##Why?
7 |
8 | I felt that Apple lacked of a web API for HealthKit and I wanted to use my HealthKit data that was "trapped" in my iPhone, so I built my own API
9 | (which uses GraphQL) with my own health dashboard (see https://health.maximeheckel.com and https://github.com/MaximeHeckel/health-dashboard).
10 | This app basically allowed me to have a "bridge" between HealthKit and my API, and I thought that maybe other people would find it useful.
11 |
12 | I've improved it and used it for several months now and it helped me gathered a significant amount of data from my Apple Watch.
13 |
14 | ##Installation
15 |
16 | 1. Run it on your iOS device.
17 |
18 | - Clone the project (I might end up doing proper releases on Github)
19 | - Run `react-native bundle`
20 | - Open `/ios/healthPulse.xcodeproj`
21 | - In `appDelegate.m` copy and paste/replace the following lines to update the jsCodeLocation variable:
22 |
23 | ```
24 | //jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
25 | jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
26 | ```
27 |
28 | - Build and run the app (you might need a Apple Developer account to run it on a physical iOS device)
29 |
30 | 2. Contribute to the project
31 |
32 | - Clone the project
33 | - Inside the project folder, run `npm install` to install react-native and all the dependencies required for the project to run
34 | - Run `npm start`
35 |
36 | ##Usage
37 |
38 | I tried to make this app as simple as possible, in order to use it you just need to put your API endpoint on the first field, credentials for basic auth (if your server requires it) on the two following field and press and press the **Push data** button.
39 | If you let the app running on the background it will push your data against the endpoint you've set automatically (I used iOS Background Fetch for this, [learn more here](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)).
40 | If you're looking for a server example: [https://github.com/MaximeHeckel/health-dashboard/tree/master/go/src/server](https://github.com/MaximeHeckel/health-dashboard/tree/master/go/src/server).
41 |
42 |
43 | ####Payload
44 |
45 | The folowing JSON object is a sample payload that the app sends:
46 |
47 | ```
48 | {
49 | "date":"20170224",
50 | "heartRate":
51 | [{
52 | "value":72,
53 | "startDate":"2017-02-24T18:58:26.947-0800",
54 | "endDate":"2017-02-24T18:58:26.947-0800"
55 | },
56 | ...
57 | ],
58 | "stepCountSamples":
59 | [{
60 | "value":34,
61 | "startDate":"2017-02-24T18:58:26.947-0800",
62 | "endDate":"2017-02-24T18:58:26.947-0800"
63 | },
64 | ...
65 | ],
66 | "sleepAnalysus":
67 | [{
68 | "value":"INBED",
69 | "startDate":"2017-02-24T18:58:26.947-0800",
70 | "endDate":"2017-02-24T18:58:26.947-0800"
71 | },
72 | ...
73 | ],
74 | "stepCount": {
75 | "value": 1000,
76 | "startDate":"2017-02-24T18:58:26.947-0800",
77 | "endDate":"2017-02-24T18:58:26.947-0800"
78 | },
79 | "cyclineDistance": {
80 | "value": 1000,
81 | "startDate":"2017-02-24T18:58:26.947-0800",
82 | "endDate":"2017-02-24T18:58:26.947-0800"
83 | },
84 | "walkinRunningDistance": {
85 | "value": 1000,
86 | "startDate":"2017-02-24T18:58:26.947-0800",
87 | "endDate":"2017-02-24T18:58:26.947-0800"
88 | },
89 | "weight": {
90 | "value": 7000,
91 | "startDate":"2017-02-24T18:58:26.947-0800",
92 | "endDate":"2017-02-24T18:58:26.947-0800"
93 | },
94 | "bodyfatpercentage": {
95 | "value": 12,
96 | "startDate":"2017-02-24T18:58:26.947-0800",
97 | "endDate":"2017-02-24T18:58:26.947-0800"
98 | },
99 | "bmi": {
100 | "value": 22,
101 | "startDate":"2017-02-24T18:58:26.947-0800",
102 | "endDate":"2017-02-24T18:58:26.947-0800"
103 | }
104 | }
105 |
106 | ```
107 |
108 | ##Limitations
109 |
110 | It doesn't look like it's possible to have access to the data from HealthKit, when the phone is locked, thus the background push will only work while you're using the phone.
--------------------------------------------------------------------------------
/ios/healthPulse.xcodeproj/xcshareddata/xcschemes/healthPulse.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
29 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
47 |
53 |
54 |
55 |
56 |
57 |
63 |
64 |
65 |
66 |
75 |
77 |
83 |
84 |
85 |
86 |
87 |
88 |
94 |
96 |
102 |
103 |
104 |
105 |
107 |
108 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/app/index.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | import {
3 | AlertIOS,
4 | AsyncStorage,
5 | StatusBar,
6 | StyleSheet,
7 | Text,
8 | TextInput,
9 | TouchableHighlight,
10 | TouchableWithoutFeedback,
11 | View,
12 | } from 'react-native';
13 | import dismissKeyboard from 'react-native-dismiss-keyboard';
14 | import AppleHealthKit from 'react-native-apple-healthkit';
15 | import BackgroundFetch from 'react-native-background-fetch';
16 | import moment from 'moment';
17 | import base64 from 'base-64';
18 |
19 | import { HKOPTIONS } from './healthkit';
20 | import css from './styles';
21 |
22 | const initialState = {
23 | currentDate: moment().format('YYYYMMDD'),
24 | cyclingDistance: {},
25 | heartRate: [],
26 | inputAddress: '',
27 | sleepAnalysis: [],
28 | stepCount: {},
29 | stepCountSamples: [],
30 | updateTime: null,
31 | walkingRunningDistance: {},
32 | weight: {},
33 | bodyfatpercentage: {},
34 | bmi: {},
35 | pressed: false,
36 | username: '',
37 | password: '',
38 | }
39 |
40 | export default class healthPulse extends Component {
41 | constructor(props) {
42 | super(props);
43 | this.state = initialState;
44 | }
45 |
46 | componentWillMount() {
47 | AsyncStorage.getItem('address').then((value) => {
48 | this.setState({inputAddress: value});
49 | }).done();
50 | AsyncStorage.getItem('username').then((value) => {
51 | this.setState({username: value});
52 | }).done();
53 | AsyncStorage.getItem('password').then((value) => {
54 | this.setState({password: value});
55 | }).done();
56 | }
57 |
58 | componentDidMount() {
59 | const self = this;
60 |
61 | AppleHealthKit.isAvailable((err,available) => {
62 | if(available){
63 | AppleHealthKit.initHealthKit(HKOPTIONS, (err, res) => {
64 | if(this.handleHKError(err, 'initHealthKit')){
65 | return;
66 | }
67 | });
68 | }
69 | });
70 |
71 | BackgroundFetch.configure({
72 | stopOnTerminate: false
73 | }, function() {
74 | self.pushData();
75 | }, function(error) {
76 | AlertIOS.alert('Error','BackgroundFetch failed to start')
77 | });
78 | }
79 |
80 | urlValidator(str) {
81 | var pattern = new RegExp('https?\:\/\/[^\/\s]+(\/.*)?$');
82 |
83 | if(!pattern.test(str)) {
84 | AlertIOS.alert('Error', 'Please enter a valid URL');
85 | return false;
86 | } else {
87 | return true;
88 | }
89 | }
90 |
91 | pushData() {
92 | const currentDate = moment().format('YYYYMMDD');
93 | let dataToPush = {
94 | date: currentDate,
95 | }
96 |
97 | return Promise.resolve()
98 | .then(() => {
99 | return this.fetchHeartRateToday();
100 | }).then((samples) => {
101 | dataToPush.heartRate = samples;
102 | return this.fetchTotalStepCountToday();
103 | }).then((count) => {
104 | dataToPush.stepCount = count;
105 | return this.fetchCyclingDataToday();
106 | }).then((distance) => {
107 | dataToPush.cyclingDistance = distance;
108 | return this.fetchWalkingRunningDataToday();
109 | }).then((distance) => {
110 | dataToPush.walkingRunningDistance = distance;
111 | return this.fetchSleepDataToday();
112 | }).then((sleep) => {
113 | dataToPush.sleepAnalysis = sleep;
114 | return this.fetchStepRateToday();
115 | }).then((samples) => {
116 | dataToPush.stepCountSamples = samples;
117 | return this.fetchBMIDataToday();
118 | }).then((bmi) => {
119 | dataToPush.bmi = bmi;
120 | return this.fetchBodyFatPercentage();
121 | }).then((bodyfatpercentage) => {
122 | dataToPush.bodyfatpercentage = bodyfatpercentage;
123 | return this.fetchWeightDataToday();
124 | }).then((weight) => {
125 | dataToPush.weight = weight;
126 | if (this.urlValidator(this.state.inputAddress)){
127 | let url = this.state.inputAddress;
128 |
129 | fetch(url, {
130 | method: 'POST',
131 | headers: {
132 | 'Accept': 'application/json',
133 | 'Authorization': `Basic ${base64.encode(`${this.state.username}:${this.state.password}`)}`
134 | },
135 | body: JSON.stringify(dataToPush),
136 | }).then((data) => {
137 | BackgroundFetch.finish();
138 |
139 | if (data.status >= 400) {
140 | AlertIOS.alert('Error', `HTTP error: ${data.status}`);
141 | return;
142 | }
143 |
144 | if (moment().diff(this.state.currentDate, 'days') > 0) {
145 | this.setState(initialState);
146 | }
147 |
148 | return this.setState({ updateTime: moment().format('hh:mm:ss a'), currentDate });
149 | }).catch((error) => {
150 | BackgroundFetch.finish();
151 | AlertIOS.alert('Error', `An error occured while pushing the data: ${error}`);
152 | });
153 | }
154 | });
155 | }
156 |
157 | handleHKError(err, method) {
158 | if(err){
159 | return true;
160 | }
161 | return false;
162 | }
163 |
164 | fetchTotalStepCountToday() {
165 | const options = {
166 | date: new Date().toISOString()
167 | };
168 |
169 | return new Promise((resolve) => {
170 | AppleHealthKit.getStepCount(options, (err, steps) => {
171 | if(this.handleHKError(err, 'getStepCount')){
172 | resolve(this.state.stepCount);
173 | return;
174 | }
175 | this.setState({ stepCount: steps });
176 | resolve(steps);
177 | });
178 | });
179 | }
180 |
181 | fetchStepRateToday() {
182 | let d = new Date();
183 | d.setHours(0,0,0,0);
184 |
185 | const options = {
186 | startDate: d.toISOString(),
187 | endDate: (new Date()).toISOString(),
188 | };
189 |
190 | return new Promise((resolve) => {
191 | AppleHealthKit.getDailyStepCountSamples(options: Object, (err, samples) => {
192 | if(this.handleHKError(err, 'getDailyStepCountSamples')){
193 | resolve(this.state.stepCountSamples);
194 | return;
195 | }
196 | this.setState({ stepCountSamples: samples })
197 | resolve(samples);
198 | });
199 | });
200 | }
201 |
202 | fetchHeartRateToday() {
203 | let d = new Date();
204 | d.setHours(0,0,0,0);
205 |
206 | const options = {
207 | unit: 'bpm',
208 | startDate: d.toISOString(),
209 | endDate: (new Date()).toISOString(),
210 | ascending: false,
211 | };
212 |
213 | return new Promise((resolve) => {
214 | AppleHealthKit.getHeartRateSamples(options, (err, samples) => {
215 | if(this.handleHKError(err, 'getHeartRateSamples')){
216 | resolve(this.state.heartRate);
217 | return;
218 | }
219 | this.setState({ heartRate: samples });
220 | resolve(samples);
221 | });
222 | });
223 | }
224 |
225 | fetchCyclingDataToday() {
226 | const options = {
227 | unit: 'meter',
228 | date: (new Date()).toISOString(),
229 | };
230 | return new Promise((resolve) => {
231 | AppleHealthKit.getDistanceCycling(options, (err, distance) => {
232 | if(this.handleHKError(err, 'getDistanceCycling')){
233 | resolve(this.state.cyclingDistance);
234 | return;
235 | }
236 | this.setState({ cyclingDistance: distance })
237 | resolve(distance);
238 | });
239 | });
240 | }
241 |
242 | fetchWalkingRunningDataToday() {
243 | const options = {
244 | unit: 'meter',
245 | date: (new Date()).toISOString(),
246 | };
247 |
248 | return new Promise((resolve) => {
249 | AppleHealthKit.getDistanceWalkingRunning(options, (err, distance) => {
250 | if(this.handleHKError(err, 'getDistanceWalkingRunning')){
251 | resolve(this.state.walkingRunningDistance)
252 | return;
253 | }
254 | this.setState({ walkingRunningDistance: distance });
255 | resolve(distance);
256 | });
257 | });
258 | }
259 |
260 | fetchWeightDataToday() {
261 | const options = {
262 | unit: 'gram',
263 | date: (new Date()).toISOString(),
264 | };
265 |
266 | return new Promise((resolve) => {
267 | AppleHealthKit.getLatestWeight(options, (err, weight) => {
268 | if(this.handleHKError(err, 'getLatestWeight')){
269 | resolve(this.state.weight)
270 | return;
271 | }
272 | this.setState({ weight });
273 | resolve(weight);
274 | });
275 | });
276 | }
277 |
278 | fetchBodyFatPercentage() {
279 | return new Promise((resolve) => {
280 | AppleHealthKit.getLatestBodyFatPercentage(null, (err, bodyfatpercentage) => {
281 | if(this.handleHKError(err, 'getLatestBodyFatPercentage')){
282 | resolve(this.state.bodyfatpercentage)
283 | return;
284 | }
285 | this.setState({ bodyfatpercentage });
286 | resolve(bodyfatpercentage);
287 | });
288 | });
289 | }
290 |
291 | fetchBMIDataToday() {
292 | return new Promise((resolve) => {
293 | AppleHealthKit.getLatestBmi(null, (err, bmi) => {
294 | if(this.handleHKError(err, 'getLatestBmi')){
295 | resolve(this.state.bmi)
296 | return;
297 | }
298 | this.setState({ bmi });
299 | resolve(bmi);
300 | });
301 | });
302 | }
303 |
304 | fetchSleepDataToday() {
305 | let d = new Date();
306 | d.setHours(0,0,0,0);
307 |
308 | const options = {
309 | startDate: d.toISOString(),
310 | endDate: (new Date()).toISOString(),
311 | };
312 |
313 | return new Promise((resolve) => {
314 | AppleHealthKit.getSleepSamples(options, (err, samples) => {
315 | if(this.handleHKError(err, 'getSleepSamples')){
316 | resolve(this.state.sleepAnalysis);
317 | return;
318 | }
319 | this.setState({ sleepAnalysis: samples });
320 | resolve(samples);
321 | });
322 | });
323 | }
324 |
325 | render() {
326 | return (
327 | dismissKeyboard()}>
328 |
329 |
330 |
331 |
332 | Push my
333 |
334 |
335 | HealthKit data to
336 |
337 |
338 |
339 | {
342 | AsyncStorage.setItem('address', text)
343 | this.setState({ inputAddress: text })
344 | }}
345 | value={this.state.inputAddress}
346 | placeholder="Enter valid endpoint here"
347 | />
348 |
349 |
350 | Basic authentication credentials
351 |
352 |
353 | {
356 | AsyncStorage.setItem('username', text)
357 | this.setState({ username: text })
358 | }}
359 | value={this.state.username}
360 | placeholder="Username"
361 | />
362 |
363 |
364 | {
367 | AsyncStorage.setItem('password', text)
368 | this.setState({ password: text })
369 | }}
370 | value={this.state.password}
371 | placeholder="Password"
372 | secureTextEntry
373 | />
374 |
375 |
376 |
377 | Your accessible health data from HealthKit will be pushed
378 | automatically to the selected endpoint when this app runs
379 | in the background.
380 |
381 |
382 |
383 | {this.state.updateTime ? `Last update: ${this.state.updateTime}` : null}
384 |
385 |
386 | {this.setState({pressed: false})}}
390 | onShowUnderlay={()=>{this.setState({pressed: true})}}
391 | >
392 |
393 | Push data
394 |
395 |
396 |
397 |
398 |
399 | );
400 | }
401 | }
402 |
403 | const styles = StyleSheet.create(css);
404 |
--------------------------------------------------------------------------------
/ios/healthPulse.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
11 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
12 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
13 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
14 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
15 | 00E356F31AD99517003FC87E /* healthPulseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* healthPulseTests.m */; };
16 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
17 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
18 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
19 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
20 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
21 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
22 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
23 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
24 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
25 | 9C1FE7E61DC6D13500E57403 /* libRNBackgroundFetch.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C1FE7E51DC6D11C00E57403 /* libRNBackgroundFetch.a */; };
26 | 9C1FE7E91DC6D16600E57403 /* TSBackgroundFetch.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C1FE7E81DC6D16600E57403 /* TSBackgroundFetch.framework */; };
27 | 9C1FE7EB1DC6D20F00E57403 /* RNBackgroundFetch+AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C1FE7EA1DC6D20F00E57403 /* RNBackgroundFetch+AppDelegate.m */; };
28 | 9C1FE7F21DC6D44100E57403 /* libRCTAppleHealthKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C1FE7F11DC6D42D00E57403 /* libRCTAppleHealthKit.a */; };
29 | 9C1FE8031DC6D4EA00E57403 /* HealthKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C1FE8021DC6D4EA00E57403 /* HealthKit.framework */; };
30 | /* End PBXBuildFile section */
31 |
32 | /* Begin PBXContainerItemProxy section */
33 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
34 | isa = PBXContainerItemProxy;
35 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
36 | proxyType = 2;
37 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
38 | remoteInfo = RCTActionSheet;
39 | };
40 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
41 | isa = PBXContainerItemProxy;
42 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
43 | proxyType = 2;
44 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
45 | remoteInfo = RCTGeolocation;
46 | };
47 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
48 | isa = PBXContainerItemProxy;
49 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
50 | proxyType = 2;
51 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
52 | remoteInfo = RCTImage;
53 | };
54 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
55 | isa = PBXContainerItemProxy;
56 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
57 | proxyType = 2;
58 | remoteGlobalIDString = 58B511DB1A9E6C8500147676;
59 | remoteInfo = RCTNetwork;
60 | };
61 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
62 | isa = PBXContainerItemProxy;
63 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
64 | proxyType = 2;
65 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
66 | remoteInfo = RCTVibration;
67 | };
68 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
69 | isa = PBXContainerItemProxy;
70 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
71 | proxyType = 1;
72 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
73 | remoteInfo = healthPulse;
74 | };
75 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
76 | isa = PBXContainerItemProxy;
77 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
78 | proxyType = 2;
79 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
80 | remoteInfo = RCTSettings;
81 | };
82 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
83 | isa = PBXContainerItemProxy;
84 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
85 | proxyType = 2;
86 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
87 | remoteInfo = RCTWebSocket;
88 | };
89 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
90 | isa = PBXContainerItemProxy;
91 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
92 | proxyType = 2;
93 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
94 | remoteInfo = React;
95 | };
96 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
97 | isa = PBXContainerItemProxy;
98 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
99 | proxyType = 2;
100 | remoteGlobalIDString = 134814201AA4EA6300B7C361;
101 | remoteInfo = RCTLinking;
102 | };
103 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
104 | isa = PBXContainerItemProxy;
105 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
106 | proxyType = 2;
107 | remoteGlobalIDString = 58B5119B1A9E6C1200147676;
108 | remoteInfo = RCTText;
109 | };
110 | 9C1FE7C71DC6D11C00E57403 /* PBXContainerItemProxy */ = {
111 | isa = PBXContainerItemProxy;
112 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
113 | proxyType = 2;
114 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
115 | remoteInfo = "RCTImage-tvOS";
116 | };
117 | 9C1FE7CB1DC6D11C00E57403 /* PBXContainerItemProxy */ = {
118 | isa = PBXContainerItemProxy;
119 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
120 | proxyType = 2;
121 | remoteGlobalIDString = 2D2A28471D9B043800D4039D;
122 | remoteInfo = "RCTLinking-tvOS";
123 | };
124 | 9C1FE7CF1DC6D11C00E57403 /* PBXContainerItemProxy */ = {
125 | isa = PBXContainerItemProxy;
126 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
127 | proxyType = 2;
128 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
129 | remoteInfo = "RCTNetwork-tvOS";
130 | };
131 | 9C1FE7D31DC6D11C00E57403 /* PBXContainerItemProxy */ = {
132 | isa = PBXContainerItemProxy;
133 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
134 | proxyType = 2;
135 | remoteGlobalIDString = 2D2A28611D9B046600D4039D;
136 | remoteInfo = "RCTSettings-tvOS";
137 | };
138 | 9C1FE7D71DC6D11C00E57403 /* PBXContainerItemProxy */ = {
139 | isa = PBXContainerItemProxy;
140 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
141 | proxyType = 2;
142 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
143 | remoteInfo = "RCTText-tvOS";
144 | };
145 | 9C1FE7DC1DC6D11C00E57403 /* PBXContainerItemProxy */ = {
146 | isa = PBXContainerItemProxy;
147 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
148 | proxyType = 2;
149 | remoteGlobalIDString = 2D2A28881D9B049200D4039D;
150 | remoteInfo = "RCTWebSocket-tvOS";
151 | };
152 | 9C1FE7E01DC6D11C00E57403 /* PBXContainerItemProxy */ = {
153 | isa = PBXContainerItemProxy;
154 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
155 | proxyType = 2;
156 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
157 | remoteInfo = "React-tvOS";
158 | };
159 | 9C1FE7E41DC6D11C00E57403 /* PBXContainerItemProxy */ = {
160 | isa = PBXContainerItemProxy;
161 | containerPortal = 9C1FE7C01DC6D11B00E57403 /* RNBackgroundFetch.xcodeproj */;
162 | proxyType = 2;
163 | remoteGlobalIDString = 835318541D52293F005738CD;
164 | remoteInfo = RNBackgroundFetch;
165 | };
166 | 9C1FE7F01DC6D42D00E57403 /* PBXContainerItemProxy */ = {
167 | isa = PBXContainerItemProxy;
168 | containerPortal = 9C1FE7EC1DC6D42D00E57403 /* RCTAppleHealthKit.xcodeproj */;
169 | proxyType = 2;
170 | remoteGlobalIDString = 3774C88D1D2092F20000B3F3;
171 | remoteInfo = RCTAppleHealthKit;
172 | };
173 | /* End PBXContainerItemProxy section */
174 |
175 | /* Begin PBXFileReference section */
176 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
177 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; };
178 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; };
179 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; };
180 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; };
181 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; };
182 | 00E356EE1AD99517003FC87E /* healthPulseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = healthPulseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
183 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
184 | 00E356F21AD99517003FC87E /* healthPulseTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = healthPulseTests.m; sourceTree = ""; };
185 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; };
186 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; };
187 | 13B07F961A680F5B00A75B9A /* healthPulse.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = healthPulse.app; sourceTree = BUILT_PRODUCTS_DIR; };
188 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = healthPulse/AppDelegate.h; sourceTree = ""; };
189 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = healthPulse/AppDelegate.m; sourceTree = ""; };
190 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = healthPulse/Images.xcassets; sourceTree = ""; };
191 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = healthPulse/Info.plist; sourceTree = ""; };
192 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = healthPulse/main.m; sourceTree = ""; };
193 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; };
194 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; };
195 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; };
196 | 9C1FE7C01DC6D11B00E57403 /* RNBackgroundFetch.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RNBackgroundFetch.xcodeproj; path = "../node_modules/react-native-background-fetch/ios/RNBackgroundFetch.xcodeproj"; sourceTree = ""; };
197 | 9C1FE7E81DC6D16600E57403 /* TSBackgroundFetch.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = TSBackgroundFetch.framework; path = "../node_modules/react-native-background-fetch/ios/RNBackgroundFetch/TSBackgroundFetch.framework"; sourceTree = ""; };
198 | 9C1FE7EA1DC6D20F00E57403 /* RNBackgroundFetch+AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "RNBackgroundFetch+AppDelegate.m"; path = "../node_modules/react-native-background-fetch/ios/RNBackgroundFetch/RNBackgroundFetch+AppDelegate.m"; sourceTree = ""; };
199 | 9C1FE7EC1DC6D42D00E57403 /* RCTAppleHealthKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAppleHealthKit.xcodeproj; path = "../node_modules/react-native-apple-healthkit/RCTAppleHealthKit.xcodeproj"; sourceTree = ""; };
200 | 9C1FE7F51DC6D48600E57403 /* healthPulse.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = healthPulse.entitlements; path = healthPulse/healthPulse.entitlements; sourceTree = ""; };
201 | 9C1FE8021DC6D4EA00E57403 /* HealthKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = HealthKit.framework; path = System/Library/Frameworks/HealthKit.framework; sourceTree = SDKROOT; };
202 | /* End PBXFileReference section */
203 |
204 | /* Begin PBXFrameworksBuildPhase section */
205 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
206 | isa = PBXFrameworksBuildPhase;
207 | buildActionMask = 2147483647;
208 | files = (
209 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
210 | );
211 | runOnlyForDeploymentPostprocessing = 0;
212 | };
213 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
214 | isa = PBXFrameworksBuildPhase;
215 | buildActionMask = 2147483647;
216 | files = (
217 | 9C1FE7F21DC6D44100E57403 /* libRCTAppleHealthKit.a in Frameworks */,
218 | 9C1FE7E91DC6D16600E57403 /* TSBackgroundFetch.framework in Frameworks */,
219 | 9C1FE7E61DC6D13500E57403 /* libRNBackgroundFetch.a in Frameworks */,
220 | 146834051AC3E58100842450 /* libReact.a in Frameworks */,
221 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
222 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
223 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
224 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
225 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
226 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
227 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
228 | 9C1FE8031DC6D4EA00E57403 /* HealthKit.framework in Frameworks */,
229 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
230 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
231 | );
232 | runOnlyForDeploymentPostprocessing = 0;
233 | };
234 | /* End PBXFrameworksBuildPhase section */
235 |
236 | /* Begin PBXGroup section */
237 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = {
238 | isa = PBXGroup;
239 | children = (
240 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
241 | );
242 | name = Products;
243 | sourceTree = "";
244 | };
245 | 00C302B61ABCB90400DB3ED1 /* Products */ = {
246 | isa = PBXGroup;
247 | children = (
248 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
249 | );
250 | name = Products;
251 | sourceTree = "";
252 | };
253 | 00C302BC1ABCB91800DB3ED1 /* Products */ = {
254 | isa = PBXGroup;
255 | children = (
256 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
257 | 9C1FE7C81DC6D11C00E57403 /* libRCTImage-tvOS.a */,
258 | );
259 | name = Products;
260 | sourceTree = "";
261 | };
262 | 00C302D41ABCB9D200DB3ED1 /* Products */ = {
263 | isa = PBXGroup;
264 | children = (
265 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
266 | 9C1FE7D01DC6D11C00E57403 /* libRCTNetwork-tvOS.a */,
267 | );
268 | name = Products;
269 | sourceTree = "";
270 | };
271 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = {
272 | isa = PBXGroup;
273 | children = (
274 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
275 | );
276 | name = Products;
277 | sourceTree = "";
278 | };
279 | 00E356EF1AD99517003FC87E /* healthPulseTests */ = {
280 | isa = PBXGroup;
281 | children = (
282 | 00E356F21AD99517003FC87E /* healthPulseTests.m */,
283 | 00E356F01AD99517003FC87E /* Supporting Files */,
284 | );
285 | path = healthPulseTests;
286 | sourceTree = "";
287 | };
288 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
289 | isa = PBXGroup;
290 | children = (
291 | 00E356F11AD99517003FC87E /* Info.plist */,
292 | );
293 | name = "Supporting Files";
294 | sourceTree = "";
295 | };
296 | 139105B71AF99BAD00B5F7CC /* Products */ = {
297 | isa = PBXGroup;
298 | children = (
299 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
300 | 9C1FE7D41DC6D11C00E57403 /* libRCTSettings-tvOS.a */,
301 | );
302 | name = Products;
303 | sourceTree = "";
304 | };
305 | 139FDEE71B06529A00C62182 /* Products */ = {
306 | isa = PBXGroup;
307 | children = (
308 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
309 | 9C1FE7DD1DC6D11C00E57403 /* libRCTWebSocket-tvOS.a */,
310 | );
311 | name = Products;
312 | sourceTree = "";
313 | };
314 | 13B07FAE1A68108700A75B9A /* healthPulse */ = {
315 | isa = PBXGroup;
316 | children = (
317 | 9C1FE7F51DC6D48600E57403 /* healthPulse.entitlements */,
318 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
319 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
320 | 13B07FB01A68108700A75B9A /* AppDelegate.m */,
321 | 9C1FE7EA1DC6D20F00E57403 /* RNBackgroundFetch+AppDelegate.m */,
322 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
323 | 13B07FB61A68108700A75B9A /* Info.plist */,
324 | 13B07FB71A68108700A75B9A /* main.m */,
325 | );
326 | name = healthPulse;
327 | sourceTree = "";
328 | };
329 | 146834001AC3E56700842450 /* Products */ = {
330 | isa = PBXGroup;
331 | children = (
332 | 146834041AC3E56700842450 /* libReact.a */,
333 | 9C1FE7E11DC6D11C00E57403 /* libReact-tvOS.a */,
334 | );
335 | name = Products;
336 | sourceTree = "";
337 | };
338 | 78C398B11ACF4ADC00677621 /* Products */ = {
339 | isa = PBXGroup;
340 | children = (
341 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
342 | 9C1FE7CC1DC6D11C00E57403 /* libRCTLinking-tvOS.a */,
343 | );
344 | name = Products;
345 | sourceTree = "";
346 | };
347 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
348 | isa = PBXGroup;
349 | children = (
350 | 9C1FE7EC1DC6D42D00E57403 /* RCTAppleHealthKit.xcodeproj */,
351 | 9C1FE7C01DC6D11B00E57403 /* RNBackgroundFetch.xcodeproj */,
352 | 146833FF1AC3E56700842450 /* React.xcodeproj */,
353 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
354 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
355 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
356 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
357 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
358 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
359 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
360 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
361 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
362 | );
363 | name = Libraries;
364 | sourceTree = "";
365 | };
366 | 832341B11AAA6A8300B99B32 /* Products */ = {
367 | isa = PBXGroup;
368 | children = (
369 | 832341B51AAA6A8300B99B32 /* libRCTText.a */,
370 | 9C1FE7D81DC6D11C00E57403 /* libRCTText-tvOS.a */,
371 | );
372 | name = Products;
373 | sourceTree = "";
374 | };
375 | 83CBB9F61A601CBA00E9B192 = {
376 | isa = PBXGroup;
377 | children = (
378 | 13B07FAE1A68108700A75B9A /* healthPulse */,
379 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
380 | 00E356EF1AD99517003FC87E /* healthPulseTests */,
381 | 83CBBA001A601CBA00E9B192 /* Products */,
382 | 9C1FE7E71DC6D16600E57403 /* Frameworks */,
383 | );
384 | indentWidth = 2;
385 | sourceTree = "";
386 | tabWidth = 2;
387 | };
388 | 83CBBA001A601CBA00E9B192 /* Products */ = {
389 | isa = PBXGroup;
390 | children = (
391 | 13B07F961A680F5B00A75B9A /* healthPulse.app */,
392 | 00E356EE1AD99517003FC87E /* healthPulseTests.xctest */,
393 | );
394 | name = Products;
395 | sourceTree = "";
396 | };
397 | 9C1FE7C11DC6D11B00E57403 /* Products */ = {
398 | isa = PBXGroup;
399 | children = (
400 | 9C1FE7E51DC6D11C00E57403 /* libRNBackgroundFetch.a */,
401 | );
402 | name = Products;
403 | sourceTree = "";
404 | };
405 | 9C1FE7E71DC6D16600E57403 /* Frameworks */ = {
406 | isa = PBXGroup;
407 | children = (
408 | 9C1FE8021DC6D4EA00E57403 /* HealthKit.framework */,
409 | 9C1FE7E81DC6D16600E57403 /* TSBackgroundFetch.framework */,
410 | );
411 | name = Frameworks;
412 | sourceTree = "";
413 | };
414 | 9C1FE7ED1DC6D42D00E57403 /* Products */ = {
415 | isa = PBXGroup;
416 | children = (
417 | 9C1FE7F11DC6D42D00E57403 /* libRCTAppleHealthKit.a */,
418 | );
419 | name = Products;
420 | sourceTree = "";
421 | };
422 | /* End PBXGroup section */
423 |
424 | /* Begin PBXNativeTarget section */
425 | 00E356ED1AD99517003FC87E /* healthPulseTests */ = {
426 | isa = PBXNativeTarget;
427 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "healthPulseTests" */;
428 | buildPhases = (
429 | 00E356EA1AD99517003FC87E /* Sources */,
430 | 00E356EB1AD99517003FC87E /* Frameworks */,
431 | 00E356EC1AD99517003FC87E /* Resources */,
432 | );
433 | buildRules = (
434 | );
435 | dependencies = (
436 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
437 | );
438 | name = healthPulseTests;
439 | productName = healthPulseTests;
440 | productReference = 00E356EE1AD99517003FC87E /* healthPulseTests.xctest */;
441 | productType = "com.apple.product-type.bundle.unit-test";
442 | };
443 | 13B07F861A680F5B00A75B9A /* healthPulse */ = {
444 | isa = PBXNativeTarget;
445 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "healthPulse" */;
446 | buildPhases = (
447 | 13B07F871A680F5B00A75B9A /* Sources */,
448 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
449 | 13B07F8E1A680F5B00A75B9A /* Resources */,
450 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
451 | );
452 | buildRules = (
453 | );
454 | dependencies = (
455 | );
456 | name = healthPulse;
457 | productName = "Hello World";
458 | productReference = 13B07F961A680F5B00A75B9A /* healthPulse.app */;
459 | productType = "com.apple.product-type.application";
460 | };
461 | /* End PBXNativeTarget section */
462 |
463 | /* Begin PBXProject section */
464 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
465 | isa = PBXProject;
466 | attributes = {
467 | LastUpgradeCheck = 0610;
468 | ORGANIZATIONNAME = Facebook;
469 | TargetAttributes = {
470 | 00E356ED1AD99517003FC87E = {
471 | CreatedOnToolsVersion = 6.2;
472 | DevelopmentTeam = SF87CBF59Z;
473 | TestTargetID = 13B07F861A680F5B00A75B9A;
474 | };
475 | 13B07F861A680F5B00A75B9A = {
476 | DevelopmentTeam = SF87CBF59Z;
477 | SystemCapabilities = {
478 | com.apple.BackgroundModes = {
479 | enabled = 1;
480 | };
481 | com.apple.HealthKit = {
482 | enabled = 1;
483 | };
484 | };
485 | };
486 | };
487 | };
488 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "healthPulse" */;
489 | compatibilityVersion = "Xcode 3.2";
490 | developmentRegion = English;
491 | hasScannedForEncodings = 0;
492 | knownRegions = (
493 | en,
494 | Base,
495 | );
496 | mainGroup = 83CBB9F61A601CBA00E9B192;
497 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
498 | projectDirPath = "";
499 | projectReferences = (
500 | {
501 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
502 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
503 | },
504 | {
505 | ProductGroup = 9C1FE7ED1DC6D42D00E57403 /* Products */;
506 | ProjectRef = 9C1FE7EC1DC6D42D00E57403 /* RCTAppleHealthKit.xcodeproj */;
507 | },
508 | {
509 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
510 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
511 | },
512 | {
513 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
514 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
515 | },
516 | {
517 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
518 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
519 | },
520 | {
521 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
522 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
523 | },
524 | {
525 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
526 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
527 | },
528 | {
529 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
530 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
531 | },
532 | {
533 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
534 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
535 | },
536 | {
537 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
538 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
539 | },
540 | {
541 | ProductGroup = 146834001AC3E56700842450 /* Products */;
542 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
543 | },
544 | {
545 | ProductGroup = 9C1FE7C11DC6D11B00E57403 /* Products */;
546 | ProjectRef = 9C1FE7C01DC6D11B00E57403 /* RNBackgroundFetch.xcodeproj */;
547 | },
548 | );
549 | projectRoot = "";
550 | targets = (
551 | 13B07F861A680F5B00A75B9A /* healthPulse */,
552 | 00E356ED1AD99517003FC87E /* healthPulseTests */,
553 | );
554 | };
555 | /* End PBXProject section */
556 |
557 | /* Begin PBXReferenceProxy section */
558 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
559 | isa = PBXReferenceProxy;
560 | fileType = archive.ar;
561 | path = libRCTActionSheet.a;
562 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
563 | sourceTree = BUILT_PRODUCTS_DIR;
564 | };
565 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
566 | isa = PBXReferenceProxy;
567 | fileType = archive.ar;
568 | path = libRCTGeolocation.a;
569 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
570 | sourceTree = BUILT_PRODUCTS_DIR;
571 | };
572 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
573 | isa = PBXReferenceProxy;
574 | fileType = archive.ar;
575 | path = libRCTImage.a;
576 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
577 | sourceTree = BUILT_PRODUCTS_DIR;
578 | };
579 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
580 | isa = PBXReferenceProxy;
581 | fileType = archive.ar;
582 | path = libRCTNetwork.a;
583 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
584 | sourceTree = BUILT_PRODUCTS_DIR;
585 | };
586 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
587 | isa = PBXReferenceProxy;
588 | fileType = archive.ar;
589 | path = libRCTVibration.a;
590 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
591 | sourceTree = BUILT_PRODUCTS_DIR;
592 | };
593 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
594 | isa = PBXReferenceProxy;
595 | fileType = archive.ar;
596 | path = libRCTSettings.a;
597 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
598 | sourceTree = BUILT_PRODUCTS_DIR;
599 | };
600 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
601 | isa = PBXReferenceProxy;
602 | fileType = archive.ar;
603 | path = libRCTWebSocket.a;
604 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
605 | sourceTree = BUILT_PRODUCTS_DIR;
606 | };
607 | 146834041AC3E56700842450 /* libReact.a */ = {
608 | isa = PBXReferenceProxy;
609 | fileType = archive.ar;
610 | path = libReact.a;
611 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
612 | sourceTree = BUILT_PRODUCTS_DIR;
613 | };
614 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
615 | isa = PBXReferenceProxy;
616 | fileType = archive.ar;
617 | path = libRCTLinking.a;
618 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
619 | sourceTree = BUILT_PRODUCTS_DIR;
620 | };
621 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
622 | isa = PBXReferenceProxy;
623 | fileType = archive.ar;
624 | path = libRCTText.a;
625 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
626 | sourceTree = BUILT_PRODUCTS_DIR;
627 | };
628 | 9C1FE7C81DC6D11C00E57403 /* libRCTImage-tvOS.a */ = {
629 | isa = PBXReferenceProxy;
630 | fileType = archive.ar;
631 | path = "libRCTImage-tvOS.a";
632 | remoteRef = 9C1FE7C71DC6D11C00E57403 /* PBXContainerItemProxy */;
633 | sourceTree = BUILT_PRODUCTS_DIR;
634 | };
635 | 9C1FE7CC1DC6D11C00E57403 /* libRCTLinking-tvOS.a */ = {
636 | isa = PBXReferenceProxy;
637 | fileType = archive.ar;
638 | path = "libRCTLinking-tvOS.a";
639 | remoteRef = 9C1FE7CB1DC6D11C00E57403 /* PBXContainerItemProxy */;
640 | sourceTree = BUILT_PRODUCTS_DIR;
641 | };
642 | 9C1FE7D01DC6D11C00E57403 /* libRCTNetwork-tvOS.a */ = {
643 | isa = PBXReferenceProxy;
644 | fileType = archive.ar;
645 | path = "libRCTNetwork-tvOS.a";
646 | remoteRef = 9C1FE7CF1DC6D11C00E57403 /* PBXContainerItemProxy */;
647 | sourceTree = BUILT_PRODUCTS_DIR;
648 | };
649 | 9C1FE7D41DC6D11C00E57403 /* libRCTSettings-tvOS.a */ = {
650 | isa = PBXReferenceProxy;
651 | fileType = archive.ar;
652 | path = "libRCTSettings-tvOS.a";
653 | remoteRef = 9C1FE7D31DC6D11C00E57403 /* PBXContainerItemProxy */;
654 | sourceTree = BUILT_PRODUCTS_DIR;
655 | };
656 | 9C1FE7D81DC6D11C00E57403 /* libRCTText-tvOS.a */ = {
657 | isa = PBXReferenceProxy;
658 | fileType = archive.ar;
659 | path = "libRCTText-tvOS.a";
660 | remoteRef = 9C1FE7D71DC6D11C00E57403 /* PBXContainerItemProxy */;
661 | sourceTree = BUILT_PRODUCTS_DIR;
662 | };
663 | 9C1FE7DD1DC6D11C00E57403 /* libRCTWebSocket-tvOS.a */ = {
664 | isa = PBXReferenceProxy;
665 | fileType = archive.ar;
666 | path = "libRCTWebSocket-tvOS.a";
667 | remoteRef = 9C1FE7DC1DC6D11C00E57403 /* PBXContainerItemProxy */;
668 | sourceTree = BUILT_PRODUCTS_DIR;
669 | };
670 | 9C1FE7E11DC6D11C00E57403 /* libReact-tvOS.a */ = {
671 | isa = PBXReferenceProxy;
672 | fileType = archive.ar;
673 | path = "libReact-tvOS.a";
674 | remoteRef = 9C1FE7E01DC6D11C00E57403 /* PBXContainerItemProxy */;
675 | sourceTree = BUILT_PRODUCTS_DIR;
676 | };
677 | 9C1FE7E51DC6D11C00E57403 /* libRNBackgroundFetch.a */ = {
678 | isa = PBXReferenceProxy;
679 | fileType = archive.ar;
680 | path = libRNBackgroundFetch.a;
681 | remoteRef = 9C1FE7E41DC6D11C00E57403 /* PBXContainerItemProxy */;
682 | sourceTree = BUILT_PRODUCTS_DIR;
683 | };
684 | 9C1FE7F11DC6D42D00E57403 /* libRCTAppleHealthKit.a */ = {
685 | isa = PBXReferenceProxy;
686 | fileType = archive.ar;
687 | path = libRCTAppleHealthKit.a;
688 | remoteRef = 9C1FE7F01DC6D42D00E57403 /* PBXContainerItemProxy */;
689 | sourceTree = BUILT_PRODUCTS_DIR;
690 | };
691 | /* End PBXReferenceProxy section */
692 |
693 | /* Begin PBXResourcesBuildPhase section */
694 | 00E356EC1AD99517003FC87E /* Resources */ = {
695 | isa = PBXResourcesBuildPhase;
696 | buildActionMask = 2147483647;
697 | files = (
698 | );
699 | runOnlyForDeploymentPostprocessing = 0;
700 | };
701 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
702 | isa = PBXResourcesBuildPhase;
703 | buildActionMask = 2147483647;
704 | files = (
705 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
706 | );
707 | runOnlyForDeploymentPostprocessing = 0;
708 | };
709 | /* End PBXResourcesBuildPhase section */
710 |
711 | /* Begin PBXShellScriptBuildPhase section */
712 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
713 | isa = PBXShellScriptBuildPhase;
714 | buildActionMask = 2147483647;
715 | files = (
716 | );
717 | inputPaths = (
718 | );
719 | name = "Bundle React Native code and images";
720 | outputPaths = (
721 | );
722 | runOnlyForDeploymentPostprocessing = 0;
723 | shellPath = /bin/sh;
724 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh";
725 | };
726 | /* End PBXShellScriptBuildPhase section */
727 |
728 | /* Begin PBXSourcesBuildPhase section */
729 | 00E356EA1AD99517003FC87E /* Sources */ = {
730 | isa = PBXSourcesBuildPhase;
731 | buildActionMask = 2147483647;
732 | files = (
733 | 00E356F31AD99517003FC87E /* healthPulseTests.m in Sources */,
734 | );
735 | runOnlyForDeploymentPostprocessing = 0;
736 | };
737 | 13B07F871A680F5B00A75B9A /* Sources */ = {
738 | isa = PBXSourcesBuildPhase;
739 | buildActionMask = 2147483647;
740 | files = (
741 | 9C1FE7EB1DC6D20F00E57403 /* RNBackgroundFetch+AppDelegate.m in Sources */,
742 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
743 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
744 | );
745 | runOnlyForDeploymentPostprocessing = 0;
746 | };
747 | /* End PBXSourcesBuildPhase section */
748 |
749 | /* Begin PBXTargetDependency section */
750 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
751 | isa = PBXTargetDependency;
752 | target = 13B07F861A680F5B00A75B9A /* healthPulse */;
753 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
754 | };
755 | /* End PBXTargetDependency section */
756 |
757 | /* Begin XCBuildConfiguration section */
758 | 00E356F61AD99517003FC87E /* Debug */ = {
759 | isa = XCBuildConfiguration;
760 | buildSettings = {
761 | BUNDLE_LOADER = "$(TEST_HOST)";
762 | DEVELOPMENT_TEAM = SF87CBF59Z;
763 | GCC_PREPROCESSOR_DEFINITIONS = (
764 | "DEBUG=1",
765 | "$(inherited)",
766 | );
767 | INFOPLIST_FILE = healthPulseTests/Info.plist;
768 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
769 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
770 | PRODUCT_NAME = "$(TARGET_NAME)";
771 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/healthPulse.app/healthPulse";
772 | };
773 | name = Debug;
774 | };
775 | 00E356F71AD99517003FC87E /* Release */ = {
776 | isa = XCBuildConfiguration;
777 | buildSettings = {
778 | BUNDLE_LOADER = "$(TEST_HOST)";
779 | COPY_PHASE_STRIP = NO;
780 | DEVELOPMENT_TEAM = SF87CBF59Z;
781 | INFOPLIST_FILE = healthPulseTests/Info.plist;
782 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
783 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
784 | PRODUCT_NAME = "$(TARGET_NAME)";
785 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/healthPulse.app/healthPulse";
786 | };
787 | name = Release;
788 | };
789 | 13B07F941A680F5B00A75B9A /* Debug */ = {
790 | isa = XCBuildConfiguration;
791 | buildSettings = {
792 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
793 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
794 | CODE_SIGN_ENTITLEMENTS = healthPulse/healthPulse.entitlements;
795 | CURRENT_PROJECT_VERSION = 1;
796 | DEAD_CODE_STRIPPING = NO;
797 | DEVELOPMENT_TEAM = SF87CBF59Z;
798 | "FRAMEWORK_SEARCH_PATHS[arch=*]" = (
799 | "$(SRCROOT)",
800 | "$(SRCROOT)/../node_modules/react-native-background-fetch/ios/**",
801 | );
802 | HEADER_SEARCH_PATHS = (
803 | "$(inherited)",
804 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
805 | "$(SRCROOT)/../node_modules/react-native/React/**",
806 | "$(SRCROOT)/../../../React/**",
807 | );
808 | INFOPLIST_FILE = healthPulse/Info.plist;
809 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
810 | OTHER_LDFLAGS = (
811 | "$(inherited)",
812 | "-ObjC",
813 | "-lc++",
814 | );
815 | PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.example.healthpulse;
816 | PRODUCT_NAME = healthPulse;
817 | VERSIONING_SYSTEM = "apple-generic";
818 | };
819 | name = Debug;
820 | };
821 | 13B07F951A680F5B00A75B9A /* Release */ = {
822 | isa = XCBuildConfiguration;
823 | buildSettings = {
824 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
825 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
826 | CODE_SIGN_ENTITLEMENTS = healthPulse/healthPulse.entitlements;
827 | CURRENT_PROJECT_VERSION = 1;
828 | DEVELOPMENT_TEAM = SF87CBF59Z;
829 | "FRAMEWORK_SEARCH_PATHS[arch=*]" = (
830 | "$(SRCROOT)/../node_modules/react-native-background-fetch/ios/**",
831 | "$(SRCROOT)",
832 | );
833 | HEADER_SEARCH_PATHS = (
834 | "$(inherited)",
835 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
836 | "$(SRCROOT)/../node_modules/react-native/React/**",
837 | "$(SRCROOT)/../../../React/**",
838 | );
839 | INFOPLIST_FILE = healthPulse/Info.plist;
840 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
841 | OTHER_LDFLAGS = (
842 | "$(inherited)",
843 | "-ObjC",
844 | "-lc++",
845 | );
846 | PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.example.healthpulse;
847 | PRODUCT_NAME = healthPulse;
848 | VERSIONING_SYSTEM = "apple-generic";
849 | };
850 | name = Release;
851 | };
852 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
853 | isa = XCBuildConfiguration;
854 | buildSettings = {
855 | ALWAYS_SEARCH_USER_PATHS = NO;
856 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
857 | CLANG_CXX_LIBRARY = "libc++";
858 | CLANG_ENABLE_MODULES = YES;
859 | CLANG_ENABLE_OBJC_ARC = YES;
860 | CLANG_WARN_BOOL_CONVERSION = YES;
861 | CLANG_WARN_CONSTANT_CONVERSION = YES;
862 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
863 | CLANG_WARN_EMPTY_BODY = YES;
864 | CLANG_WARN_ENUM_CONVERSION = YES;
865 | CLANG_WARN_INT_CONVERSION = YES;
866 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
867 | CLANG_WARN_UNREACHABLE_CODE = YES;
868 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
869 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
870 | COPY_PHASE_STRIP = NO;
871 | ENABLE_STRICT_OBJC_MSGSEND = YES;
872 | GCC_C_LANGUAGE_STANDARD = gnu99;
873 | GCC_DYNAMIC_NO_PIC = NO;
874 | GCC_OPTIMIZATION_LEVEL = 0;
875 | GCC_PREPROCESSOR_DEFINITIONS = (
876 | "DEBUG=1",
877 | "$(inherited)",
878 | );
879 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
880 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
881 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
882 | GCC_WARN_UNDECLARED_SELECTOR = YES;
883 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
884 | GCC_WARN_UNUSED_FUNCTION = YES;
885 | GCC_WARN_UNUSED_VARIABLE = YES;
886 | HEADER_SEARCH_PATHS = (
887 | "$(inherited)",
888 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
889 | "$(SRCROOT)/../node_modules/react-native/React/**",
890 | );
891 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
892 | MTL_ENABLE_DEBUG_INFO = YES;
893 | ONLY_ACTIVE_ARCH = YES;
894 | SDKROOT = iphoneos;
895 | };
896 | name = Debug;
897 | };
898 | 83CBBA211A601CBA00E9B192 /* Release */ = {
899 | isa = XCBuildConfiguration;
900 | buildSettings = {
901 | ALWAYS_SEARCH_USER_PATHS = NO;
902 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
903 | CLANG_CXX_LIBRARY = "libc++";
904 | CLANG_ENABLE_MODULES = YES;
905 | CLANG_ENABLE_OBJC_ARC = YES;
906 | CLANG_WARN_BOOL_CONVERSION = YES;
907 | CLANG_WARN_CONSTANT_CONVERSION = YES;
908 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
909 | CLANG_WARN_EMPTY_BODY = YES;
910 | CLANG_WARN_ENUM_CONVERSION = YES;
911 | CLANG_WARN_INT_CONVERSION = YES;
912 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
913 | CLANG_WARN_UNREACHABLE_CODE = YES;
914 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
915 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
916 | COPY_PHASE_STRIP = YES;
917 | ENABLE_NS_ASSERTIONS = NO;
918 | ENABLE_STRICT_OBJC_MSGSEND = YES;
919 | GCC_C_LANGUAGE_STANDARD = gnu99;
920 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
921 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
922 | GCC_WARN_UNDECLARED_SELECTOR = YES;
923 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
924 | GCC_WARN_UNUSED_FUNCTION = YES;
925 | GCC_WARN_UNUSED_VARIABLE = YES;
926 | HEADER_SEARCH_PATHS = (
927 | "$(inherited)",
928 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
929 | "$(SRCROOT)/../node_modules/react-native/React/**",
930 | );
931 | IPHONEOS_DEPLOYMENT_TARGET = 8.0;
932 | MTL_ENABLE_DEBUG_INFO = NO;
933 | SDKROOT = iphoneos;
934 | VALIDATE_PRODUCT = YES;
935 | };
936 | name = Release;
937 | };
938 | /* End XCBuildConfiguration section */
939 |
940 | /* Begin XCConfigurationList section */
941 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "healthPulseTests" */ = {
942 | isa = XCConfigurationList;
943 | buildConfigurations = (
944 | 00E356F61AD99517003FC87E /* Debug */,
945 | 00E356F71AD99517003FC87E /* Release */,
946 | );
947 | defaultConfigurationIsVisible = 0;
948 | defaultConfigurationName = Release;
949 | };
950 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "healthPulse" */ = {
951 | isa = XCConfigurationList;
952 | buildConfigurations = (
953 | 13B07F941A680F5B00A75B9A /* Debug */,
954 | 13B07F951A680F5B00A75B9A /* Release */,
955 | );
956 | defaultConfigurationIsVisible = 0;
957 | defaultConfigurationName = Release;
958 | };
959 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "healthPulse" */ = {
960 | isa = XCConfigurationList;
961 | buildConfigurations = (
962 | 83CBBA201A601CBA00E9B192 /* Debug */,
963 | 83CBBA211A601CBA00E9B192 /* Release */,
964 | );
965 | defaultConfigurationIsVisible = 0;
966 | defaultConfigurationName = Release;
967 | };
968 | /* End XCConfigurationList section */
969 | };
970 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
971 | }
972 |
--------------------------------------------------------------------------------