├── .buckconfig ├── .eslintrc.js ├── .flowconfig ├── .gitattributes ├── .gitignore ├── .prettierrc.js ├── .watchmanconfig ├── README.md ├── __tests__ └── App-test.js ├── android ├── app │ ├── BUCK │ ├── build.gradle │ ├── build_defs.bzl │ ├── my-release-key.keystore │ ├── proguard-rules.pro │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── fonts │ │ │ ├── Andale Mono.ttf │ │ │ ├── Arial Black.ttf │ │ │ ├── Arial.ttf │ │ │ ├── Comic Sans MS.ttf │ │ │ ├── Courier New.ttf │ │ │ ├── Entypo.ttf │ │ │ ├── EvilIcons.ttf │ │ │ ├── FontAwesome.ttf │ │ │ ├── Foundation.ttf │ │ │ ├── Georgia.ttf │ │ │ ├── Ionicons.ttf │ │ │ ├── MaterialCommunityIcons.ttf │ │ │ ├── MaterialIcons.ttf │ │ │ ├── Microsoft Sans Serif.ttf │ │ │ ├── Octicons.ttf │ │ │ ├── Roboto.ttf │ │ │ ├── Roboto_medium.ttf │ │ │ ├── SF-UI-Text-Regular.otf │ │ │ ├── SimpleLineIcons.ttf │ │ │ ├── Skia.ttf │ │ │ ├── Times New Roman.ttf │ │ │ ├── Zocial.ttf │ │ │ └── rubicon-icon-font.ttf │ │ ├── java │ │ └── com │ │ │ └── rnbgexample │ │ │ ├── MainActivity.java │ │ │ └── MainApplication.java │ │ └── res │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ └── values │ │ ├── strings.xml │ │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle ├── app.json ├── babel.config.js ├── index.js ├── ios ├── Podfile ├── RNBGExample-tvOS │ └── Info.plist ├── RNBGExample-tvOSTests │ └── Info.plist ├── RNBGExample.xcodeproj │ ├── project.pbxproj │ └── xcshareddata │ │ └── xcschemes │ │ ├── RNBGExample-tvOS.xcscheme │ │ └── RNBGExample.xcscheme ├── RNBGExample.xcworkspace │ └── contents.xcworkspacedata ├── RNBGExample │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ └── LaunchScreen.xib │ ├── Images.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-60-2x.png │ │ │ └── icon-60-3x.png │ │ └── Contents.json │ ├── Info.plist │ └── main.m └── RNBGExampleTests │ ├── Info.plist │ └── RNBGExampleTests.m ├── jsconfig.json ├── metro.config.js ├── package.json ├── screenshot.png ├── src ├── Components │ ├── Config.android.js │ ├── Config.common.js │ ├── Config.ios.js │ └── configTypes.js ├── RootNavigator.js ├── app.js ├── i18n.js ├── res │ ├── TrackingDot.png │ ├── settings.png │ ├── settings.svg │ ├── start.png │ ├── start.svg │ ├── stop.png │ └── stop.svg └── scenes │ ├── AllLocations.js │ ├── Config.js │ ├── EditConfigModal.js │ ├── Logs.js │ ├── Main.js │ ├── Menu.js │ └── PendingLocations.js └── yarn.lock /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | }; 5 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore unexpected extra "@providesModule" 9 | .*/node_modules/.*/node_modules/fbjs/.* 10 | 11 | ; Ignore duplicate module providers 12 | ; For RN Apps installed via npm, "Libraries" folder is inside 13 | ; "node_modules/react-native" but in the source repo it is in the root 14 | node_modules/react-native/Libraries/react-native/React.js 15 | 16 | ; Ignore polyfills 17 | node_modules/react-native/Libraries/polyfills/.* 18 | 19 | ; These should not be required directly 20 | ; require from fbjs/lib instead: require('fbjs/lib/warning') 21 | node_modules/warning/.* 22 | 23 | ; Flow doesn't support platforms 24 | .*/Libraries/Utilities/HMRLoadingView.js 25 | 26 | [untyped] 27 | .*/node_modules/@react-native-community/cli/.*/.* 28 | 29 | [include] 30 | 31 | [libs] 32 | node_modules/react-native/Libraries/react-native/react-native-interface.js 33 | node_modules/react-native/flow/ 34 | 35 | [options] 36 | emoji=true 37 | 38 | esproposal.optional_chaining=enable 39 | esproposal.nullish_coalescing=enable 40 | 41 | module.file_ext=.js 42 | module.file_ext=.json 43 | module.file_ext=.ios.js 44 | 45 | module.system=haste 46 | module.system.haste.use_name_reducers=true 47 | # get basename 48 | module.system.haste.name_reducers='^.*/\([a-zA-Z0-9$_.-]+\.js\(\.flow\)?\)$' -> '\1' 49 | # strip .js or .js.flow suffix 50 | module.system.haste.name_reducers='^\(.*\)\.js\(\.flow\)?$' -> '\1' 51 | # strip .ios suffix 52 | module.system.haste.name_reducers='^\(.*\)\.ios$' -> '\1' 53 | module.system.haste.name_reducers='^\(.*\)\.android$' -> '\1' 54 | module.system.haste.name_reducers='^\(.*\)\.native$' -> '\1' 55 | module.system.haste.paths.blacklist=.*/__tests__/.* 56 | module.system.haste.paths.blacklist=.*/__mocks__/.* 57 | module.system.haste.paths.whitelist=/node_modules/react-native/Libraries/.* 58 | module.system.haste.paths.whitelist=/node_modules/react-native/RNTester/.* 59 | module.system.haste.paths.whitelist=/node_modules/react-native/IntegrationTests/.* 60 | module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/react-native/react-native-implementation.js 61 | module.system.haste.paths.blacklist=/node_modules/react-native/Libraries/Animated/src/polyfills/.* 62 | 63 | munge_underscores=true 64 | 65 | 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' 66 | 67 | suppress_type=$FlowIssue 68 | suppress_type=$FlowFixMe 69 | suppress_type=$FlowFixMeProps 70 | suppress_type=$FlowFixMeState 71 | 72 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) 73 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ 74 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError 75 | 76 | [lints] 77 | sketchy-null-number=warn 78 | sketchy-null-mixed=warn 79 | sketchy-number=warn 80 | untyped-type-import=warn 81 | nonstrict-import=warn 82 | deprecated-type=warn 83 | unsafe-getters-setters=warn 84 | inexact-spread=warn 85 | unnecessary-invariant=warn 86 | signature-verification-failure=warn 87 | deprecated-utility=error 88 | 89 | [strict] 90 | deprecated-type 91 | nonstrict-import 92 | sketchy-null 93 | unclear-type 94 | unsafe-getters-setters 95 | untyped-import 96 | untyped-type-import 97 | 98 | [version] 99 | ^0.98.0 100 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /.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/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | yarn-error.log 38 | 39 | # BUCK 40 | buck-out/ 41 | \.buckd/ 42 | *.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | 58 | # CocoaPods 59 | /ios/Pods/ 60 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | { 2 | ignore_dirs: ["node_modules"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React Native Background Geolocation Example 2 | 3 | ![Screenshot](/screenshot.png) 4 | 5 | # Intro 6 | 7 | This is an example app of [@mauron85/react-native-background-geolocation](https://www.npmjs.com/package/@mauron85/react-native-background-geolocation) component. 8 | 9 | # How to build 10 | 11 | In cloned directory: 12 | 13 | `yarn install` 14 | 15 | ## Android 16 | 17 | Check android lib versions: 18 | 19 | | Name | Version | 20 | |----------------------------|---------| 21 | | Google Play Services | >=30 | 22 | | Google Repository | >=28 | 23 | 24 | Go to [Google API Console](https://console.developers.google.com) and select your project, or create new one: 25 | 26 | In `Overview` -> `Google Maps API` -> `Google Maps Android API` -> Check if it's enabled. If not, click button **Enable**! 27 | Create a new key by clicking on `Create credentials` -> `API Key` -> `Android Key`, enter the name of the API key and your SHA1 key, generated before, and create it. 28 | 29 | Add Google Maps Android API Key in `android/app/src/main/res/values/strings.xml`: 30 | 31 | ```xml 32 | 33 | ... 34 | {{Your Google maps API Key Here}} 35 | 36 | ``` 37 | 38 | ### Run on device (or simulator) 39 | 40 | `react-native run-android` 41 | 42 | ## iOS 43 | 44 | ### Run on device (or simulator) 45 | 46 | `react-native run-ios` 47 | 48 | Enable **Freeway Drive** in `Debug` ➜ `Location` menu in iOS Simulator. 49 | 50 | # Quirks 51 | 52 | ## Android 53 | 54 | For compatibility with react-native-maps v0.20.1 library versions were locked in root `build.gradle` file: 55 | 56 | ``` 57 | ext { 58 | compileSdkVersion = 23 59 | targetSdkVersion = 23 60 | buildToolsVersion = "23.0.3" 61 | supportLibVersion = "23+" 62 | googlePlayServicesVersion = "11+" 63 | androidMapsUtilsVersion = "0.5" 64 | } 65 | ``` 66 | 67 | More info https://github.com/react-community/react-native-maps/blob/v0.20.1/docs/installation.md 68 | 69 | As version 0.20.1 of react-native-maps there is another [issue](https://github.com/react-community/react-native-maps/issues/1408), 70 | which was resolved by updating following lines in `app/build.gradle`: 71 | 72 | ``` 73 | compile(project(':react-native-maps')) { 74 | exclude group: 'com.google.android.gms', module: 'play-services-base' 75 | exclude group: 'com.google.android.gms', module: 'play-services-maps' 76 | } 77 | compile "com.google.android.gms:play-services-base:11+" 78 | compile 'com.google.android.gms:play-services-location:11+' 79 | compile 'com.google.android.gms:play-services-maps:11+' 80 | ``` 81 | 82 | React-native-maps version 0.21 is not [supported yet](https://github.com/mauron85/react-native-background-geolocation/issues/176). 83 | 84 | # Troubleshoot 85 | 86 | ## Android 87 | 88 | Check `adb logcat` for errors. For example wrong API key: 89 | 90 | ``` 91 | E/Google Maps Android API(31792): Authorization failure. Please see https://developers.google.com/maps/documentation/android-api/start for how to correctly set up the map. 92 | E/Google Maps Android API(31792): In the Google Developer Console (https://console.developers.google.com) 93 | E/Google Maps Android API(31792): Ensure that the "Google Maps Android API v2" is enabled. 94 | E/Google Maps Android API(31792): Ensure that the following Android Key exists: 95 | E/Google Maps Android API(31792): API Key: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 96 | E/Google Maps Android API(31792): Android Application (;): 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00;com.rnbgexample 97 | ``` 98 | 99 | # Mocking Locations & Test Server 100 | 101 | Follow instruction in [background-geolocation-server](https://github.com/mauron85/background-geolocation-server) project. -------------------------------------------------------------------------------- /__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native'; 6 | import React from 'react'; 7 | import App from '../App'; 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from 'react-test-renderer'; 11 | 12 | it('renders correctly', () => { 13 | renderer.create(); 14 | }); 15 | -------------------------------------------------------------------------------- /android/app/BUCK: -------------------------------------------------------------------------------- 1 | # To learn about Buck see [Docs](https://buckbuild.com/). 2 | # To run your application with Buck: 3 | # - install Buck 4 | # - `npm start` - to start the packager 5 | # - `cd android` 6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 8 | # - `buck install -r android/app` - compile, install and run application 9 | # 10 | 11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") 12 | 13 | lib_deps = [] 14 | 15 | create_aar_targets(glob(["libs/*.aar"])) 16 | 17 | create_jar_targets(glob(["libs/*.jar"])) 18 | 19 | android_library( 20 | name = "all-libs", 21 | exported_deps = lib_deps, 22 | ) 23 | 24 | android_library( 25 | name = "app-code", 26 | srcs = glob([ 27 | "src/main/java/**/*.java", 28 | ]), 29 | deps = [ 30 | ":all-libs", 31 | ":build_config", 32 | ":res", 33 | ], 34 | ) 35 | 36 | android_build_config( 37 | name = "build_config", 38 | package = "com.rnbgexample", 39 | ) 40 | 41 | android_resource( 42 | name = "res", 43 | package = "com.rnbgexample", 44 | res = "src/main/res", 45 | ) 46 | 47 | android_binary( 48 | name = "app", 49 | keystore = "//android/keystores:debug", 50 | manifest = "src/main/AndroidManifest.xml", 51 | package_type = "debug", 52 | deps = [ 53 | ":app-code", 54 | ], 55 | ) 56 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: "com.android.application" 2 | 3 | import com.android.build.OutputFile 4 | 5 | /** 6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets 7 | * and bundleReleaseJsAndAssets). 8 | * These basically call `react-native bundle` with the correct arguments during the Android build 9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the 10 | * bundle directly from the development server. Below you can see all the possible configurations 11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the 12 | * `apply from: "../../node_modules/react-native/react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // whether to bundle JS and assets in debug mode 22 | * bundleInDebug: false, 23 | * 24 | * // whether to bundle JS and assets in release mode 25 | * bundleInRelease: true, 26 | * 27 | * // whether to bundle JS and assets in another build variant (if configured). 28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 29 | * // The configuration property can be in the following formats 30 | * // 'bundleIn${productFlavor}${buildType}' 31 | * // 'bundleIn${buildType}' 32 | * // bundleInFreeDebug: true, 33 | * // bundleInPaidRelease: true, 34 | * // bundleInBeta: true, 35 | * 36 | * // whether to disable dev mode in custom build variants (by default only disabled in release) 37 | * // for example: to disable dev mode in the staging build type (if configured) 38 | * devDisabledInStaging: true, 39 | * // The configuration property can be in the following formats 40 | * // 'devDisabledIn${productFlavor}${buildType}' 41 | * // 'devDisabledIn${buildType}' 42 | * 43 | * // the root of your project, i.e. where "package.json" lives 44 | * root: "../../", 45 | * 46 | * // where to put the JS bundle asset in debug mode 47 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 48 | * 49 | * // where to put the JS bundle asset in release mode 50 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 51 | * 52 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 53 | * // require('./image.png')), in debug mode 54 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 55 | * 56 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 57 | * // require('./image.png')), in release mode 58 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 59 | * 60 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 61 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 62 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 63 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 64 | * // for example, you might want to remove it from here. 65 | * inputExcludes: ["android/**", "ios/**"], 66 | * 67 | * // override which node gets called and with what additional arguments 68 | * nodeExecutableAndArgs: ["node"] 69 | * 70 | * // supply additional arguments to the packager 71 | * extraPackagerArgs: [] 72 | * ] 73 | */ 74 | 75 | project.ext.react = [ 76 | entryFile: "index.js", 77 | enableHermes: false, // clean and rebuild if changing 78 | ] 79 | 80 | apply from: "../../node_modules/react-native/react.gradle" 81 | 82 | /** 83 | * Set this to true to create two separate APKs instead of one: 84 | * - An APK that only works on ARM devices 85 | * - An APK that only works on x86 devices 86 | * The advantage is the size of the APK is reduced by about 4MB. 87 | * Upload all the APKs to the Play Store and people will download 88 | * the correct one based on the CPU architecture of their device. 89 | */ 90 | def enableSeparateBuildPerCPUArchitecture = false 91 | 92 | /** 93 | * Run Proguard to shrink the Java bytecode in release builds. 94 | */ 95 | def enableProguardInReleaseBuilds = false 96 | 97 | /** 98 | * The preferred build flavor of JavaScriptCore. 99 | * 100 | * For example, to use the international variant, you can use: 101 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` 102 | * 103 | * The international variant includes ICU i18n library and necessary data 104 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that 105 | * give correct results when using with locales other than en-US. Note that 106 | * this variant is about 6MiB larger per architecture than default. 107 | */ 108 | def jscFlavor = 'org.webkit:android-jsc:+' 109 | 110 | /** 111 | * Whether to enable the Hermes VM. 112 | * 113 | * This should be set on project.ext.react and mirrored here. If it is not set 114 | * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode 115 | * and the benefits of using Hermes will therefore be sharply reduced. 116 | */ 117 | def enableHermes = project.ext.react.get("enableHermes", false); 118 | 119 | android { 120 | compileSdkVersion rootProject.ext.compileSdkVersion 121 | buildToolsVersion rootProject.ext.buildToolsVersion 122 | 123 | defaultConfig { 124 | applicationId "com.rnbgexample" 125 | minSdkVersion rootProject.ext.minSdkVersion 126 | targetSdkVersion rootProject.ext.targetSdkVersion 127 | versionCode 1 128 | versionName "1.0" 129 | ndk { 130 | abiFilters "armeabi-v7a", "x86" 131 | } 132 | } 133 | splits { 134 | abi { 135 | reset() 136 | enable enableSeparateBuildPerCPUArchitecture 137 | universalApk false // If true, also generate a universal APK 138 | include "armeabi-v7a", "x86" 139 | } 140 | } 141 | buildTypes { 142 | release { 143 | minifyEnabled enableProguardInReleaseBuilds 144 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 145 | } 146 | } 147 | // applicationVariants are e.g. debug, release 148 | applicationVariants.all { variant -> 149 | variant.outputs.each { output -> 150 | // For each separate APK per architecture, set a unique version code as described here: 151 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits 152 | def versionCodes = ["armeabi-v7a":1, "x86":2] 153 | def abi = output.getFilter(OutputFile.ABI) 154 | if (abi != null) { // null for the universal-debug, universal-release variants 155 | output.versionCodeOverride = 156 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 157 | } 158 | } 159 | } 160 | 161 | lintOptions { 162 | abortOnError false 163 | } 164 | } 165 | 166 | dependencies { 167 | compile project(':@mauron85_react-native-background-geolocation') 168 | compile project(':react-native-vector-icons') 169 | compile project(':react-native-maps') 170 | compile fileTree(dir: "libs", include: ["*.jar"]) 171 | compile "com.facebook.react:react-native:+" // From node_modules 172 | // why are these neccessary? 173 | // https://github.com/react-community/react-native-maps/issues/1408 174 | compile "com.google.android.gms:play-services-base:11+" 175 | compile 'com.google.android.gms:play-services-location:11+' 176 | compile 'com.google.android.gms:play-services-maps:11+' 177 | 178 | if (enableHermes) { 179 | def hermesPath = "../../node_modules/hermesvm/android/"; 180 | debugImplementation files(hermesPath + "hermes-debug.aar") 181 | releaseImplementation files(hermesPath + "hermes-release.aar") 182 | } else { 183 | implementation jscFlavor 184 | } 185 | } 186 | 187 | // Run this once to be able to run the application with BUCK 188 | // puts all compile dependencies into folder libs for BUCK to use 189 | task copyDownloadableDepsToLibs(type: Copy) { 190 | from configurations.compile 191 | into 'libs' 192 | } 193 | -------------------------------------------------------------------------------- /android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /android/app/my-release-key.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/my-release-key.keystore -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Disabling obfuscation is useful if you collect stack traces from production crashes 20 | # (unless you are using a system that supports de-obfuscate the stack traces). 21 | -dontobfuscate 22 | 23 | # React Native 24 | 25 | # Keep our interfaces so they can be used by other ProGuard rules. 26 | # See http://sourceforge.net/p/proguard/bugs/466/ 27 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 28 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 29 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip 30 | 31 | # Do not strip any method/class that is annotated with @DoNotStrip 32 | -keep @com.facebook.proguard.annotations.DoNotStrip class * 33 | -keep @com.facebook.common.internal.DoNotStrip class * 34 | -keepclassmembers class * { 35 | @com.facebook.proguard.annotations.DoNotStrip *; 36 | @com.facebook.common.internal.DoNotStrip *; 37 | } 38 | 39 | -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 40 | void set*(***); 41 | *** get*(); 42 | } 43 | 44 | -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 45 | -keep class * extends com.facebook.react.bridge.NativeModule { *; } 46 | -keepclassmembers,includedescriptorclasses class * { native ; } 47 | -keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } 48 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } 49 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } 50 | 51 | -dontwarn com.facebook.react.** 52 | 53 | # TextLayoutBuilder uses a non-public Android constructor within StaticLayout. 54 | # See libs/proxy/src/main/java/com/facebook/fbui/textlayoutbuilder/proxy for details. 55 | -dontwarn android.text.StaticLayout 56 | 57 | # okhttp 58 | 59 | -keepattributes Signature 60 | -keepattributes *Annotation* 61 | -keep class okhttp3.** { *; } 62 | -keep interface okhttp3.** { *; } 63 | -dontwarn okhttp3.** 64 | 65 | # okio 66 | 67 | -keep class sun.misc.Unsafe { *; } 68 | -dontwarn java.nio.file.* 69 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 70 | -dontwarn okio.** 71 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 18 | 21 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Andale Mono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Andale Mono.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Arial Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Arial Black.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Arial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Arial.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Comic Sans MS.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Comic Sans MS.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Courier New.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Courier New.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Entypo.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EvilIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/EvilIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Foundation.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Foundation.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Georgia.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Georgia.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Ionicons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/MaterialIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/MaterialIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Microsoft Sans Serif.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Microsoft Sans Serif.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Octicons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Roboto.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Roboto.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Roboto_medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Roboto_medium.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/SF-UI-Text-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/SF-UI-Text-Regular.otf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/SimpleLineIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/SimpleLineIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Skia.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Skia.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Times New Roman.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Times New Roman.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Zocial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/Zocial.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/rubicon-icon-font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/assets/fonts/rubicon-icon-font.ttf -------------------------------------------------------------------------------- /android/app/src/main/java/com/rnbgexample/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.rnbgexample; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. 9 | * This is used to schedule rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "RNBGExample"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/rnbgexample/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.rnbgexample; 2 | 3 | import android.app.Application; 4 | 5 | import com.facebook.react.ReactApplication; 6 | import com.facebook.react.ReactNativeHost; 7 | import com.facebook.react.ReactPackage; 8 | import com.facebook.react.shell.MainReactPackage; 9 | import com.facebook.soloader.SoLoader; 10 | 11 | import java.util.Arrays; 12 | import java.util.List; 13 | 14 | import com.oblador.vectoricons.VectorIconsPackage; 15 | import com.facebook.react.ReactInstanceManager; 16 | import com.airbnb.android.react.maps.MapsPackage; 17 | import com.marianhello.bgloc.react.BackgroundGeolocationPackage; 18 | 19 | public class MainApplication extends Application implements ReactApplication { 20 | 21 | private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 22 | @Override 23 | public boolean getUseDeveloperSupport() { 24 | return BuildConfig.DEBUG; 25 | } 26 | 27 | @Override 28 | protected List getPackages() { 29 | return Arrays.asList( 30 | new VectorIconsPackage(), 31 | new MapsPackage(), 32 | new BackgroundGeolocationPackage(), 33 | new MainReactPackage() 34 | ); 35 | } 36 | 37 | @Override 38 | protected String getJSMainModuleName() { 39 | return "index"; 40 | } 41 | }; 42 | 43 | @Override 44 | public ReactNativeHost getReactNativeHost() { 45 | return mReactNativeHost; 46 | } 47 | 48 | @Override 49 | public void onCreate() { 50 | super.onCreate(); 51 | SoLoader.init(this, /* native exopackage */ false); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | RNBGExample 3 | com.marianhello.RNBGExample.account 4 | com.marianhello.RNBGExample.authority 5 | {{Your Google maps API Key Here}} 6 | 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "28.0.3" 6 | minSdkVersion = 16 7 | compileSdkVersion = 28 8 | targetSdkVersion = 28 9 | supportLibVersion = "28.0.0" 10 | } 11 | repositories { 12 | maven { url 'https://maven.google.com' } 13 | jcenter() 14 | google() 15 | } 16 | dependencies { 17 | classpath 'com.android.tools.build:gradle:3.4.1' 18 | 19 | // NOTE: Do not place your application dependencies here; they belong 20 | // in the individual module build.gradle files 21 | } 22 | } 23 | 24 | ext { 25 | compileSdkVersion = 28 26 | targetSdkVersion = 28 27 | buildToolsVersion = "28.0.3" 28 | supportLibVersion = "28.0.0" 29 | googlePlayServicesVersion = "11.8.0" 30 | androidMapsUtilsVersion = "0.5+" 31 | gradle3EXPERIMENTAL = "yes" 32 | } 33 | 34 | allprojects { 35 | repositories { 36 | mavenLocal() 37 | maven { url 'https://maven.google.com' } 38 | jcenter() 39 | maven { 40 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 41 | url "$rootDir/../node_modules/react-native/android" 42 | } 43 | maven { 44 | url("$rootDir/../node_modules/jsc-android/dist") 45 | } 46 | google() 47 | } 48 | } 49 | 50 | // Workaround linting errors for react-native-maps 51 | // https://stackoverflow.com/questions/24420391/how-to-disable-lint-abortonerror-in-android-gradle-plugin-from-top-level-of-mult 52 | subprojects { 53 | afterEvaluate { 54 | if (getPlugins().hasPlugin('android') || 55 | getPlugins().hasPlugin('android-library')) { 56 | 57 | println name // for debugging 58 | 59 | configure(android.lintOptions) { 60 | abortOnError false 61 | } 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.enableJetifier=true 21 | android.useAndroidX=true 22 | android.useDeprecatedNdk=true 23 | #android.enableAapt2=false 24 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'RNBGExample' 2 | include ':@mauron85_react-native-background-geolocation-common' 3 | project(':@mauron85_react-native-background-geolocation-common').projectDir = new File(rootProject.projectDir, '../node_modules/@mauron85/react-native-background-geolocation/android/common') 4 | include ':@mauron85_react-native-background-geolocation' 5 | project(':@mauron85_react-native-background-geolocation').projectDir = new File(rootProject.projectDir, '../node_modules/@mauron85/react-native-background-geolocation/android/lib') 6 | include ':app' 7 | include ':react-native-vector-icons' 8 | project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') 9 | include ':react-native-maps' 10 | project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android') 11 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNBGExample", 3 | "displayName": "RNBGExample" 4 | } -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * @flow 5 | */ 6 | 7 | import React, { Component } from 'react'; 8 | import { AppRegistry } from 'react-native'; 9 | 10 | import App from './src/app'; 11 | 12 | AppRegistry.registerComponent('RNBGExample', () => App); 13 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' 3 | 4 | target 'RNBGExample' do 5 | # Pods for RNBGExample 6 | pod 'React', :path => '../node_modules/react-native/' 7 | pod 'React-Core', :path => '../node_modules/react-native/React' 8 | pod 'React-DevSupport', :path => '../node_modules/react-native/React' 9 | pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' 10 | pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' 11 | pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' 12 | pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' 13 | pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' 14 | pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' 15 | pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' 16 | pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' 17 | pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' 18 | pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket' 19 | 20 | pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' 21 | pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' 22 | pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' 23 | pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' 24 | pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga' 25 | 26 | pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' 27 | pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' 28 | pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' 29 | 30 | target 'RNBGExampleTests' do 31 | inherit! :search_paths 32 | # Pods for testing 33 | end 34 | 35 | use_native_modules! 36 | end 37 | 38 | target 'RNBGExample-tvOS' do 39 | # Pods for RNBGExample-tvOS 40 | 41 | target 'RNBGExample-tvOSTests' do 42 | inherit! :search_paths 43 | # Pods for testing 44 | end 45 | 46 | end 47 | -------------------------------------------------------------------------------- /ios/RNBGExample-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSExceptionDomains 28 | 29 | localhost 30 | 31 | NSExceptionAllowsInsecureHTTPLoads 32 | 33 | 34 | 35 | 36 | NSLocationWhenInUseUsageDescription 37 | 38 | UILaunchStoryboardName 39 | LaunchScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UIViewControllerBasedStatusBarAppearance 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /ios/RNBGExample-tvOSTests/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/RNBGExample.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 /* RNBGExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNBGExampleTests.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 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 21 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 22 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 23 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 24 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 25 | 1B566BED839F46BFADE817A1 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B7C280E2FD6A447DA8FF2FD8 /* Roboto.ttf */; }; 26 | 1EFDEDF240AC462F87AC283B /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5B75970CE3D24155890435D5 /* Zocial.ttf */; }; 27 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 28 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 29 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 30 | 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 31 | 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; }; 32 | 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */; }; 33 | 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */; }; 34 | 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */; }; 35 | 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */; }; 36 | 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */; }; 37 | 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; }; 38 | 2DCD954D1E0B4F2C00145EB5 /* RNBGExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNBGExampleTests.m */; }; 39 | 3469CBACB82B405EABC2BC10 /* rubicon-icon-font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2C34A5C74A774F62A8F62BDB /* rubicon-icon-font.ttf */; }; 40 | 358027481AA04B8F9032B31D /* Roboto_medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3AB0697E55CA4BB9B5DC71DF /* Roboto_medium.ttf */; }; 41 | 36019E2C4B164EAE9B582091 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3926A5AE86E34BE884A30DB7 /* FontAwesome.ttf */; }; 42 | 3F607EC6A6AA4C33822D4C47 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0D9035305D804EA09A242DFF /* MaterialCommunityIcons.ttf */; }; 43 | 50EB773E42644ED89EE8A489 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A7157D6066248EC89C68DD6 /* Octicons.ttf */; }; 44 | 590983B868C54A2181073F07 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4340924C752840A9B7E73E17 /* Ionicons.ttf */; }; 45 | 5CE1EB3B6CD2463CBB267724 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D0B3FF95A4834C3CAE8FAC4F /* SimpleLineIcons.ttf */; }; 46 | 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; }; 47 | 67EAF33AD52D4098B0C19134 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2515C83C2FAB43AE8B6CEEC0 /* Entypo.ttf */; }; 48 | 7090DF9319EC4D4E876A9125 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3717B2041F06446DBE1AA6CC /* Feather.ttf */; }; 49 | 77ECE20DA4754938A95ACE89 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6C271505088F4DAABD3F59CA /* Foundation.ttf */; }; 50 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 51 | A03A640B91DC4C8E8FF4438B /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6F2AF4CDCAF64D6299BF62D9 /* EvilIcons.ttf */; }; 52 | A65FA771E4E6499B8408C113 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4F1DE59E10694D2389BD4146 /* MaterialIcons.ttf */; }; 53 | A76922E3C5344A8A8CB5C37F /* libRCTBackgroundGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7442899F135C4DF9A45A0421 /* libRCTBackgroundGeolocation.a */; }; 54 | ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; }; 55 | D01016A6F3D4445BA28F8676 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BBDAE19653346A485B8566E /* libRNVectorIcons.a */; }; 56 | DAD21C0CA5DC47388BB3A14D /* libAirMaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EBFC2EABA2344746A32C3B3D /* libAirMaps.a */; }; 57 | /* End PBXBuildFile section */ 58 | 59 | /* Begin PBXContainerItemProxy section */ 60 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 61 | isa = PBXContainerItemProxy; 62 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 63 | proxyType = 2; 64 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 65 | remoteInfo = RCTActionSheet; 66 | }; 67 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 68 | isa = PBXContainerItemProxy; 69 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 70 | proxyType = 2; 71 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 72 | remoteInfo = RCTGeolocation; 73 | }; 74 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 75 | isa = PBXContainerItemProxy; 76 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 77 | proxyType = 2; 78 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 79 | remoteInfo = RCTImage; 80 | }; 81 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 82 | isa = PBXContainerItemProxy; 83 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 84 | proxyType = 2; 85 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 86 | remoteInfo = RCTNetwork; 87 | }; 88 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 89 | isa = PBXContainerItemProxy; 90 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 91 | proxyType = 2; 92 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 93 | remoteInfo = RCTVibration; 94 | }; 95 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 96 | isa = PBXContainerItemProxy; 97 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 98 | proxyType = 1; 99 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 100 | remoteInfo = RNBGExample; 101 | }; 102 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 103 | isa = PBXContainerItemProxy; 104 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 105 | proxyType = 2; 106 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 107 | remoteInfo = RCTSettings; 108 | }; 109 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 110 | isa = PBXContainerItemProxy; 111 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 112 | proxyType = 2; 113 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 114 | remoteInfo = RCTWebSocket; 115 | }; 116 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 117 | isa = PBXContainerItemProxy; 118 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 119 | proxyType = 2; 120 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 121 | remoteInfo = React; 122 | }; 123 | 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { 124 | isa = PBXContainerItemProxy; 125 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 126 | proxyType = 1; 127 | remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; 128 | remoteInfo = "RNBGExample-tvOS"; 129 | }; 130 | 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = { 131 | isa = PBXContainerItemProxy; 132 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 133 | proxyType = 2; 134 | remoteGlobalIDString = 2D2A283A1D9B042B00D4039D; 135 | remoteInfo = "RCTImage-tvOS"; 136 | }; 137 | 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = { 138 | isa = PBXContainerItemProxy; 139 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 140 | proxyType = 2; 141 | remoteGlobalIDString = 2D2A28471D9B043800D4039D; 142 | remoteInfo = "RCTLinking-tvOS"; 143 | }; 144 | 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 145 | isa = PBXContainerItemProxy; 146 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 147 | proxyType = 2; 148 | remoteGlobalIDString = 2D2A28541D9B044C00D4039D; 149 | remoteInfo = "RCTNetwork-tvOS"; 150 | }; 151 | 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 152 | isa = PBXContainerItemProxy; 153 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 154 | proxyType = 2; 155 | remoteGlobalIDString = 2D2A28611D9B046600D4039D; 156 | remoteInfo = "RCTSettings-tvOS"; 157 | }; 158 | 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = { 159 | isa = PBXContainerItemProxy; 160 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 161 | proxyType = 2; 162 | remoteGlobalIDString = 2D2A287B1D9B048500D4039D; 163 | remoteInfo = "RCTText-tvOS"; 164 | }; 165 | 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = { 166 | isa = PBXContainerItemProxy; 167 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 168 | proxyType = 2; 169 | remoteGlobalIDString = 2D2A28881D9B049200D4039D; 170 | remoteInfo = "RCTWebSocket-tvOS"; 171 | }; 172 | 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = { 173 | isa = PBXContainerItemProxy; 174 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 175 | proxyType = 2; 176 | remoteGlobalIDString = 2D2A28131D9B038B00D4039D; 177 | remoteInfo = "React-tvOS"; 178 | }; 179 | 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = { 180 | isa = PBXContainerItemProxy; 181 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 182 | proxyType = 2; 183 | remoteGlobalIDString = 3D3C059A1DE3340900C268FA; 184 | remoteInfo = yoga; 185 | }; 186 | 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = { 187 | isa = PBXContainerItemProxy; 188 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 189 | proxyType = 2; 190 | remoteGlobalIDString = 3D3C06751DE3340C00C268FA; 191 | remoteInfo = "yoga-tvOS"; 192 | }; 193 | 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = { 194 | isa = PBXContainerItemProxy; 195 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 196 | proxyType = 2; 197 | remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4; 198 | remoteInfo = cxxreact; 199 | }; 200 | 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 201 | isa = PBXContainerItemProxy; 202 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 203 | proxyType = 2; 204 | remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4; 205 | remoteInfo = "cxxreact-tvOS"; 206 | }; 207 | 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 208 | isa = PBXContainerItemProxy; 209 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 210 | proxyType = 2; 211 | remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4; 212 | remoteInfo = jschelpers; 213 | }; 214 | 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = { 215 | isa = PBXContainerItemProxy; 216 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 217 | proxyType = 2; 218 | remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4; 219 | remoteInfo = "jschelpers-tvOS"; 220 | }; 221 | 41103A0F224CEFEB007B6245 /* PBXContainerItemProxy */ = { 222 | isa = PBXContainerItemProxy; 223 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 224 | proxyType = 2; 225 | remoteGlobalIDString = EBF21BDC1FC498900052F4D5; 226 | remoteInfo = jsinspector; 227 | }; 228 | 41103A11224CEFEB007B6245 /* PBXContainerItemProxy */ = { 229 | isa = PBXContainerItemProxy; 230 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 231 | proxyType = 2; 232 | remoteGlobalIDString = EBF21BFA1FC4989A0052F4D5; 233 | remoteInfo = "jsinspector-tvOS"; 234 | }; 235 | 41103A13224CEFEB007B6245 /* PBXContainerItemProxy */ = { 236 | isa = PBXContainerItemProxy; 237 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 238 | proxyType = 2; 239 | remoteGlobalIDString = 139D7ECE1E25DB7D00323FB7; 240 | remoteInfo = "third-party"; 241 | }; 242 | 41103A15224CEFEB007B6245 /* PBXContainerItemProxy */ = { 243 | isa = PBXContainerItemProxy; 244 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 245 | proxyType = 2; 246 | remoteGlobalIDString = 3D383D3C1EBD27B6005632C8; 247 | remoteInfo = "third-party-tvOS"; 248 | }; 249 | 41103A17224CEFEB007B6245 /* PBXContainerItemProxy */ = { 250 | isa = PBXContainerItemProxy; 251 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 252 | proxyType = 2; 253 | remoteGlobalIDString = 139D7E881E25C6D100323FB7; 254 | remoteInfo = "double-conversion"; 255 | }; 256 | 41103A19224CEFEB007B6245 /* PBXContainerItemProxy */ = { 257 | isa = PBXContainerItemProxy; 258 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 259 | proxyType = 2; 260 | remoteGlobalIDString = 3D383D621EBD27B9005632C8; 261 | remoteInfo = "double-conversion-tvOS"; 262 | }; 263 | 41103A1B224CEFEB007B6245 /* PBXContainerItemProxy */ = { 264 | isa = PBXContainerItemProxy; 265 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 266 | proxyType = 2; 267 | remoteGlobalIDString = 9936F3131F5F2E4B0010BF04; 268 | remoteInfo = privatedata; 269 | }; 270 | 41103A1D224CEFEB007B6245 /* PBXContainerItemProxy */ = { 271 | isa = PBXContainerItemProxy; 272 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 273 | proxyType = 2; 274 | remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04; 275 | remoteInfo = "privatedata-tvOS"; 276 | }; 277 | 41103A21224CEFEB007B6245 /* PBXContainerItemProxy */ = { 278 | isa = PBXContainerItemProxy; 279 | containerPortal = CB8E74789B5F405FB40B6AA7 /* RNVectorIcons.xcodeproj */; 280 | proxyType = 2; 281 | remoteGlobalIDString = A39873CE1EA65EE60051E01A; 282 | remoteInfo = "RNVectorIcons-tvOS"; 283 | }; 284 | 41103A26224CEFEB007B6245 /* PBXContainerItemProxy */ = { 285 | isa = PBXContainerItemProxy; 286 | containerPortal = 5316097B1506479D8F69FDA6 /* RCTBackgroundGeolocation.xcodeproj */; 287 | proxyType = 2; 288 | remoteGlobalIDString = 418F75461D02DC3D0045FEA0; 289 | remoteInfo = RCTBackgroundGeolocation; 290 | }; 291 | 41B57002205183D2002220DE /* PBXContainerItemProxy */ = { 292 | isa = PBXContainerItemProxy; 293 | containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; 294 | proxyType = 2; 295 | remoteGlobalIDString = ADD01A681E09402E00F6D226; 296 | remoteInfo = "RCTBlob-tvOS"; 297 | }; 298 | 41B57014205183D2002220DE /* PBXContainerItemProxy */ = { 299 | isa = PBXContainerItemProxy; 300 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 301 | proxyType = 2; 302 | remoteGlobalIDString = 3DBE0D001F3B181A0099AA32; 303 | remoteInfo = fishhook; 304 | }; 305 | 41B57016205183D2002220DE /* PBXContainerItemProxy */ = { 306 | isa = PBXContainerItemProxy; 307 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 308 | proxyType = 2; 309 | remoteGlobalIDString = 3DBE0D0D1F3B181C0099AA32; 310 | remoteInfo = "fishhook-tvOS"; 311 | }; 312 | 41B5701E205183D3002220DE /* PBXContainerItemProxy */ = { 313 | isa = PBXContainerItemProxy; 314 | containerPortal = 3E3FEE1523C4437B904ACC00 /* AirMaps.xcodeproj */; 315 | proxyType = 2; 316 | remoteGlobalIDString = 11FA5C511C4A1296003AC2EE; 317 | remoteInfo = AirMaps; 318 | }; 319 | 41B57026205183D3002220DE /* PBXContainerItemProxy */ = { 320 | isa = PBXContainerItemProxy; 321 | containerPortal = CB8E74789B5F405FB40B6AA7 /* RNVectorIcons.xcodeproj */; 322 | proxyType = 2; 323 | remoteGlobalIDString = 5DBEB1501B18CEA900B34395; 324 | remoteInfo = RNVectorIcons; 325 | }; 326 | 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 327 | isa = PBXContainerItemProxy; 328 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 329 | proxyType = 2; 330 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 331 | remoteInfo = RCTAnimation; 332 | }; 333 | 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = { 334 | isa = PBXContainerItemProxy; 335 | containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 336 | proxyType = 2; 337 | remoteGlobalIDString = 2D2A28201D9B03D100D4039D; 338 | remoteInfo = "RCTAnimation-tvOS"; 339 | }; 340 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 341 | isa = PBXContainerItemProxy; 342 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 343 | proxyType = 2; 344 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 345 | remoteInfo = RCTLinking; 346 | }; 347 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 348 | isa = PBXContainerItemProxy; 349 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 350 | proxyType = 2; 351 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 352 | remoteInfo = RCTText; 353 | }; 354 | ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */ = { 355 | isa = PBXContainerItemProxy; 356 | containerPortal = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; 357 | proxyType = 2; 358 | remoteGlobalIDString = 358F4ED71D1E81A9004DF814; 359 | remoteInfo = RCTBlob; 360 | }; 361 | /* End PBXContainerItemProxy section */ 362 | 363 | /* Begin PBXFileReference section */ 364 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 365 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 366 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 367 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 368 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 369 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 370 | 00E356EE1AD99517003FC87E /* RNBGExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNBGExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 371 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 372 | 00E356F21AD99517003FC87E /* RNBGExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNBGExampleTests.m; sourceTree = ""; }; 373 | 0D9035305D804EA09A242DFF /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; 374 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 375 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 376 | 13B07F961A680F5B00A75B9A /* RNBGExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RNBGExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 377 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RNBGExample/AppDelegate.h; sourceTree = ""; }; 378 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = RNBGExample/AppDelegate.m; sourceTree = ""; }; 379 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 380 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RNBGExample/Images.xcassets; sourceTree = ""; }; 381 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNBGExample/Info.plist; sourceTree = ""; }; 382 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RNBGExample/main.m; sourceTree = ""; }; 383 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 384 | 2515C83C2FAB43AE8B6CEEC0 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/native-base/Fonts/Entypo.ttf"; sourceTree = ""; }; 385 | 2BBDAE19653346A485B8566E /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; 386 | 2C34A5C74A774F62A8F62BDB /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "rubicon-icon-font.ttf"; path = "../node_modules/native-base/Fonts/rubicon-icon-font.ttf"; sourceTree = ""; }; 387 | 2D02E47B1E0B4A5D006451C7 /* RNBGExample-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RNBGExample-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 388 | 2D02E4901E0B4A5D006451C7 /* RNBGExample-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RNBGExample-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 389 | 3717B2041F06446DBE1AA6CC /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; 390 | 38D8CFD286AA4D9590660050 /* libBackgroundGeolocation.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libBackgroundGeolocation.a; sourceTree = ""; }; 391 | 3926A5AE86E34BE884A30DB7 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/native-base/Fonts/FontAwesome.ttf"; sourceTree = ""; }; 392 | 3AB0697E55CA4BB9B5DC71DF /* Roboto_medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto_medium.ttf; path = "../node_modules/native-base/Fonts/Roboto_medium.ttf"; sourceTree = ""; }; 393 | 3E3FEE1523C4437B904ACC00 /* AirMaps.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = AirMaps.xcodeproj; path = "../node_modules/react-native-maps/lib/ios/AirMaps.xcodeproj"; sourceTree = ""; }; 394 | 4340924C752840A9B7E73E17 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/native-base/Fonts/Ionicons.ttf"; sourceTree = ""; }; 395 | 4A7157D6066248EC89C68DD6 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/native-base/Fonts/Octicons.ttf"; sourceTree = ""; }; 396 | 4F1DE59E10694D2389BD4146 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/native-base/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 397 | 5316097B1506479D8F69FDA6 /* RCTBackgroundGeolocation.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTBackgroundGeolocation.xcodeproj; path = "../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation.xcodeproj"; sourceTree = ""; }; 398 | 5B75970CE3D24155890435D5 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/native-base/Fonts/Zocial.ttf"; sourceTree = ""; }; 399 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = ""; }; 400 | 6C271505088F4DAABD3F59CA /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/native-base/Fonts/Foundation.ttf"; sourceTree = ""; }; 401 | 6F2AF4CDCAF64D6299BF62D9 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/native-base/Fonts/EvilIcons.ttf"; sourceTree = ""; }; 402 | 7442899F135C4DF9A45A0421 /* libRCTBackgroundGeolocation.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRCTBackgroundGeolocation.a; sourceTree = ""; }; 403 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 404 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 405 | ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = ""; }; 406 | B7C280E2FD6A447DA8FF2FD8 /* Roboto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto.ttf; path = "../node_modules/native-base/Fonts/Roboto.ttf"; sourceTree = ""; }; 407 | CB8E74789B5F405FB40B6AA7 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; 408 | D0B3FF95A4834C3CAE8FAC4F /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/native-base/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; 409 | EBFC2EABA2344746A32C3B3D /* libAirMaps.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libAirMaps.a; sourceTree = ""; }; 410 | /* End PBXFileReference section */ 411 | 412 | /* Begin PBXFrameworksBuildPhase section */ 413 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 414 | isa = PBXFrameworksBuildPhase; 415 | buildActionMask = 2147483647; 416 | files = ( 417 | 140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */, 418 | ); 419 | runOnlyForDeploymentPostprocessing = 0; 420 | }; 421 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 422 | isa = PBXFrameworksBuildPhase; 423 | buildActionMask = 2147483647; 424 | files = ( 425 | ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */, 426 | 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 427 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 428 | 5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */, 429 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 430 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 431 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 432 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 433 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 434 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 435 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 436 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 437 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 438 | DAD21C0CA5DC47388BB3A14D /* libAirMaps.a in Frameworks */, 439 | D01016A6F3D4445BA28F8676 /* libRNVectorIcons.a in Frameworks */, 440 | A76922E3C5344A8A8CB5C37F /* libRCTBackgroundGeolocation.a in Frameworks */, 441 | ); 442 | runOnlyForDeploymentPostprocessing = 0; 443 | }; 444 | 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { 445 | isa = PBXFrameworksBuildPhase; 446 | buildActionMask = 2147483647; 447 | files = ( 448 | 2D02E4C91E0B4AEC006451C7 /* libReact.a in Frameworks */, 449 | 2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */, 450 | 2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */, 451 | 2D02E4C41E0B4AEC006451C7 /* libRCTLinking-tvOS.a in Frameworks */, 452 | 2D02E4C51E0B4AEC006451C7 /* libRCTNetwork-tvOS.a in Frameworks */, 453 | 2D02E4C61E0B4AEC006451C7 /* libRCTSettings-tvOS.a in Frameworks */, 454 | 2D02E4C71E0B4AEC006451C7 /* libRCTText-tvOS.a in Frameworks */, 455 | 2D02E4C81E0B4AEC006451C7 /* libRCTWebSocket-tvOS.a in Frameworks */, 456 | ); 457 | runOnlyForDeploymentPostprocessing = 0; 458 | }; 459 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { 460 | isa = PBXFrameworksBuildPhase; 461 | buildActionMask = 2147483647; 462 | files = ( 463 | ); 464 | runOnlyForDeploymentPostprocessing = 0; 465 | }; 466 | /* End PBXFrameworksBuildPhase section */ 467 | 468 | /* Begin PBXGroup section */ 469 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 470 | isa = PBXGroup; 471 | children = ( 472 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 473 | ); 474 | name = Products; 475 | sourceTree = ""; 476 | }; 477 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 478 | isa = PBXGroup; 479 | children = ( 480 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 481 | ); 482 | name = Products; 483 | sourceTree = ""; 484 | }; 485 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 486 | isa = PBXGroup; 487 | children = ( 488 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 489 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */, 490 | ); 491 | name = Products; 492 | sourceTree = ""; 493 | }; 494 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 495 | isa = PBXGroup; 496 | children = ( 497 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 498 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */, 499 | ); 500 | name = Products; 501 | sourceTree = ""; 502 | }; 503 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 504 | isa = PBXGroup; 505 | children = ( 506 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 507 | ); 508 | name = Products; 509 | sourceTree = ""; 510 | }; 511 | 00E356EF1AD99517003FC87E /* RNBGExampleTests */ = { 512 | isa = PBXGroup; 513 | children = ( 514 | 00E356F21AD99517003FC87E /* RNBGExampleTests.m */, 515 | 00E356F01AD99517003FC87E /* Supporting Files */, 516 | ); 517 | path = RNBGExampleTests; 518 | sourceTree = ""; 519 | }; 520 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 521 | isa = PBXGroup; 522 | children = ( 523 | 00E356F11AD99517003FC87E /* Info.plist */, 524 | ); 525 | name = "Supporting Files"; 526 | sourceTree = ""; 527 | }; 528 | 01D9005956044E27A5240241 /* Resources */ = { 529 | isa = PBXGroup; 530 | children = ( 531 | 2515C83C2FAB43AE8B6CEEC0 /* Entypo.ttf */, 532 | 6F2AF4CDCAF64D6299BF62D9 /* EvilIcons.ttf */, 533 | 3926A5AE86E34BE884A30DB7 /* FontAwesome.ttf */, 534 | 6C271505088F4DAABD3F59CA /* Foundation.ttf */, 535 | 4340924C752840A9B7E73E17 /* Ionicons.ttf */, 536 | 4F1DE59E10694D2389BD4146 /* MaterialIcons.ttf */, 537 | 4A7157D6066248EC89C68DD6 /* Octicons.ttf */, 538 | 3AB0697E55CA4BB9B5DC71DF /* Roboto_medium.ttf */, 539 | B7C280E2FD6A447DA8FF2FD8 /* Roboto.ttf */, 540 | 2C34A5C74A774F62A8F62BDB /* rubicon-icon-font.ttf */, 541 | D0B3FF95A4834C3CAE8FAC4F /* SimpleLineIcons.ttf */, 542 | 5B75970CE3D24155890435D5 /* Zocial.ttf */, 543 | 3717B2041F06446DBE1AA6CC /* Feather.ttf */, 544 | 0D9035305D804EA09A242DFF /* MaterialCommunityIcons.ttf */, 545 | ); 546 | name = Resources; 547 | sourceTree = ""; 548 | }; 549 | 139105B71AF99BAD00B5F7CC /* Products */ = { 550 | isa = PBXGroup; 551 | children = ( 552 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 553 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */, 554 | ); 555 | name = Products; 556 | sourceTree = ""; 557 | }; 558 | 139FDEE71B06529A00C62182 /* Products */ = { 559 | isa = PBXGroup; 560 | children = ( 561 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 562 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */, 563 | 41B57015205183D2002220DE /* libfishhook.a */, 564 | 41B57017205183D2002220DE /* libfishhook-tvOS.a */, 565 | ); 566 | name = Products; 567 | sourceTree = ""; 568 | }; 569 | 13B07FAE1A68108700A75B9A /* RNBGExample */ = { 570 | isa = PBXGroup; 571 | children = ( 572 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 573 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 574 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 575 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 576 | 13B07FB61A68108700A75B9A /* Info.plist */, 577 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 578 | 13B07FB71A68108700A75B9A /* main.m */, 579 | ); 580 | name = RNBGExample; 581 | sourceTree = ""; 582 | }; 583 | 146834001AC3E56700842450 /* Products */ = { 584 | isa = PBXGroup; 585 | children = ( 586 | 146834041AC3E56700842450 /* libReact.a */, 587 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */, 588 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */, 589 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */, 590 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */, 591 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */, 592 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */, 593 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */, 594 | 41103A10224CEFEB007B6245 /* libjsinspector.a */, 595 | 41103A12224CEFEB007B6245 /* libjsinspector-tvOS.a */, 596 | 41103A14224CEFEB007B6245 /* libthird-party.a */, 597 | 41103A16224CEFEB007B6245 /* libthird-party.a */, 598 | 41103A18224CEFEB007B6245 /* libdouble-conversion.a */, 599 | 41103A1A224CEFEB007B6245 /* libdouble-conversion.a */, 600 | 41103A1C224CEFEB007B6245 /* libprivatedata.a */, 601 | 41103A1E224CEFEB007B6245 /* libprivatedata-tvOS.a */, 602 | ); 603 | name = Products; 604 | sourceTree = ""; 605 | }; 606 | 41103A23224CEFEB007B6245 /* Products */ = { 607 | isa = PBXGroup; 608 | children = ( 609 | 41103A27224CEFEB007B6245 /* libRCTBackgroundGeolocation.a */, 610 | ); 611 | name = Products; 612 | sourceTree = ""; 613 | }; 614 | 41B56FFC205183D1002220DE /* Recovered References */ = { 615 | isa = PBXGroup; 616 | children = ( 617 | EBFC2EABA2344746A32C3B3D /* libAirMaps.a */, 618 | 38D8CFD286AA4D9590660050 /* libBackgroundGeolocation.a */, 619 | 2BBDAE19653346A485B8566E /* libRNVectorIcons.a */, 620 | 7442899F135C4DF9A45A0421 /* libRCTBackgroundGeolocation.a */, 621 | ); 622 | name = "Recovered References"; 623 | sourceTree = ""; 624 | }; 625 | 41B57018205183D2002220DE /* Products */ = { 626 | isa = PBXGroup; 627 | children = ( 628 | 41B5701F205183D3002220DE /* libAirMaps.a */, 629 | ); 630 | name = Products; 631 | sourceTree = ""; 632 | }; 633 | 41B57023205183D3002220DE /* Products */ = { 634 | isa = PBXGroup; 635 | children = ( 636 | 41B57027205183D3002220DE /* libRNVectorIcons.a */, 637 | 41103A22224CEFEB007B6245 /* libRNVectorIcons-tvOS.a */, 638 | ); 639 | name = Products; 640 | sourceTree = ""; 641 | }; 642 | 41B5702820518579002220DE /* Frameworks */ = { 643 | isa = PBXGroup; 644 | children = ( 645 | ); 646 | name = Frameworks; 647 | sourceTree = ""; 648 | }; 649 | 5E91572E1DD0AC6500FF2AA8 /* Products */ = { 650 | isa = PBXGroup; 651 | children = ( 652 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */, 653 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */, 654 | ); 655 | name = Products; 656 | sourceTree = ""; 657 | }; 658 | 78C398B11ACF4ADC00677621 /* Products */ = { 659 | isa = PBXGroup; 660 | children = ( 661 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 662 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */, 663 | ); 664 | name = Products; 665 | sourceTree = ""; 666 | }; 667 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 668 | isa = PBXGroup; 669 | children = ( 670 | 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */, 671 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 672 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 673 | ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */, 674 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 675 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 676 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 677 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 678 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 679 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 680 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 681 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 682 | 3E3FEE1523C4437B904ACC00 /* AirMaps.xcodeproj */, 683 | CB8E74789B5F405FB40B6AA7 /* RNVectorIcons.xcodeproj */, 684 | 5316097B1506479D8F69FDA6 /* RCTBackgroundGeolocation.xcodeproj */, 685 | ); 686 | name = Libraries; 687 | sourceTree = ""; 688 | }; 689 | 832341B11AAA6A8300B99B32 /* Products */ = { 690 | isa = PBXGroup; 691 | children = ( 692 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 693 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */, 694 | ); 695 | name = Products; 696 | sourceTree = ""; 697 | }; 698 | 83CBB9F61A601CBA00E9B192 = { 699 | isa = PBXGroup; 700 | children = ( 701 | 13B07FAE1A68108700A75B9A /* RNBGExample */, 702 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 703 | 00E356EF1AD99517003FC87E /* RNBGExampleTests */, 704 | 83CBBA001A601CBA00E9B192 /* Products */, 705 | 01D9005956044E27A5240241 /* Resources */, 706 | 41B56FFC205183D1002220DE /* Recovered References */, 707 | 41B5702820518579002220DE /* Frameworks */, 708 | ); 709 | indentWidth = 2; 710 | sourceTree = ""; 711 | tabWidth = 2; 712 | usesTabs = 0; 713 | }; 714 | 83CBBA001A601CBA00E9B192 /* Products */ = { 715 | isa = PBXGroup; 716 | children = ( 717 | 13B07F961A680F5B00A75B9A /* RNBGExample.app */, 718 | 00E356EE1AD99517003FC87E /* RNBGExampleTests.xctest */, 719 | 2D02E47B1E0B4A5D006451C7 /* RNBGExample-tvOS.app */, 720 | 2D02E4901E0B4A5D006451C7 /* RNBGExample-tvOSTests.xctest */, 721 | ); 722 | name = Products; 723 | sourceTree = ""; 724 | }; 725 | ADBDB9201DFEBF0600ED6528 /* Products */ = { 726 | isa = PBXGroup; 727 | children = ( 728 | ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */, 729 | 41B57003205183D2002220DE /* libRCTBlob-tvOS.a */, 730 | ); 731 | name = Products; 732 | sourceTree = ""; 733 | }; 734 | /* End PBXGroup section */ 735 | 736 | /* Begin PBXNativeTarget section */ 737 | 00E356ED1AD99517003FC87E /* RNBGExampleTests */ = { 738 | isa = PBXNativeTarget; 739 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNBGExampleTests" */; 740 | buildPhases = ( 741 | 00E356EA1AD99517003FC87E /* Sources */, 742 | 00E356EB1AD99517003FC87E /* Frameworks */, 743 | 00E356EC1AD99517003FC87E /* Resources */, 744 | ); 745 | buildRules = ( 746 | ); 747 | dependencies = ( 748 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 749 | ); 750 | name = RNBGExampleTests; 751 | productName = RNBGExampleTests; 752 | productReference = 00E356EE1AD99517003FC87E /* RNBGExampleTests.xctest */; 753 | productType = "com.apple.product-type.bundle.unit-test"; 754 | }; 755 | 13B07F861A680F5B00A75B9A /* RNBGExample */ = { 756 | isa = PBXNativeTarget; 757 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNBGExample" */; 758 | buildPhases = ( 759 | 13B07F871A680F5B00A75B9A /* Sources */, 760 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 761 | 13B07F8E1A680F5B00A75B9A /* Resources */, 762 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 763 | ); 764 | buildRules = ( 765 | ); 766 | dependencies = ( 767 | ); 768 | name = RNBGExample; 769 | productName = "Hello World"; 770 | productReference = 13B07F961A680F5B00A75B9A /* RNBGExample.app */; 771 | productType = "com.apple.product-type.application"; 772 | }; 773 | 2D02E47A1E0B4A5D006451C7 /* RNBGExample-tvOS */ = { 774 | isa = PBXNativeTarget; 775 | buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNBGExample-tvOS" */; 776 | buildPhases = ( 777 | 2D02E4771E0B4A5D006451C7 /* Sources */, 778 | 2D02E4781E0B4A5D006451C7 /* Frameworks */, 779 | 2D02E4791E0B4A5D006451C7 /* Resources */, 780 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, 781 | ); 782 | buildRules = ( 783 | ); 784 | dependencies = ( 785 | ); 786 | name = "RNBGExample-tvOS"; 787 | productName = "RNBGExample-tvOS"; 788 | productReference = 2D02E47B1E0B4A5D006451C7 /* RNBGExample-tvOS.app */; 789 | productType = "com.apple.product-type.application"; 790 | }; 791 | 2D02E48F1E0B4A5D006451C7 /* RNBGExample-tvOSTests */ = { 792 | isa = PBXNativeTarget; 793 | buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNBGExample-tvOSTests" */; 794 | buildPhases = ( 795 | 2D02E48C1E0B4A5D006451C7 /* Sources */, 796 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */, 797 | 2D02E48E1E0B4A5D006451C7 /* Resources */, 798 | ); 799 | buildRules = ( 800 | ); 801 | dependencies = ( 802 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, 803 | ); 804 | name = "RNBGExample-tvOSTests"; 805 | productName = "RNBGExample-tvOSTests"; 806 | productReference = 2D02E4901E0B4A5D006451C7 /* RNBGExample-tvOSTests.xctest */; 807 | productType = "com.apple.product-type.bundle.unit-test"; 808 | }; 809 | /* End PBXNativeTarget section */ 810 | 811 | /* Begin PBXProject section */ 812 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 813 | isa = PBXProject; 814 | attributes = { 815 | LastUpgradeCheck = 610; 816 | ORGANIZATIONNAME = Facebook; 817 | TargetAttributes = { 818 | 00E356ED1AD99517003FC87E = { 819 | CreatedOnToolsVersion = 6.2; 820 | TestTargetID = 13B07F861A680F5B00A75B9A; 821 | }; 822 | 2D02E47A1E0B4A5D006451C7 = { 823 | CreatedOnToolsVersion = 8.2.1; 824 | ProvisioningStyle = Automatic; 825 | }; 826 | 2D02E48F1E0B4A5D006451C7 = { 827 | CreatedOnToolsVersion = 8.2.1; 828 | ProvisioningStyle = Automatic; 829 | TestTargetID = 2D02E47A1E0B4A5D006451C7; 830 | }; 831 | }; 832 | }; 833 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNBGExample" */; 834 | compatibilityVersion = "Xcode 3.2"; 835 | developmentRegion = English; 836 | hasScannedForEncodings = 0; 837 | knownRegions = ( 838 | en, 839 | Base, 840 | ); 841 | mainGroup = 83CBB9F61A601CBA00E9B192; 842 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 843 | projectDirPath = ""; 844 | projectReferences = ( 845 | { 846 | ProductGroup = 41B57018205183D2002220DE /* Products */; 847 | ProjectRef = 3E3FEE1523C4437B904ACC00 /* AirMaps.xcodeproj */; 848 | }, 849 | { 850 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 851 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 852 | }, 853 | { 854 | ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */; 855 | ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */; 856 | }, 857 | { 858 | ProductGroup = 41103A23224CEFEB007B6245 /* Products */; 859 | ProjectRef = 5316097B1506479D8F69FDA6 /* RCTBackgroundGeolocation.xcodeproj */; 860 | }, 861 | { 862 | ProductGroup = ADBDB9201DFEBF0600ED6528 /* Products */; 863 | ProjectRef = ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */; 864 | }, 865 | { 866 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 867 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 868 | }, 869 | { 870 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 871 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 872 | }, 873 | { 874 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 875 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 876 | }, 877 | { 878 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 879 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 880 | }, 881 | { 882 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 883 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 884 | }, 885 | { 886 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 887 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 888 | }, 889 | { 890 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 891 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 892 | }, 893 | { 894 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 895 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 896 | }, 897 | { 898 | ProductGroup = 146834001AC3E56700842450 /* Products */; 899 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 900 | }, 901 | { 902 | ProductGroup = 41B57023205183D3002220DE /* Products */; 903 | ProjectRef = CB8E74789B5F405FB40B6AA7 /* RNVectorIcons.xcodeproj */; 904 | }, 905 | ); 906 | projectRoot = ""; 907 | targets = ( 908 | 13B07F861A680F5B00A75B9A /* RNBGExample */, 909 | 00E356ED1AD99517003FC87E /* RNBGExampleTests */, 910 | 2D02E47A1E0B4A5D006451C7 /* RNBGExample-tvOS */, 911 | 2D02E48F1E0B4A5D006451C7 /* RNBGExample-tvOSTests */, 912 | ); 913 | }; 914 | /* End PBXProject section */ 915 | 916 | /* Begin PBXReferenceProxy section */ 917 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 918 | isa = PBXReferenceProxy; 919 | fileType = archive.ar; 920 | path = libRCTActionSheet.a; 921 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 922 | sourceTree = BUILT_PRODUCTS_DIR; 923 | }; 924 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 925 | isa = PBXReferenceProxy; 926 | fileType = archive.ar; 927 | path = libRCTGeolocation.a; 928 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 929 | sourceTree = BUILT_PRODUCTS_DIR; 930 | }; 931 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 932 | isa = PBXReferenceProxy; 933 | fileType = archive.ar; 934 | path = libRCTImage.a; 935 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 936 | sourceTree = BUILT_PRODUCTS_DIR; 937 | }; 938 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 939 | isa = PBXReferenceProxy; 940 | fileType = archive.ar; 941 | path = libRCTNetwork.a; 942 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 943 | sourceTree = BUILT_PRODUCTS_DIR; 944 | }; 945 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 946 | isa = PBXReferenceProxy; 947 | fileType = archive.ar; 948 | path = libRCTVibration.a; 949 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 950 | sourceTree = BUILT_PRODUCTS_DIR; 951 | }; 952 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 953 | isa = PBXReferenceProxy; 954 | fileType = archive.ar; 955 | path = libRCTSettings.a; 956 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 957 | sourceTree = BUILT_PRODUCTS_DIR; 958 | }; 959 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 960 | isa = PBXReferenceProxy; 961 | fileType = archive.ar; 962 | path = libRCTWebSocket.a; 963 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 964 | sourceTree = BUILT_PRODUCTS_DIR; 965 | }; 966 | 146834041AC3E56700842450 /* libReact.a */ = { 967 | isa = PBXReferenceProxy; 968 | fileType = archive.ar; 969 | path = libReact.a; 970 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 971 | sourceTree = BUILT_PRODUCTS_DIR; 972 | }; 973 | 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = { 974 | isa = PBXReferenceProxy; 975 | fileType = archive.ar; 976 | path = "libRCTImage-tvOS.a"; 977 | remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */; 978 | sourceTree = BUILT_PRODUCTS_DIR; 979 | }; 980 | 3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = { 981 | isa = PBXReferenceProxy; 982 | fileType = archive.ar; 983 | path = "libRCTLinking-tvOS.a"; 984 | remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */; 985 | sourceTree = BUILT_PRODUCTS_DIR; 986 | }; 987 | 3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = { 988 | isa = PBXReferenceProxy; 989 | fileType = archive.ar; 990 | path = "libRCTNetwork-tvOS.a"; 991 | remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */; 992 | sourceTree = BUILT_PRODUCTS_DIR; 993 | }; 994 | 3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = { 995 | isa = PBXReferenceProxy; 996 | fileType = archive.ar; 997 | path = "libRCTSettings-tvOS.a"; 998 | remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */; 999 | sourceTree = BUILT_PRODUCTS_DIR; 1000 | }; 1001 | 3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = { 1002 | isa = PBXReferenceProxy; 1003 | fileType = archive.ar; 1004 | path = "libRCTText-tvOS.a"; 1005 | remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */; 1006 | sourceTree = BUILT_PRODUCTS_DIR; 1007 | }; 1008 | 3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = { 1009 | isa = PBXReferenceProxy; 1010 | fileType = archive.ar; 1011 | path = "libRCTWebSocket-tvOS.a"; 1012 | remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */; 1013 | sourceTree = BUILT_PRODUCTS_DIR; 1014 | }; 1015 | 3DAD3EA31DF850E9000B6D8A /* libReact.a */ = { 1016 | isa = PBXReferenceProxy; 1017 | fileType = archive.ar; 1018 | path = libReact.a; 1019 | remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */; 1020 | sourceTree = BUILT_PRODUCTS_DIR; 1021 | }; 1022 | 3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = { 1023 | isa = PBXReferenceProxy; 1024 | fileType = archive.ar; 1025 | path = libyoga.a; 1026 | remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */; 1027 | sourceTree = BUILT_PRODUCTS_DIR; 1028 | }; 1029 | 3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = { 1030 | isa = PBXReferenceProxy; 1031 | fileType = archive.ar; 1032 | path = libyoga.a; 1033 | remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */; 1034 | sourceTree = BUILT_PRODUCTS_DIR; 1035 | }; 1036 | 3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = { 1037 | isa = PBXReferenceProxy; 1038 | fileType = archive.ar; 1039 | path = libcxxreact.a; 1040 | remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */; 1041 | sourceTree = BUILT_PRODUCTS_DIR; 1042 | }; 1043 | 3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = { 1044 | isa = PBXReferenceProxy; 1045 | fileType = archive.ar; 1046 | path = libcxxreact.a; 1047 | remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */; 1048 | sourceTree = BUILT_PRODUCTS_DIR; 1049 | }; 1050 | 3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = { 1051 | isa = PBXReferenceProxy; 1052 | fileType = archive.ar; 1053 | path = libjschelpers.a; 1054 | remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */; 1055 | sourceTree = BUILT_PRODUCTS_DIR; 1056 | }; 1057 | 3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = { 1058 | isa = PBXReferenceProxy; 1059 | fileType = archive.ar; 1060 | path = libjschelpers.a; 1061 | remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */; 1062 | sourceTree = BUILT_PRODUCTS_DIR; 1063 | }; 1064 | 41103A10224CEFEB007B6245 /* libjsinspector.a */ = { 1065 | isa = PBXReferenceProxy; 1066 | fileType = archive.ar; 1067 | path = libjsinspector.a; 1068 | remoteRef = 41103A0F224CEFEB007B6245 /* PBXContainerItemProxy */; 1069 | sourceTree = BUILT_PRODUCTS_DIR; 1070 | }; 1071 | 41103A12224CEFEB007B6245 /* libjsinspector-tvOS.a */ = { 1072 | isa = PBXReferenceProxy; 1073 | fileType = archive.ar; 1074 | path = "libjsinspector-tvOS.a"; 1075 | remoteRef = 41103A11224CEFEB007B6245 /* PBXContainerItemProxy */; 1076 | sourceTree = BUILT_PRODUCTS_DIR; 1077 | }; 1078 | 41103A14224CEFEB007B6245 /* libthird-party.a */ = { 1079 | isa = PBXReferenceProxy; 1080 | fileType = archive.ar; 1081 | path = "libthird-party.a"; 1082 | remoteRef = 41103A13224CEFEB007B6245 /* PBXContainerItemProxy */; 1083 | sourceTree = BUILT_PRODUCTS_DIR; 1084 | }; 1085 | 41103A16224CEFEB007B6245 /* libthird-party.a */ = { 1086 | isa = PBXReferenceProxy; 1087 | fileType = archive.ar; 1088 | path = "libthird-party.a"; 1089 | remoteRef = 41103A15224CEFEB007B6245 /* PBXContainerItemProxy */; 1090 | sourceTree = BUILT_PRODUCTS_DIR; 1091 | }; 1092 | 41103A18224CEFEB007B6245 /* libdouble-conversion.a */ = { 1093 | isa = PBXReferenceProxy; 1094 | fileType = archive.ar; 1095 | path = "libdouble-conversion.a"; 1096 | remoteRef = 41103A17224CEFEB007B6245 /* PBXContainerItemProxy */; 1097 | sourceTree = BUILT_PRODUCTS_DIR; 1098 | }; 1099 | 41103A1A224CEFEB007B6245 /* libdouble-conversion.a */ = { 1100 | isa = PBXReferenceProxy; 1101 | fileType = archive.ar; 1102 | path = "libdouble-conversion.a"; 1103 | remoteRef = 41103A19224CEFEB007B6245 /* PBXContainerItemProxy */; 1104 | sourceTree = BUILT_PRODUCTS_DIR; 1105 | }; 1106 | 41103A1C224CEFEB007B6245 /* libprivatedata.a */ = { 1107 | isa = PBXReferenceProxy; 1108 | fileType = archive.ar; 1109 | path = libprivatedata.a; 1110 | remoteRef = 41103A1B224CEFEB007B6245 /* PBXContainerItemProxy */; 1111 | sourceTree = BUILT_PRODUCTS_DIR; 1112 | }; 1113 | 41103A1E224CEFEB007B6245 /* libprivatedata-tvOS.a */ = { 1114 | isa = PBXReferenceProxy; 1115 | fileType = archive.ar; 1116 | path = "libprivatedata-tvOS.a"; 1117 | remoteRef = 41103A1D224CEFEB007B6245 /* PBXContainerItemProxy */; 1118 | sourceTree = BUILT_PRODUCTS_DIR; 1119 | }; 1120 | 41103A22224CEFEB007B6245 /* libRNVectorIcons-tvOS.a */ = { 1121 | isa = PBXReferenceProxy; 1122 | fileType = archive.ar; 1123 | path = "libRNVectorIcons-tvOS.a"; 1124 | remoteRef = 41103A21224CEFEB007B6245 /* PBXContainerItemProxy */; 1125 | sourceTree = BUILT_PRODUCTS_DIR; 1126 | }; 1127 | 41103A27224CEFEB007B6245 /* libRCTBackgroundGeolocation.a */ = { 1128 | isa = PBXReferenceProxy; 1129 | fileType = archive.ar; 1130 | path = libRCTBackgroundGeolocation.a; 1131 | remoteRef = 41103A26224CEFEB007B6245 /* PBXContainerItemProxy */; 1132 | sourceTree = BUILT_PRODUCTS_DIR; 1133 | }; 1134 | 41B57003205183D2002220DE /* libRCTBlob-tvOS.a */ = { 1135 | isa = PBXReferenceProxy; 1136 | fileType = archive.ar; 1137 | path = "libRCTBlob-tvOS.a"; 1138 | remoteRef = 41B57002205183D2002220DE /* PBXContainerItemProxy */; 1139 | sourceTree = BUILT_PRODUCTS_DIR; 1140 | }; 1141 | 41B57015205183D2002220DE /* libfishhook.a */ = { 1142 | isa = PBXReferenceProxy; 1143 | fileType = archive.ar; 1144 | path = libfishhook.a; 1145 | remoteRef = 41B57014205183D2002220DE /* PBXContainerItemProxy */; 1146 | sourceTree = BUILT_PRODUCTS_DIR; 1147 | }; 1148 | 41B57017205183D2002220DE /* libfishhook-tvOS.a */ = { 1149 | isa = PBXReferenceProxy; 1150 | fileType = archive.ar; 1151 | path = "libfishhook-tvOS.a"; 1152 | remoteRef = 41B57016205183D2002220DE /* PBXContainerItemProxy */; 1153 | sourceTree = BUILT_PRODUCTS_DIR; 1154 | }; 1155 | 41B5701F205183D3002220DE /* libAirMaps.a */ = { 1156 | isa = PBXReferenceProxy; 1157 | fileType = archive.ar; 1158 | path = libAirMaps.a; 1159 | remoteRef = 41B5701E205183D3002220DE /* PBXContainerItemProxy */; 1160 | sourceTree = BUILT_PRODUCTS_DIR; 1161 | }; 1162 | 41B57027205183D3002220DE /* libRNVectorIcons.a */ = { 1163 | isa = PBXReferenceProxy; 1164 | fileType = archive.ar; 1165 | path = libRNVectorIcons.a; 1166 | remoteRef = 41B57026205183D3002220DE /* PBXContainerItemProxy */; 1167 | sourceTree = BUILT_PRODUCTS_DIR; 1168 | }; 1169 | 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { 1170 | isa = PBXReferenceProxy; 1171 | fileType = archive.ar; 1172 | path = libRCTAnimation.a; 1173 | remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 1174 | sourceTree = BUILT_PRODUCTS_DIR; 1175 | }; 1176 | 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */ = { 1177 | isa = PBXReferenceProxy; 1178 | fileType = archive.ar; 1179 | path = libRCTAnimation.a; 1180 | remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */; 1181 | sourceTree = BUILT_PRODUCTS_DIR; 1182 | }; 1183 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 1184 | isa = PBXReferenceProxy; 1185 | fileType = archive.ar; 1186 | path = libRCTLinking.a; 1187 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 1188 | sourceTree = BUILT_PRODUCTS_DIR; 1189 | }; 1190 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 1191 | isa = PBXReferenceProxy; 1192 | fileType = archive.ar; 1193 | path = libRCTText.a; 1194 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 1195 | sourceTree = BUILT_PRODUCTS_DIR; 1196 | }; 1197 | ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */ = { 1198 | isa = PBXReferenceProxy; 1199 | fileType = archive.ar; 1200 | path = libRCTBlob.a; 1201 | remoteRef = ADBDB9261DFEBF0700ED6528 /* PBXContainerItemProxy */; 1202 | sourceTree = BUILT_PRODUCTS_DIR; 1203 | }; 1204 | /* End PBXReferenceProxy section */ 1205 | 1206 | /* Begin PBXResourcesBuildPhase section */ 1207 | 00E356EC1AD99517003FC87E /* Resources */ = { 1208 | isa = PBXResourcesBuildPhase; 1209 | buildActionMask = 2147483647; 1210 | files = ( 1211 | ); 1212 | runOnlyForDeploymentPostprocessing = 0; 1213 | }; 1214 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 1215 | isa = PBXResourcesBuildPhase; 1216 | buildActionMask = 2147483647; 1217 | files = ( 1218 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 1219 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 1220 | 67EAF33AD52D4098B0C19134 /* Entypo.ttf in Resources */, 1221 | A03A640B91DC4C8E8FF4438B /* EvilIcons.ttf in Resources */, 1222 | 36019E2C4B164EAE9B582091 /* FontAwesome.ttf in Resources */, 1223 | 77ECE20DA4754938A95ACE89 /* Foundation.ttf in Resources */, 1224 | 590983B868C54A2181073F07 /* Ionicons.ttf in Resources */, 1225 | A65FA771E4E6499B8408C113 /* MaterialIcons.ttf in Resources */, 1226 | 50EB773E42644ED89EE8A489 /* Octicons.ttf in Resources */, 1227 | 358027481AA04B8F9032B31D /* Roboto_medium.ttf in Resources */, 1228 | 1B566BED839F46BFADE817A1 /* Roboto.ttf in Resources */, 1229 | 3469CBACB82B405EABC2BC10 /* rubicon-icon-font.ttf in Resources */, 1230 | 5CE1EB3B6CD2463CBB267724 /* SimpleLineIcons.ttf in Resources */, 1231 | 1EFDEDF240AC462F87AC283B /* Zocial.ttf in Resources */, 1232 | 7090DF9319EC4D4E876A9125 /* Feather.ttf in Resources */, 1233 | 3F607EC6A6AA4C33822D4C47 /* MaterialCommunityIcons.ttf in Resources */, 1234 | ); 1235 | runOnlyForDeploymentPostprocessing = 0; 1236 | }; 1237 | 2D02E4791E0B4A5D006451C7 /* Resources */ = { 1238 | isa = PBXResourcesBuildPhase; 1239 | buildActionMask = 2147483647; 1240 | files = ( 1241 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, 1242 | ); 1243 | runOnlyForDeploymentPostprocessing = 0; 1244 | }; 1245 | 2D02E48E1E0B4A5D006451C7 /* Resources */ = { 1246 | isa = PBXResourcesBuildPhase; 1247 | buildActionMask = 2147483647; 1248 | files = ( 1249 | ); 1250 | runOnlyForDeploymentPostprocessing = 0; 1251 | }; 1252 | /* End PBXResourcesBuildPhase section */ 1253 | 1254 | /* Begin PBXShellScriptBuildPhase section */ 1255 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 1256 | isa = PBXShellScriptBuildPhase; 1257 | buildActionMask = 2147483647; 1258 | files = ( 1259 | ); 1260 | inputPaths = ( 1261 | ); 1262 | name = "Bundle React Native code and images"; 1263 | outputPaths = ( 1264 | ); 1265 | runOnlyForDeploymentPostprocessing = 0; 1266 | shellPath = /bin/sh; 1267 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 1268 | }; 1269 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { 1270 | isa = PBXShellScriptBuildPhase; 1271 | buildActionMask = 2147483647; 1272 | files = ( 1273 | ); 1274 | inputPaths = ( 1275 | ); 1276 | name = "Bundle React Native Code And Images"; 1277 | outputPaths = ( 1278 | ); 1279 | runOnlyForDeploymentPostprocessing = 0; 1280 | shellPath = /bin/sh; 1281 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 1282 | }; 1283 | /* End PBXShellScriptBuildPhase section */ 1284 | 1285 | /* Begin PBXSourcesBuildPhase section */ 1286 | 00E356EA1AD99517003FC87E /* Sources */ = { 1287 | isa = PBXSourcesBuildPhase; 1288 | buildActionMask = 2147483647; 1289 | files = ( 1290 | 00E356F31AD99517003FC87E /* RNBGExampleTests.m in Sources */, 1291 | ); 1292 | runOnlyForDeploymentPostprocessing = 0; 1293 | }; 1294 | 13B07F871A680F5B00A75B9A /* Sources */ = { 1295 | isa = PBXSourcesBuildPhase; 1296 | buildActionMask = 2147483647; 1297 | files = ( 1298 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 1299 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 1300 | ); 1301 | runOnlyForDeploymentPostprocessing = 0; 1302 | }; 1303 | 2D02E4771E0B4A5D006451C7 /* Sources */ = { 1304 | isa = PBXSourcesBuildPhase; 1305 | buildActionMask = 2147483647; 1306 | files = ( 1307 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, 1308 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, 1309 | ); 1310 | runOnlyForDeploymentPostprocessing = 0; 1311 | }; 1312 | 2D02E48C1E0B4A5D006451C7 /* Sources */ = { 1313 | isa = PBXSourcesBuildPhase; 1314 | buildActionMask = 2147483647; 1315 | files = ( 1316 | 2DCD954D1E0B4F2C00145EB5 /* RNBGExampleTests.m in Sources */, 1317 | ); 1318 | runOnlyForDeploymentPostprocessing = 0; 1319 | }; 1320 | /* End PBXSourcesBuildPhase section */ 1321 | 1322 | /* Begin PBXTargetDependency section */ 1323 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 1324 | isa = PBXTargetDependency; 1325 | target = 13B07F861A680F5B00A75B9A /* RNBGExample */; 1326 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 1327 | }; 1328 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { 1329 | isa = PBXTargetDependency; 1330 | target = 2D02E47A1E0B4A5D006451C7 /* RNBGExample-tvOS */; 1331 | targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; 1332 | }; 1333 | /* End PBXTargetDependency section */ 1334 | 1335 | /* Begin PBXVariantGroup section */ 1336 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 1337 | isa = PBXVariantGroup; 1338 | children = ( 1339 | 13B07FB21A68108700A75B9A /* Base */, 1340 | ); 1341 | name = LaunchScreen.xib; 1342 | path = RNBGExample; 1343 | sourceTree = ""; 1344 | }; 1345 | /* End PBXVariantGroup section */ 1346 | 1347 | /* Begin XCBuildConfiguration section */ 1348 | 00E356F61AD99517003FC87E /* Debug */ = { 1349 | isa = XCBuildConfiguration; 1350 | buildSettings = { 1351 | BUNDLE_LOADER = "$(TEST_HOST)"; 1352 | GCC_PREPROCESSOR_DEFINITIONS = ( 1353 | "DEBUG=1", 1354 | "$(inherited)", 1355 | ); 1356 | HEADER_SEARCH_PATHS = ( 1357 | "$(inherited)", 1358 | "$(SRCROOT)/../node_modules/react-native-maps/lib/ios/**", 1359 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 1360 | "$(SRCROOT)/../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation/**", 1361 | ); 1362 | INFOPLIST_FILE = RNBGExampleTests/Info.plist; 1363 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 1364 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1365 | LIBRARY_SEARCH_PATHS = ( 1366 | "$(inherited)", 1367 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1368 | ); 1369 | OTHER_LDFLAGS = ( 1370 | "-ObjC", 1371 | "-lc++", 1372 | ); 1373 | PRODUCT_NAME = "$(TARGET_NAME)"; 1374 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNBGExample.app/RNBGExample"; 1375 | }; 1376 | name = Debug; 1377 | }; 1378 | 00E356F71AD99517003FC87E /* Release */ = { 1379 | isa = XCBuildConfiguration; 1380 | buildSettings = { 1381 | BUNDLE_LOADER = "$(TEST_HOST)"; 1382 | COPY_PHASE_STRIP = NO; 1383 | HEADER_SEARCH_PATHS = ( 1384 | "$(inherited)", 1385 | "$(SRCROOT)/../node_modules/react-native-maps/lib/ios/**", 1386 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 1387 | "$(SRCROOT)/../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation/**", 1388 | ); 1389 | INFOPLIST_FILE = RNBGExampleTests/Info.plist; 1390 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 1391 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1392 | LIBRARY_SEARCH_PATHS = ( 1393 | "$(inherited)", 1394 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1395 | ); 1396 | OTHER_LDFLAGS = ( 1397 | "-ObjC", 1398 | "-lc++", 1399 | ); 1400 | PRODUCT_NAME = "$(TARGET_NAME)"; 1401 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNBGExample.app/RNBGExample"; 1402 | }; 1403 | name = Release; 1404 | }; 1405 | 13B07F941A680F5B00A75B9A /* Debug */ = { 1406 | isa = XCBuildConfiguration; 1407 | buildSettings = { 1408 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1409 | CURRENT_PROJECT_VERSION = 1; 1410 | DEAD_CODE_STRIPPING = NO; 1411 | HEADER_SEARCH_PATHS = ( 1412 | "$(inherited)", 1413 | "$(SRCROOT)/../node_modules/react-native-maps/lib/ios/**", 1414 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 1415 | "$(SRCROOT)/../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation/**", 1416 | ); 1417 | INFOPLIST_FILE = RNBGExample/Info.plist; 1418 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1419 | OTHER_LDFLAGS = ( 1420 | "$(inherited)", 1421 | "-ObjC", 1422 | "-lc++", 1423 | ); 1424 | PRODUCT_NAME = RNBGExample; 1425 | VERSIONING_SYSTEM = "apple-generic"; 1426 | }; 1427 | name = Debug; 1428 | }; 1429 | 13B07F951A680F5B00A75B9A /* Release */ = { 1430 | isa = XCBuildConfiguration; 1431 | buildSettings = { 1432 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 1433 | CURRENT_PROJECT_VERSION = 1; 1434 | HEADER_SEARCH_PATHS = ( 1435 | "$(inherited)", 1436 | "$(SRCROOT)/../node_modules/react-native-maps/lib/ios/**", 1437 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 1438 | "$(SRCROOT)/../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation/**", 1439 | ); 1440 | INFOPLIST_FILE = RNBGExample/Info.plist; 1441 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1442 | OTHER_LDFLAGS = ( 1443 | "$(inherited)", 1444 | "-ObjC", 1445 | "-lc++", 1446 | ); 1447 | PRODUCT_NAME = RNBGExample; 1448 | VERSIONING_SYSTEM = "apple-generic"; 1449 | }; 1450 | name = Release; 1451 | }; 1452 | 2D02E4971E0B4A5E006451C7 /* Debug */ = { 1453 | isa = XCBuildConfiguration; 1454 | buildSettings = { 1455 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 1456 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 1457 | CLANG_ANALYZER_NONNULL = YES; 1458 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1459 | CLANG_WARN_INFINITE_RECURSION = YES; 1460 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1461 | DEBUG_INFORMATION_FORMAT = dwarf; 1462 | ENABLE_TESTABILITY = YES; 1463 | GCC_NO_COMMON_BLOCKS = YES; 1464 | HEADER_SEARCH_PATHS = ( 1465 | "$(inherited)", 1466 | "$(SRCROOT)/../node_modules/react-native-maps/lib/ios/**", 1467 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 1468 | "$(SRCROOT)/../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation/**", 1469 | ); 1470 | INFOPLIST_FILE = "RNBGExample-tvOS/Info.plist"; 1471 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1472 | LIBRARY_SEARCH_PATHS = ( 1473 | "$(inherited)", 1474 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1475 | ); 1476 | OTHER_LDFLAGS = ( 1477 | "-ObjC", 1478 | "-lc++", 1479 | ); 1480 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNBGExample-tvOS"; 1481 | PRODUCT_NAME = "$(TARGET_NAME)"; 1482 | SDKROOT = appletvos; 1483 | TARGETED_DEVICE_FAMILY = 3; 1484 | TVOS_DEPLOYMENT_TARGET = 9.2; 1485 | }; 1486 | name = Debug; 1487 | }; 1488 | 2D02E4981E0B4A5E006451C7 /* Release */ = { 1489 | isa = XCBuildConfiguration; 1490 | buildSettings = { 1491 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 1492 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 1493 | CLANG_ANALYZER_NONNULL = YES; 1494 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1495 | CLANG_WARN_INFINITE_RECURSION = YES; 1496 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1497 | COPY_PHASE_STRIP = NO; 1498 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1499 | GCC_NO_COMMON_BLOCKS = YES; 1500 | HEADER_SEARCH_PATHS = ( 1501 | "$(inherited)", 1502 | "$(SRCROOT)/../node_modules/react-native-maps/lib/ios/**", 1503 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 1504 | "$(SRCROOT)/../node_modules/@mauron85/react-native-background-geolocation/ios/RCTBackgroundGeolocation/**", 1505 | ); 1506 | INFOPLIST_FILE = "RNBGExample-tvOS/Info.plist"; 1507 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1508 | LIBRARY_SEARCH_PATHS = ( 1509 | "$(inherited)", 1510 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1511 | ); 1512 | OTHER_LDFLAGS = ( 1513 | "-ObjC", 1514 | "-lc++", 1515 | ); 1516 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNBGExample-tvOS"; 1517 | PRODUCT_NAME = "$(TARGET_NAME)"; 1518 | SDKROOT = appletvos; 1519 | TARGETED_DEVICE_FAMILY = 3; 1520 | TVOS_DEPLOYMENT_TARGET = 9.2; 1521 | }; 1522 | name = Release; 1523 | }; 1524 | 2D02E4991E0B4A5E006451C7 /* Debug */ = { 1525 | isa = XCBuildConfiguration; 1526 | buildSettings = { 1527 | BUNDLE_LOADER = "$(TEST_HOST)"; 1528 | CLANG_ANALYZER_NONNULL = YES; 1529 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1530 | CLANG_WARN_INFINITE_RECURSION = YES; 1531 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1532 | DEBUG_INFORMATION_FORMAT = dwarf; 1533 | ENABLE_TESTABILITY = YES; 1534 | GCC_NO_COMMON_BLOCKS = YES; 1535 | INFOPLIST_FILE = "RNBGExample-tvOSTests/Info.plist"; 1536 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1537 | LIBRARY_SEARCH_PATHS = ( 1538 | "$(inherited)", 1539 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1540 | ); 1541 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNBGExample-tvOSTests"; 1542 | PRODUCT_NAME = "$(TARGET_NAME)"; 1543 | SDKROOT = appletvos; 1544 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNBGExample-tvOS.app/RNBGExample-tvOS"; 1545 | TVOS_DEPLOYMENT_TARGET = 10.1; 1546 | }; 1547 | name = Debug; 1548 | }; 1549 | 2D02E49A1E0B4A5E006451C7 /* Release */ = { 1550 | isa = XCBuildConfiguration; 1551 | buildSettings = { 1552 | BUNDLE_LOADER = "$(TEST_HOST)"; 1553 | CLANG_ANALYZER_NONNULL = YES; 1554 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1555 | CLANG_WARN_INFINITE_RECURSION = YES; 1556 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1557 | COPY_PHASE_STRIP = NO; 1558 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1559 | GCC_NO_COMMON_BLOCKS = YES; 1560 | INFOPLIST_FILE = "RNBGExample-tvOSTests/Info.plist"; 1561 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1562 | LIBRARY_SEARCH_PATHS = ( 1563 | "$(inherited)", 1564 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 1565 | ); 1566 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNBGExample-tvOSTests"; 1567 | PRODUCT_NAME = "$(TARGET_NAME)"; 1568 | SDKROOT = appletvos; 1569 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNBGExample-tvOS.app/RNBGExample-tvOS"; 1570 | TVOS_DEPLOYMENT_TARGET = 10.1; 1571 | }; 1572 | name = Release; 1573 | }; 1574 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 1575 | isa = XCBuildConfiguration; 1576 | buildSettings = { 1577 | ALWAYS_SEARCH_USER_PATHS = NO; 1578 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1579 | CLANG_CXX_LIBRARY = "libc++"; 1580 | CLANG_ENABLE_MODULES = YES; 1581 | CLANG_ENABLE_OBJC_ARC = YES; 1582 | CLANG_WARN_BOOL_CONVERSION = YES; 1583 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1584 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1585 | CLANG_WARN_EMPTY_BODY = YES; 1586 | CLANG_WARN_ENUM_CONVERSION = YES; 1587 | CLANG_WARN_INT_CONVERSION = YES; 1588 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1589 | CLANG_WARN_UNREACHABLE_CODE = YES; 1590 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1591 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1592 | COPY_PHASE_STRIP = NO; 1593 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1594 | GCC_C_LANGUAGE_STANDARD = gnu99; 1595 | GCC_DYNAMIC_NO_PIC = NO; 1596 | GCC_OPTIMIZATION_LEVEL = 0; 1597 | GCC_PREPROCESSOR_DEFINITIONS = ( 1598 | "DEBUG=1", 1599 | "$(inherited)", 1600 | ); 1601 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 1602 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1603 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1604 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1605 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1606 | GCC_WARN_UNUSED_FUNCTION = YES; 1607 | GCC_WARN_UNUSED_VARIABLE = YES; 1608 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 1609 | MTL_ENABLE_DEBUG_INFO = YES; 1610 | ONLY_ACTIVE_ARCH = YES; 1611 | SDKROOT = iphoneos; 1612 | }; 1613 | name = Debug; 1614 | }; 1615 | 83CBBA211A601CBA00E9B192 /* Release */ = { 1616 | isa = XCBuildConfiguration; 1617 | buildSettings = { 1618 | ALWAYS_SEARCH_USER_PATHS = NO; 1619 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1620 | CLANG_CXX_LIBRARY = "libc++"; 1621 | CLANG_ENABLE_MODULES = YES; 1622 | CLANG_ENABLE_OBJC_ARC = YES; 1623 | CLANG_WARN_BOOL_CONVERSION = YES; 1624 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1625 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1626 | CLANG_WARN_EMPTY_BODY = YES; 1627 | CLANG_WARN_ENUM_CONVERSION = YES; 1628 | CLANG_WARN_INT_CONVERSION = YES; 1629 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1630 | CLANG_WARN_UNREACHABLE_CODE = YES; 1631 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1632 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1633 | COPY_PHASE_STRIP = YES; 1634 | ENABLE_NS_ASSERTIONS = NO; 1635 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1636 | GCC_C_LANGUAGE_STANDARD = gnu99; 1637 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1638 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1639 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1640 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1641 | GCC_WARN_UNUSED_FUNCTION = YES; 1642 | GCC_WARN_UNUSED_VARIABLE = YES; 1643 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 1644 | MTL_ENABLE_DEBUG_INFO = NO; 1645 | SDKROOT = iphoneos; 1646 | VALIDATE_PRODUCT = YES; 1647 | }; 1648 | name = Release; 1649 | }; 1650 | /* End XCBuildConfiguration section */ 1651 | 1652 | /* Begin XCConfigurationList section */ 1653 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNBGExampleTests" */ = { 1654 | isa = XCConfigurationList; 1655 | buildConfigurations = ( 1656 | 00E356F61AD99517003FC87E /* Debug */, 1657 | 00E356F71AD99517003FC87E /* Release */, 1658 | ); 1659 | defaultConfigurationIsVisible = 0; 1660 | defaultConfigurationName = Release; 1661 | }; 1662 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNBGExample" */ = { 1663 | isa = XCConfigurationList; 1664 | buildConfigurations = ( 1665 | 13B07F941A680F5B00A75B9A /* Debug */, 1666 | 13B07F951A680F5B00A75B9A /* Release */, 1667 | ); 1668 | defaultConfigurationIsVisible = 0; 1669 | defaultConfigurationName = Release; 1670 | }; 1671 | 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNBGExample-tvOS" */ = { 1672 | isa = XCConfigurationList; 1673 | buildConfigurations = ( 1674 | 2D02E4971E0B4A5E006451C7 /* Debug */, 1675 | 2D02E4981E0B4A5E006451C7 /* Release */, 1676 | ); 1677 | defaultConfigurationIsVisible = 0; 1678 | defaultConfigurationName = Release; 1679 | }; 1680 | 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNBGExample-tvOSTests" */ = { 1681 | isa = XCConfigurationList; 1682 | buildConfigurations = ( 1683 | 2D02E4991E0B4A5E006451C7 /* Debug */, 1684 | 2D02E49A1E0B4A5E006451C7 /* Release */, 1685 | ); 1686 | defaultConfigurationIsVisible = 0; 1687 | defaultConfigurationName = Release; 1688 | }; 1689 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNBGExample" */ = { 1690 | isa = XCConfigurationList; 1691 | buildConfigurations = ( 1692 | 83CBBA201A601CBA00E9B192 /* Debug */, 1693 | 83CBBA211A601CBA00E9B192 /* Release */, 1694 | ); 1695 | defaultConfigurationIsVisible = 0; 1696 | defaultConfigurationName = Release; 1697 | }; 1698 | /* End XCConfigurationList section */ 1699 | }; 1700 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1701 | } 1702 | -------------------------------------------------------------------------------- /ios/RNBGExample.xcodeproj/xcshareddata/xcschemes/RNBGExample-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 67 | 68 | 69 | 70 | 71 | 77 | 78 | 79 | 80 | 81 | 82 | 92 | 94 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 113 | 119 | 120 | 121 | 122 | 124 | 125 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /ios/RNBGExample.xcodeproj/xcshareddata/xcschemes/RNBGExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 67 | 68 | 69 | 70 | 71 | 77 | 78 | 79 | 80 | 81 | 82 | 92 | 94 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 113 | 119 | 120 | 121 | 122 | 124 | 125 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /ios/RNBGExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/RNBGExample/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/RNBGExample/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 13 | #import 14 | 15 | @implementation AppDelegate 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 18 | { 19 | NSURL *jsCodeLocation; 20 | 21 | jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; 22 | 23 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 24 | moduleName:@"RNBGExample" 25 | initialProperties:nil 26 | launchOptions:launchOptions]; 27 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 28 | 29 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 30 | UIViewController *rootViewController = [UIViewController new]; 31 | rootViewController.view = rootView; 32 | self.window.rootViewController = rootViewController; 33 | [self.window makeKeyAndVisible]; 34 | return YES; 35 | } 36 | 37 | @end 38 | -------------------------------------------------------------------------------- /ios/RNBGExample/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /ios/RNBGExample/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "icon-60-2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "icon-60-3x.png", 43 | "scale" : "3x" 44 | } 45 | ], 46 | "info" : { 47 | "version" : 1, 48 | "author" : "xcode" 49 | } 50 | } -------------------------------------------------------------------------------- /ios/RNBGExample/Images.xcassets/AppIcon.appiconset/icon-60-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/ios/RNBGExample/Images.xcassets/AppIcon.appiconset/icon-60-2x.png -------------------------------------------------------------------------------- /ios/RNBGExample/Images.xcassets/AppIcon.appiconset/icon-60-3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/ios/RNBGExample/Images.xcassets/AppIcon.appiconset/icon-60-3x.png -------------------------------------------------------------------------------- /ios/RNBGExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/RNBGExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | RNBGExample 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 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 | NSLocationWhenInUseUsageDescription 39 | This app always requires location tracking 40 | NSLocationAlwaysAndWhenInUseUsageDescription 41 | This app always requires location tracking 42 | UIAppFonts 43 | 44 | Entypo.ttf 45 | EvilIcons.ttf 46 | FontAwesome.ttf 47 | Foundation.ttf 48 | Ionicons.ttf 49 | MaterialIcons.ttf 50 | Octicons.ttf 51 | Roboto_medium.ttf 52 | Roboto.ttf 53 | rubicon-icon-font.ttf 54 | SimpleLineIcons.ttf 55 | Zocial.ttf 56 | Feather.ttf 57 | MaterialCommunityIcons.ttf 58 | 59 | UIBackgroundModes 60 | 61 | location 62 | 63 | UILaunchStoryboardName 64 | LaunchScreen 65 | UIRequiredDeviceCapabilities 66 | 67 | armv7 68 | 69 | UISupportedInterfaceOrientations 70 | 71 | UIInterfaceOrientationPortrait 72 | UIInterfaceOrientationLandscapeLeft 73 | UIInterfaceOrientationLandscapeRight 74 | 75 | UIViewControllerBasedStatusBarAppearance 76 | 77 | NSLocationAlwaysUsageDescription 78 | App requires background tracking 79 | NSMotionUsageDescription 80 | App requires motion tracking 81 | 82 | -------------------------------------------------------------------------------- /ios/RNBGExample/main.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 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ios/RNBGExampleTests/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/RNBGExampleTests/RNBGExampleTests.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 14 | #import 15 | 16 | #define TIMEOUT_SECONDS 600 17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 18 | 19 | @interface RNBGExampleTests : XCTestCase 20 | 21 | @end 22 | 23 | @implementation RNBGExampleTests 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 = [[[RCTSharedApplication() 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 | -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowJs": true, 4 | "allowSyntheticDefaultImports": true 5 | }, 6 | "exclude": [ 7 | "node_modules" 8 | ] 9 | } -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNBGExample", 3 | "version": "0.2.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "node node_modules/react-native/local-cli/cli.js start" 7 | }, 8 | "devDependencies": { 9 | "babel-jest": "23.6.0", 10 | "jest": "23.6.0", 11 | "metro-react-native-babel-preset": "0.50.0", 12 | "react-test-renderer": "16.6.1" 13 | }, 14 | "dependencies": { 15 | "@mauron85/react-native-background-geolocation": "^0.6.1", 16 | "native-base": "^2.13.5", 17 | "prop-types": "^15.5.10", 18 | "react": "16.8.6", 19 | "react-native": "0.60.5", 20 | "react-native-maps": "^0.25.0", 21 | "react-native-vector-icons": "^6.1.0", 22 | "react-navigation": "^1.0.0-beta.15" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/screenshot.png -------------------------------------------------------------------------------- /src/Components/Config.android.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { InteractionManager, View, Text } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Title, 7 | Content, 8 | Body, 9 | Right, 10 | Footer, 11 | FooterTab, 12 | Button, 13 | Icon, 14 | Input, 15 | Switch, 16 | List, 17 | ListItem 18 | } from 'native-base'; 19 | import CommonConfig from './Config.common'; 20 | import { i18n } from '../i18n'; 21 | 22 | class ConfigScene extends Component { 23 | static defaultProps = { 24 | interval: 0, 25 | fastestInterval: 0, 26 | activitiesInterval: 0, 27 | startOnBoot: false, 28 | notificationTitle: '', 29 | notificationText: '', 30 | notificationIconColor: '' 31 | }; 32 | 33 | constructor(props) { 34 | super(props); 35 | this.onPress = this.onPress.bind(this); 36 | this.onChange = this.onChange.bind(this); 37 | } 38 | 39 | onPress(key) { 40 | this.props.onEdit(key); 41 | } 42 | 43 | onChange(val, key) { 44 | this.props.onChange(key, val); 45 | } 46 | 47 | render() { 48 | const { 49 | interval, 50 | fastestInterval, 51 | activitiesInterval, 52 | locationProvider, 53 | startOnBoot, 54 | notificationTitle, 55 | notificationText, 56 | notificationIconColor 57 | } = this.props; 58 | return ( 59 | 60 | 61 | 62 | 63 | Android 64 | 65 | this.onPress('interval')}> 66 | 67 | {i18n.interval} 68 | {interval} [ms] 69 | 70 | 71 | 72 | 73 | 74 | this.onPress('fastestInterval')}> 75 | 76 | {i18n.fastestInterval} 77 | {fastestInterval} [ms] 78 | 79 | 80 | 81 | 82 | 83 | this.onPress('activitiesInterval')}> 84 | 85 | {i18n.activitiesInterval} 86 | {activitiesInterval} [ms] 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | {i18n.startOnBoot} 95 | 96 | 97 | this.onChange(val, 'startOnBoot')} 100 | /> 101 | 102 | 103 | 104 | Notification 105 | 106 | this.onPress('notificationTitle')}> 107 | 108 | {i18n.notificationTitle} 109 | {notificationTitle} 110 | 111 | 112 | 113 | 114 | 115 | this.onPress('notificationText')}> 116 | 117 | {i18n.notificationText} 118 | {notificationText} 119 | 120 | 121 | 122 | 123 | 124 | this.onPress('notificationIconColor')}> 125 | 126 | {i18n.notificationIconColor} 127 | {notificationIconColor} 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | ); 136 | } 137 | } 138 | 139 | export default ConfigScene; 140 | -------------------------------------------------------------------------------- /src/Components/Config.common.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { InteractionManager, View, Text } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Title, 7 | Content, 8 | Footer, 9 | FooterTab, 10 | Body, 11 | Right, 12 | Button, 13 | Icon, 14 | Input, 15 | Switch, 16 | List, 17 | ListItem 18 | } from 'native-base'; 19 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 20 | import { i18n } from '../i18n'; 21 | 22 | export const providers = [ 23 | { 24 | label: 'Distance Filter', 25 | value: BackgroundGeolocation.DISTANCE_FILTER_PROVIDER 26 | }, 27 | { 28 | label: 'Activity', 29 | value: BackgroundGeolocation.ACTIVITY_PROVIDER 30 | }, 31 | { 32 | label: 'Raw', 33 | value: BackgroundGeolocation.RAW_PROVIDER 34 | } 35 | ]; 36 | 37 | class Config extends Component { 38 | static defaultProps = { 39 | locationProvider: 0, 40 | desiredAccuracy: 0, 41 | stationaryRadius: 0, 42 | distanceFilter: 0, 43 | debug: false, 44 | startForeground: false, 45 | stopOnStillActivity: false, 46 | stopOnTerminate: true, 47 | maxLocations: 1000, 48 | url: '', 49 | syncUrl: '', 50 | syncThreshold: 100 51 | }; 52 | 53 | constructor(props) { 54 | super(props); 55 | this.onPress = this.onPress.bind(this); 56 | this.onChange = this.onChange.bind(this); 57 | } 58 | 59 | onPress(key) { 60 | this.props.onEdit(key); 61 | } 62 | 63 | onChange(val, key) { 64 | this.props.onChange(key, val); 65 | } 66 | 67 | render() { 68 | const { 69 | locationProvider, 70 | desiredAccuracy, 71 | stationaryRadius, 72 | distanceFilter, 73 | debug, 74 | startForeground, 75 | stopOnStillActivity, 76 | stopOnTerminate, 77 | maxLocations, 78 | url, 79 | syncUrl, 80 | syncThreshold 81 | } = this.props; 82 | return ( 83 | 84 | 85 | General 86 | 87 | this.onPress('desiredAccuracy')}> 88 | 89 | {i18n.desiredAccuracy} 90 | {desiredAccuracy} [meters] 91 | 92 | 93 | 94 | 95 | 96 | this.onPress('stationaryRadius')}> 97 | 98 | {i18n.stationaryRadius} 99 | {stationaryRadius} [meters] 100 | 101 | 102 | 103 | 104 | 105 | this.onPress('distanceFilter')}> 106 | 107 | {i18n.distanceFilter} 108 | {distanceFilter} [meters] 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | {i18n.debug} 117 | 118 | 119 | this.onChange(val, 'debug')} 122 | /> 123 | 124 | 125 | 126 | 127 | {i18n.startForeground} 128 | 129 | 130 | this.onChange(val, 'startForeground')} 133 | /> 134 | 135 | 136 | 137 | 138 | {i18n.stopOnStillActivity} 139 | 140 | 141 | this.onChange(val, 'stopOnStillActivity')} 144 | /> 145 | 146 | 147 | 148 | 149 | {i18n.stopOnTerminate} 150 | 151 | 152 | this.onChange(val, 'stopOnTerminate')} 155 | /> 156 | 157 | 158 | this.onPress('locationProvider')}> 159 | 160 | {i18n.locationProvider} 161 | {providers[locationProvider].label} 162 | 163 | 164 | 165 | 166 | 167 | 168 | Location sync 169 | 170 | this.onPress('maxLocations')}> 171 | 172 | {i18n.maxLocations} 173 | {maxLocations} 174 | 175 | 176 | 177 | 178 | 179 | this.onPress('url')}> 180 | 181 | {i18n.url} 182 | {url} 183 | 184 | 185 | 186 | 187 | 188 | this.onPress('syncUrl')}> 189 | 190 | {i18n.syncUrl} 191 | {syncUrl} 192 | 193 | 194 | 195 | 196 | 197 | this.onPress('syncThreshold')}> 198 | 199 | {i18n.syncThreshold} 200 | {syncThreshold} 201 | 202 | 203 | 204 | 205 | 206 | 207 | ); 208 | } 209 | } 210 | 211 | export default Config; 212 | -------------------------------------------------------------------------------- /src/Components/Config.ios.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { InteractionManager, View, Text } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Title, 7 | Content, 8 | Body, 9 | Right, 10 | Footer, 11 | FooterTab, 12 | Button, 13 | Icon, 14 | Input, 15 | Switch, 16 | List, 17 | ListItem 18 | } from 'native-base'; 19 | import CommonConfig from './Config.common'; 20 | import { i18n } from '../i18n'; 21 | 22 | export const activities = [ 23 | { 24 | label: 'Automotive', 25 | value: 'AutomotiveNavigation', 26 | }, 27 | { 28 | label: 'Fitness', 29 | value: 'Fitness', 30 | }, 31 | { 32 | label: 'Other', 33 | value: 'OtherNavigation', 34 | } 35 | ]; 36 | 37 | class Config extends Component { 38 | static defaultProps = { 39 | activityType: 0, 40 | pauseLocationUpdates: false, 41 | saveBatteryOnBackground: false 42 | }; 43 | 44 | constructor(props) { 45 | super(props); 46 | this.onPress = this.onPress.bind(this); 47 | this.onChange = this.onChange.bind(this); 48 | } 49 | 50 | onPress(key) { 51 | this.props.onEdit(key); 52 | } 53 | 54 | onChange(val, key) { 55 | this.props.onChange(key, val); 56 | } 57 | 58 | render() { 59 | const { 60 | activityType, 61 | pauseLocationUpdates, 62 | saveBatteryOnBackground 63 | } = this.props; 64 | 65 | const activity = activities.find(activity => { 66 | activity.value === activityType; 67 | }); 68 | 69 | return ( 70 | 71 | 72 | 73 | 74 | iOS 75 | 76 | 77 | 78 | {i18n.pauseLocationUpdates} 79 | 80 | 81 | this.onChange(val, 'pauseLocationUpdates')} 84 | /> 85 | 86 | 87 | 88 | 89 | {i18n.saveBatteryOnBackground} 90 | 91 | 92 | this.onChange(val, 'saveBatteryOnBackground')} 95 | /> 96 | 97 | 98 | this.onPress('activityType')}> 99 | 100 | {i18n.activityType} 101 | {activity} 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | ); 110 | } 111 | } 112 | 113 | export default Config; 114 | -------------------------------------------------------------------------------- /src/Components/configTypes.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types'; 2 | 3 | export commonTypes = { 4 | desiredAccuracy: PropTypes.number, 5 | stationaryRadius: PropTypes.number, 6 | distanceFilter: PropTypes.number, 7 | debug: PropTypes.bool, 8 | startForeground: PropTypes.bool, 9 | stopOnStillActivity: PropTypes.bool, 10 | stopOnTerminate: PropTypes.bool, 11 | maxLocations: PropTypes.number, 12 | url: PropTypes.string, 13 | syncUrl: PropTypes.string, 14 | syncThreshold: PropTypes.number, 15 | }; 16 | 17 | export androidConfig = { 18 | interval: PropTypes.number, 19 | fastestInterval: PropTypes.number, 20 | activitiesInterval: PropTypes.number, 21 | locationProvider: PropTypes.number, 22 | startOnBoot: PropTypes.bool, 23 | notificationTitle: PropTypes.string, 24 | notificationText: PropTypes.string, 25 | notificationIconColor: PropTypes.string 26 | }; 27 | -------------------------------------------------------------------------------- /src/RootNavigator.js: -------------------------------------------------------------------------------- 1 | import { StackNavigator } from 'react-navigation'; 2 | import MainScene from './scenes/Main'; 3 | import MenuScene from './scenes/Menu'; 4 | import LogsScene from './scenes/Logs'; 5 | import AllLocationsScene from './scenes/AllLocations'; 6 | import PendingLocationsScene from './scenes/PendingLocations'; 7 | import ConfigScene from './scenes/Config'; 8 | 9 | const RootNavigator = StackNavigator({ 10 | Main: { screen: MainScene }, 11 | Menu: { screen: MenuScene }, 12 | Logs: { screen: LogsScene }, 13 | AllLocations: { screen: AllLocationsScene }, 14 | PendingLocations: { screen: PendingLocationsScene }, 15 | Config: { screen: ConfigScene } 16 | }); 17 | 18 | export default RootNavigator; -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | import RootNavigator from './RootNavigator'; 2 | 3 | export default RootNavigator; 4 | -------------------------------------------------------------------------------- /src/i18n.js: -------------------------------------------------------------------------------- 1 | export const i18n = { 2 | desiredAccuracy: 'Desired Accuracy', 3 | stationaryRadius: 'Stationary Radius', 4 | distanceFilter: 'Distance Filter', 5 | debug: 'Debug', 6 | startForeground: 'Start Foreground', 7 | stopOnStillActivity: 'Stop On Still', 8 | stopOnTerminate: 'Stop On Terminate', 9 | maxLocations: 'Max. Locations', 10 | url: 'Post url.', 11 | syncUrl: 'Sync url.', 12 | syncThreshold: 'Sync. Threshold', 13 | // Android 14 | interval: 'Interval', 15 | fastestInterval: 'Fast. Interval', 16 | activitiesInterval: 'Activ. Interval', 17 | locationProvider: 'Location Provider', 18 | startOnBoot: 'Start On Boot', 19 | notificationTitle: 'Title', 20 | notificationText: 'Text', 21 | notificationIconColor: 'Color', 22 | // iOS 23 | activityType: 'Activity', 24 | pauseLocationUpdates: 'Pause Updates', 25 | saveBatteryOnBackground: 'Save battery' 26 | }; 27 | -------------------------------------------------------------------------------- /src/res/TrackingDot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/src/res/TrackingDot.png -------------------------------------------------------------------------------- /src/res/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/src/res/settings.png -------------------------------------------------------------------------------- /src/res/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/res/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/src/res/start.png -------------------------------------------------------------------------------- /src/res/start.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/res/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauron85/react-native-background-geolocation-example/eacba790b268593769068eda85ebd2d824788ee0/src/res/stop.png -------------------------------------------------------------------------------- /src/res/stop.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/scenes/AllLocations.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { StyleSheet, InteractionManager, Alert, View, FlatList } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Title, 7 | Content, 8 | Footer, 9 | FooterTab, 10 | Left, 11 | Body, 12 | Right, 13 | List, 14 | ListItem, 15 | Text, 16 | Button, 17 | Icon, 18 | Spinner 19 | } from 'native-base'; 20 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 21 | 22 | const styles = StyleSheet.create({ 23 | iconStyle: { 24 | color: '#0A69FE' 25 | } 26 | }); 27 | 28 | const LogItem = ({ 29 | id: locationId, 30 | latitude, 31 | longitude, 32 | time, 33 | }) => { 34 | const date = new Date(time); 35 | return ( 36 | 37 | {`${locationId}`} 38 | 39 | 40 | {`lat: ${latitude}`} 41 | {`lon: ${longitude}`} 42 | {`time: ${date.toLocaleDateString()} ${date.toLocaleTimeString()}`} 43 | 44 | 45 | 46 | ); 47 | }; 48 | 49 | class AllLocationsScene extends PureComponent { 50 | static navigationOptions = { 51 | title: 'All Locations', 52 | header: null, 53 | }; 54 | 55 | constructor(props) { 56 | super(props); 57 | this.state = { locations: null, selectedLocationId: -1, isReady: false }; 58 | this.refresh = this.refresh.bind(this); 59 | } 60 | 61 | componentDidMount() { 62 | InteractionManager.runAfterInteractions(() => { 63 | this.refresh(); 64 | }); 65 | } 66 | 67 | refresh() { 68 | this.setState({ selectedLocationId: -1, isReady: false }); 69 | BackgroundGeolocation.getLocations(locations => { 70 | this.setState({ locations, isReady: true }); 71 | }); 72 | } 73 | 74 | _keyExtractor = (item, index) => item.id; 75 | 76 | render() { 77 | const { locations, isReady } = this.state; 78 | return ( 79 | 80 |
81 | 82 | 85 | 86 | 87 | All Locations 88 | 89 | 90 | 93 | 94 |
95 | 96 | {(() => { 97 | if (!isReady) { 98 | return ; 99 | } 100 | return ( 101 | { 105 | const date = new Date(item.time); 106 | return ( 107 | 111 | ); 112 | }} 113 | /> 114 | ); 115 | })()} 116 | 117 |
118 | ); 119 | } 120 | } 121 | 122 | export default AllLocationsScene; 123 | -------------------------------------------------------------------------------- /src/scenes/Config.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { InteractionManager, View, Text } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Left, 7 | Right, 8 | Body, 9 | Title, 10 | Content, 11 | Button, 12 | Spinner, 13 | Icon 14 | } from 'native-base'; 15 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 16 | import Config from '../Components/Config'; 17 | import Modal from './EditConfigModal'; 18 | 19 | class ConfigScene extends PureComponent { 20 | static navigationOptions = { 21 | title: 'Configuration', 22 | header: null 23 | }; 24 | 25 | constructor(props) { 26 | super(props); 27 | this.state = { 28 | config: null, 29 | error: null, 30 | isReady: false, 31 | isEditing: false, 32 | editConfigProp: null 33 | }; 34 | this.getConfig = this.getConfig.bind(this); 35 | this.onEdit = this.onEdit.bind(this); 36 | this.onEditDone = this.onEditDone.bind(this); 37 | this.onChange = this.onChange.bind(this); 38 | this.onApplyChange = this.onApplyChange.bind(this); 39 | } 40 | 41 | componentDidMount() { 42 | InteractionManager.runAfterInteractions(() => { 43 | this.getConfig(); 44 | }); 45 | } 46 | 47 | getConfig() { 48 | const successFn = config => { 49 | this.setState({ config, error: null, isReady: true }); 50 | }; 51 | const errorFn = error => { 52 | this.setState({ config: null, error, isReady: true }); 53 | }; 54 | BackgroundGeolocation.getConfig(successFn, errorFn); 55 | } 56 | 57 | onEdit(key) { 58 | this.setState({ isEditing: true, editConfigProp: key }); 59 | } 60 | 61 | onEditDone() { 62 | const config = this.state.config; 63 | BackgroundGeolocation.configure(config, this.getConfig, this.getConfig); 64 | this.setState({ isEditing: false, editConfigProp: null }); 65 | } 66 | 67 | onChange(key, value) { 68 | console.log(key, value); 69 | const config = { ...this.state.config }; 70 | config[key] = value; 71 | this.setState({ config }); 72 | } 73 | 74 | onApplyChange(key, value) { 75 | const config = { ...this.state.config }; 76 | config[key] = value; 77 | BackgroundGeolocation.configure(config, this.getConfig, this.getConfig); 78 | this.setState({ config }); 79 | } 80 | 81 | render() { 82 | const { config, error, isReady, isEditing, editConfigProp } = this.state; 83 | return ( 84 | 85 |
86 | 87 | 90 | 91 | 92 | Configuration 93 | 94 | 95 |
96 | 97 | {(() => { 98 | if (!isReady) { 99 | return ; 100 | } 101 | return ( 102 | 107 | ); 108 | })()} 109 | 116 | 117 |
118 | ); 119 | } 120 | } 121 | 122 | export default ConfigScene; 123 | -------------------------------------------------------------------------------- /src/scenes/EditConfigModal.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { Modal, Slider as NativeSlider, View } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Left, 7 | Right, 8 | Body, 9 | Title, 10 | Content, 11 | Form, 12 | Item, 13 | Button, 14 | Icon, 15 | Picker, 16 | Text, 17 | Input 18 | } from 'native-base'; 19 | import { providers } from '../Components/Config.common'; 20 | import { activities } from '../Components/Config.ios'; 21 | import { i18n } from '../i18n'; 22 | 23 | const styles = { 24 | content: { 25 | padding: 10, 26 | backgroundColor: '#fff' 27 | } 28 | }; 29 | 30 | const configPropTypes = { 31 | desiredAccuracy: { 32 | type: 'number', 33 | units: 'meters', 34 | step: 5, 35 | minimumValue: 0, 36 | maximumValue: 100, 37 | multiplier: 1 38 | }, 39 | stationaryRadius: { 40 | type: 'number', 41 | units: 'meters', 42 | step: 1, 43 | minimumValue: 0, 44 | maximumValue: 250, 45 | multiplier: 1 46 | }, 47 | distanceFilter: { 48 | type: 'number', 49 | units: 'meters', 50 | step: 1, 51 | minimumValue: 0, 52 | maximumValue: 1000, 53 | multiplier: 1 54 | }, 55 | maxLocations: { 56 | type: 'number', 57 | step: 1, 58 | minimumValue: 0, 59 | maximumValue: 10000, 60 | multiplier: 1 61 | }, 62 | url: 'string', 63 | syncUrl: 'string', 64 | syncThreshold: { 65 | type: 'number', 66 | step: 1, 67 | minimumValue: 0, 68 | maximumValue: 10000, 69 | multiplier: 1 70 | }, 71 | // Android 72 | interval: { 73 | type: 'number', 74 | units: 'seconds', 75 | step: 1, 76 | minimumValue: 0, 77 | maximumValue: 300, 78 | multiplier: 1000 79 | }, 80 | fastestInterval: { 81 | type: 'number', 82 | units: 'seconds', 83 | step: 1, 84 | minimumValue: 0, 85 | maximumValue: 300, 86 | multiplier: 1000 87 | }, 88 | activitiesInterval: { 89 | type: 'number', 90 | units: 'seconds', 91 | step: 1, 92 | minimumValue: 0, 93 | maximumValue: 300, 94 | multiplier: 1000 95 | }, 96 | locationProvider: { 97 | type: 'enum', 98 | items: providers, 99 | formatter: (val) => Number(val) 100 | }, 101 | notificationTitle: 'string', 102 | notificationText: 'string', 103 | notificationIconColor: 'string', 104 | // iOS 105 | activityType: { 106 | type: 'enum', 107 | items: activities 108 | } 109 | }; 110 | 111 | class Slider extends PureComponent { 112 | constructor(props) { 113 | super(props); 114 | this.state = { value: props.value }; 115 | } 116 | 117 | componentWillReceiveProps(props) { 118 | if (!this.state.value) { 119 | this.setState({ value: props.value }); 120 | } 121 | } 122 | 123 | render() { 124 | return ( 125 | 129 | ); 130 | } 131 | } 132 | 133 | export default class ModalExample extends PureComponent { 134 | constructor(props) { 135 | super(props); 136 | this.state = { value: props.configValue }; 137 | this.onChange = this.onChange.bind(this); 138 | } 139 | 140 | componentWillMount() { 141 | this.setState({ value: this.props.configValue }); 142 | } 143 | 144 | componentWillReceiveProps(props) { 145 | this.setState({ value: props.configValue }); 146 | } 147 | 148 | onChange(value) { 149 | this.setState({ value }); 150 | } 151 | 152 | render() { 153 | const { visible, configProp, configValue, onClose } = this.props; 154 | const { value } = this.state; 155 | 156 | return ( 157 | {}} 162 | > 163 | 164 |
165 | 166 | 169 | 170 | 171 | Edit value 172 | 173 | 174 |
175 | 176 | {i18n[configProp]} 177 | {(() => { 178 | const configPropType = configPropTypes[configProp] || {}; 179 | const type = configPropType.type || configPropType; 180 | switch (type) { 181 | case 'number': 182 | const { multiplier, units = '' } = configPropType; 183 | return ( 184 | 185 | 186 | {value / multiplier} {units} 187 | 188 | 192 | this.props.onChange(configProp, val * multiplier)} 193 | onValueChange={val => this.onChange(val * multiplier)} 194 | /> 195 | 196 | ); 197 | case 'enum': 198 | const formatter = configPropType.formatter; 199 | return ( 200 | 205 | this.props.onChange(configProp, formatter ? formatter(val) : val)} 206 | > 207 | {configPropType.items.map(({ label, value }) => ( 208 | 209 | ))} 210 | 211 | ); 212 | default: 213 | return ( 214 | 215 | this.props.onChange(configProp, val)} 218 | /> 219 | 220 | ); 221 | } 222 | })()} 223 | 224 |
225 |
226 | ); 227 | } 228 | } 229 | -------------------------------------------------------------------------------- /src/scenes/Logs.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { InteractionManager, FlatList } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Right, 7 | Left, 8 | Content, 9 | Body, 10 | Title, 11 | List, 12 | ListItem, 13 | Text, 14 | Button, 15 | Icon, 16 | Spinner 17 | } from 'native-base'; 18 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 19 | 20 | const STYLES = Object(); 21 | STYLES['ERROR'] = { backgroundColor:'white',color:'red' }; 22 | STYLES['WARN'] = { backgroundColor:'black',color:'yellow' }; 23 | STYLES['INFO'] = { backgroundColor:'white',color:'blue' }; 24 | STYLES['TRACE'] = { backgroundColor:'white',color:'black' }; 25 | STYLES['DEBUG'] = { backgroundColor:'white',color:'black' }; 26 | 27 | function padLeft(nr, n, str) { 28 | return Array(n - String(nr).length + 1).join(str || '0') + nr; 29 | } 30 | 31 | function formatLogEntry(logEntry) { 32 | const d = new Date(Number(logEntry.timestamp)); 33 | const dateStr = [d.getFullYear(), padLeft(d.getMonth()+1,2), padLeft(d.getDate(),2)].join('/'); 34 | const timeStr = [padLeft(d.getHours(),2), padLeft(d.getMinutes(),2), padLeft(d.getSeconds(),2)].join(':'); 35 | return { 36 | eventId: logEntry.id || logEntry.timestamp, 37 | style: STYLES[logEntry.level], 38 | text: ['[', dateStr, ' ', timeStr, ']\t', logEntry.message, logEntry.stackTrace ? logEntry.stackTrace : ''].join('') 39 | }; 40 | } 41 | 42 | class LogsScene extends PureComponent { 43 | static navigationOptions = { 44 | title: 'Logs', 45 | header: null 46 | }; 47 | 48 | constructor(props) { 49 | super(props); 50 | this.state = { 51 | isRefreshing: false, 52 | logEntries: [], 53 | }; 54 | this.rowLimit = 100; 55 | this.lastEventId = 0; // intentionally not set in state as it's asynchronnous 56 | this.refresh = this.refresh.bind(this); 57 | } 58 | 59 | componentDidMount() { 60 | InteractionManager.runAfterInteractions(() => { 61 | this.refresh(); 62 | }); 63 | } 64 | 65 | refresh() { 66 | this.fetchLogs(0); 67 | } 68 | 69 | fetchLogs(lastEventId) { 70 | if (lastEventId < 0) { 71 | return; 72 | } 73 | if (lastEventId == 0) { 74 | this.setState({ isRefreshing: true, logEntries: [] }); 75 | } 76 | BackgroundGeolocation.getLogEntries(this.rowLimit, lastEventId, 'DEBUG', newLogEntries => { 77 | const { logEntries } = this.state 78 | const lastEventId = newLogEntries.length > 0 ? newLogEntries[newLogEntries.length - 1].id : -1; 79 | this.lastEventId = lastEventId; 80 | this.setState({ 81 | isRefreshing: false, 82 | logEntries: logEntries.concat(newLogEntries), 83 | }); 84 | }); 85 | } 86 | 87 | _keyExtractor = (item, index) => item.id; 88 | 89 | _renderItem = ({ item }) => { 90 | const entry = formatLogEntry(item); 91 | return ( 92 | 98 | 103 | {`${entry.eventId}:${entry.text}`} 104 | 105 | 106 | ); 107 | }; 108 | 109 | _onEndReached = () => { 110 | this.fetchLogs(this.lastEventId); 111 | }; 112 | 113 | renderContent(logEntries) { 114 | return ( 115 | 122 | ); 123 | } 124 | 125 | render() { 126 | const { logEntries, isRefreshing } = this.state; 127 | return ( 128 | 129 |
130 | 131 | 134 | 135 | 136 | Logs 137 | 138 | 139 | 142 | 143 |
144 | 145 | {(() => { 146 | if (isRefreshing) { 147 | return ; 148 | } 149 | return this.renderContent(logEntries); 150 | })()} 151 | 152 |
153 | ); 154 | } 155 | } 156 | 157 | export default LogsScene; 158 | -------------------------------------------------------------------------------- /src/scenes/Main.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import React, { PureComponent } from 'react'; 4 | import { StyleSheet, View, Alert, Dimensions } from 'react-native'; 5 | import { 6 | Container, 7 | Header, 8 | Title, 9 | Content, 10 | Footer, 11 | FooterTab, 12 | Button, 13 | Icon 14 | } from 'native-base'; 15 | import MapView from 'react-native-maps'; 16 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 17 | import TrackingDot from '../res/TrackingDot.png'; 18 | 19 | const styles = StyleSheet.create({ 20 | container: { 21 | flex: 1 22 | }, 23 | footer: { 24 | backgroundColor: '#0C68FB', 25 | }, 26 | icon: { 27 | color: '#fff', 28 | fontSize: 30 29 | } 30 | }); 31 | 32 | class MainScene extends PureComponent { 33 | static navigationOptions = { 34 | header: null 35 | } 36 | 37 | constructor(props) { 38 | super(props); 39 | this.state = { 40 | region: null, 41 | locations: [], 42 | stationaries: [], 43 | isRunning: false 44 | }; 45 | 46 | this.goToSettings = this.goToSettings.bind(this); 47 | } 48 | 49 | componentDidMount() { 50 | console.log('map did mount'); 51 | 52 | function logError(msg) { 53 | console.log(`[ERROR] getLocations: ${msg}`); 54 | } 55 | 56 | const handleHistoricLocations = locations => { 57 | let region = null; 58 | const now = Date.now(); 59 | const latitudeDelta = 0.01; 60 | const longitudeDelta = 0.01; 61 | const durationOfDayInMillis = 24 * 3600 * 1000; 62 | 63 | const locationsPast24Hours = locations.filter(location => { 64 | return now - location.time <= durationOfDayInMillis; 65 | }); 66 | 67 | if (locationsPast24Hours.length > 0) { 68 | // asume locations are already sorted 69 | const lastLocation = 70 | locationsPast24Hours[locationsPast24Hours.length - 1]; 71 | region = Object.assign({}, lastLocation, { 72 | latitudeDelta, 73 | longitudeDelta 74 | }); 75 | } 76 | this.setState({ locations: locationsPast24Hours, region }); 77 | }; 78 | 79 | // BackgroundGeolocation.getValidLocations( 80 | // handleHistoricLocations.bind(this), 81 | // logError 82 | // ); 83 | 84 | BackgroundGeolocation.getCurrentLocation(lastLocation => { 85 | let region = this.state.region; 86 | const latitudeDelta = 0.01; 87 | const longitudeDelta = 0.01; 88 | region = Object.assign({}, lastLocation, { 89 | latitudeDelta, 90 | longitudeDelta 91 | }); 92 | this.setState({ locations: [lastLocation], region }); 93 | }, (error) => { 94 | setTimeout(() => { 95 | Alert.alert('Error obtaining current location', JSON.stringify(error)); 96 | }, 100); 97 | }); 98 | 99 | BackgroundGeolocation.on('start', () => { 100 | // service started successfully 101 | // you should adjust your app UI for example change switch element to indicate 102 | // that service is running 103 | console.log('[DEBUG] BackgroundGeolocation has been started'); 104 | this.setState({ isRunning: true }); 105 | }); 106 | 107 | BackgroundGeolocation.on('stop', () => { 108 | console.log('[DEBUG] BackgroundGeolocation has been stopped'); 109 | this.setState({ isRunning: false }); 110 | }); 111 | 112 | BackgroundGeolocation.on('authorization', status => { 113 | console.log( 114 | '[INFO] BackgroundGeolocation authorization status: ' + status 115 | ); 116 | if (status !== BackgroundGeolocation.AUTHORIZED) { 117 | // we need to set delay after permission prompt or otherwise alert will not be shown 118 | setTimeout(() => 119 | Alert.alert( 120 | 'App requires location tracking', 121 | 'Would you like to open app settings?', 122 | [ 123 | { 124 | text: 'Yes', 125 | onPress: () => BackgroundGeolocation.showAppSettings() 126 | }, 127 | { 128 | text: 'No', 129 | onPress: () => console.log('No Pressed'), 130 | style: 'cancel' 131 | } 132 | ] 133 | ), 1000); 134 | } 135 | }); 136 | 137 | BackgroundGeolocation.on('error', ({ message }) => { 138 | Alert.alert('BackgroundGeolocation error', message); 139 | }); 140 | 141 | BackgroundGeolocation.on('location', location => { 142 | console.log('[DEBUG] BackgroundGeolocation location', location); 143 | BackgroundGeolocation.startTask(taskKey => { 144 | requestAnimationFrame(() => { 145 | const longitudeDelta = 0.01; 146 | const latitudeDelta = 0.01; 147 | const region = Object.assign({}, location, { 148 | latitudeDelta, 149 | longitudeDelta 150 | }); 151 | const locations = this.state.locations.slice(0); 152 | locations.push(location); 153 | this.setState({ locations, region }); 154 | BackgroundGeolocation.endTask(taskKey); 155 | }); 156 | }); 157 | }); 158 | 159 | BackgroundGeolocation.on('stationary', (location) => { 160 | console.log('[DEBUG] BackgroundGeolocation stationary', location); 161 | BackgroundGeolocation.startTask(taskKey => { 162 | requestAnimationFrame(() => { 163 | const stationaries = this.state.stationaries.slice(0); 164 | if (location.radius) { 165 | const longitudeDelta = 0.01; 166 | const latitudeDelta = 0.01; 167 | const region = Object.assign({}, location, { 168 | latitudeDelta, 169 | longitudeDelta 170 | }); 171 | const stationaries = this.state.stationaries.slice(0); 172 | stationaries.push(location); 173 | this.setState({ stationaries, region }); 174 | } 175 | BackgroundGeolocation.endTask(taskKey); 176 | }); 177 | }); 178 | }); 179 | 180 | BackgroundGeolocation.on('foreground', () => { 181 | console.log('[INFO] App is in foreground'); 182 | }); 183 | 184 | BackgroundGeolocation.on('background', () => { 185 | console.log('[INFO] App is in background'); 186 | }); 187 | 188 | BackgroundGeolocation.checkStatus(({ isRunning }) => { 189 | this.setState({ isRunning }); 190 | if (isRunning) { 191 | BackgroundGeolocation.start(); 192 | } 193 | }); 194 | } 195 | 196 | componentWillUnmount() { 197 | BackgroundGeolocation.events.forEach(event => 198 | BackgroundGeolocation.removeAllListeners(event) 199 | ); 200 | } 201 | 202 | goToSettings() { 203 | this.props.navigation.navigate('Menu'); 204 | } 205 | 206 | toggleTracking() { 207 | BackgroundGeolocation.checkStatus(({ isRunning, locationServicesEnabled, authorization }) => { 208 | if (isRunning) { 209 | BackgroundGeolocation.stop(); 210 | return false; 211 | } 212 | 213 | if (!locationServicesEnabled) { 214 | Alert.alert( 215 | 'Location services disabled', 216 | 'Would you like to open location settings?', 217 | [ 218 | { 219 | text: 'Yes', 220 | onPress: () => BackgroundGeolocation.showLocationSettings() 221 | }, 222 | { 223 | text: 'No', 224 | onPress: () => console.log('No Pressed'), 225 | style: 'cancel' 226 | } 227 | ] 228 | ); 229 | return false; 230 | } 231 | 232 | if (authorization == 99) { 233 | // authorization yet to be determined 234 | BackgroundGeolocation.start(); 235 | } else if (authorization == BackgroundGeolocation.AUTHORIZED) { 236 | // calling start will also ask user for permission if needed 237 | // permission error will be handled in permisision_denied event 238 | BackgroundGeolocation.start(); 239 | } else { 240 | Alert.alert( 241 | 'App requires location tracking', 242 | 'Please grant permission', 243 | [ 244 | { 245 | text: 'Ok', 246 | onPress: () => BackgroundGeolocation.start() 247 | } 248 | ] 249 | ); 250 | } 251 | }); 252 | } 253 | 254 | render() { 255 | const { height, width } = Dimensions.get('window'); 256 | const { locations, stationaries, region, isRunning } = this.state; 257 | return ( 258 | 259 | 260 | 261 | {locations.map((location, idx) => ( 262 | 267 | ))} 268 | {stationaries.map((stationary, idx) => { 269 | return ( 270 | 276 | ); 277 | })} 278 | 279 | 280 |
281 | 282 | 285 | 288 | 289 |
290 |
291 | ); 292 | } 293 | } 294 | 295 | export default MainScene; 296 | -------------------------------------------------------------------------------- /src/scenes/Menu.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { StyleSheet } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Title, 7 | Content, 8 | Left, 9 | Right, 10 | Body, 11 | Button, 12 | Icon, 13 | List, 14 | ListItem, 15 | Text 16 | } from 'native-base'; 17 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 18 | 19 | const styles = StyleSheet.create({ 20 | iconStyle: { 21 | color: '#0A69FE' 22 | } 23 | }); 24 | 25 | class SettingsScene extends PureComponent { 26 | static navigationOptions = { 27 | title: 'Menu', 28 | header: null 29 | }; 30 | 31 | navigate(scene) { 32 | this.props.navigation.navigate(scene); 33 | } 34 | 35 | render() { 36 | return ( 37 | 38 |
39 | 40 | 43 | 44 | 45 | Menu 46 | 47 | 48 |
49 | 50 | 51 | this.navigate('Logs')}> 52 | 53 | 54 | 55 | 56 | Plugin Logs 57 | 58 | 59 | this.navigate('AllLocations')}> 60 | 61 | 62 | 63 | 64 | All Locations 65 | 66 | 67 | this.navigate('PendingLocations')}> 68 | 69 | 70 | 71 | 72 | Pending Locations 73 | 74 | 75 | this.navigate('Config')}> 76 | 77 | 78 | 79 | 80 | Plugin Configuration 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | Show App Settings 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | Show Location Settings 97 | 98 | 99 | 100 | 101 |
102 | ); 103 | } 104 | } 105 | 106 | export default SettingsScene; 107 | -------------------------------------------------------------------------------- /src/scenes/PendingLocations.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { StyleSheet, InteractionManager, Alert, View, FlatList } from 'react-native'; 3 | import { 4 | Container, 5 | Header, 6 | Title, 7 | Content, 8 | Footer, 9 | FooterTab, 10 | Left, 11 | Body, 12 | Right, 13 | List, 14 | ListItem, 15 | Text, 16 | Button, 17 | Icon, 18 | Spinner 19 | } from 'native-base'; 20 | import BackgroundGeolocation from '@mauron85/react-native-background-geolocation'; 21 | 22 | const styles = StyleSheet.create({ 23 | iconStyle: { 24 | color: '#0A69FE' 25 | } 26 | }); 27 | 28 | const LogItem = ({ 29 | id: locationId, 30 | selected, 31 | latitude, 32 | longitude, 33 | time, 34 | onPress 35 | }) => { 36 | const date = new Date(time); 37 | return ( 38 | onPress(locationId)}> 39 | {`${locationId}`} 40 | 41 | 42 | {`lat: ${latitude}`} 43 | {`lon: ${longitude}`} 44 | {`time: ${date.toLocaleDateString()} ${date.toLocaleTimeString()}`} 45 | 46 | 47 | 48 | 52 | 53 | 54 | ); 55 | }; 56 | 57 | class PendingLocationsScene extends PureComponent { 58 | static navigationOptions = { 59 | title: 'Pending Locations', 60 | header: null, 61 | }; 62 | 63 | constructor(props) { 64 | super(props); 65 | this.state = { locations: null, selectedLocationId: -1, isReady: false }; 66 | this.onLocationSelected = this.onLocationSelected.bind(this); 67 | this.onDelete = this.onDelete.bind(this); 68 | this.refresh = this.refresh.bind(this); 69 | this.forceSync = this.forceSync.bind(this); 70 | } 71 | 72 | componentDidMount() { 73 | InteractionManager.runAfterInteractions(() => { 74 | this.refresh(); 75 | }); 76 | } 77 | 78 | componentWillUnmount() { 79 | clearTimeout(this.syncTimeout); 80 | } 81 | 82 | refresh() { 83 | this.setState({ selectedLocationId: -1, isReady: false }); 84 | BackgroundGeolocation.getValidLocations(locations => { 85 | this.setState({ locations, isReady: true }); 86 | }); 87 | } 88 | 89 | forceSync() { 90 | if (!this.syncTimeout) { 91 | BackgroundGeolocation.forceSync(); 92 | this.syncTimeout = setTimeout(() => { 93 | this.refresh(); 94 | this.syncTimeout = null; 95 | }, 5000); 96 | } 97 | } 98 | 99 | onLocationSelected(locationId) { 100 | const selectedLocationId = 101 | locationId !== this.state.selectedLocationId ? locationId : -1; 102 | this.setState({ selectedLocationId }); 103 | } 104 | 105 | onDelete() { 106 | const { selectedLocationId } = this.state; 107 | if (selectedLocationId > -1) { 108 | BackgroundGeolocation.deleteLocation(selectedLocationId, this.refresh); 109 | } else { 110 | Alert.alert( 111 | 'Confirm action', 112 | 'Do you really want to delete all location?', 113 | [ 114 | { 115 | text: 'Yes', 116 | onPress: () => 117 | BackgroundGeolocation.deleteAllLocations(this.refresh) 118 | }, 119 | { 120 | text: 'No', 121 | onPress: () => console.log('No Pressed'), 122 | style: 'cancel' 123 | } 124 | ] 125 | ); 126 | } 127 | } 128 | 129 | _keyExtractor = (item, index) => item.id; 130 | 131 | render() { 132 | const { selectedLocationId, locations, isReady } = this.state; 133 | return ( 134 | 135 |
136 | 137 | 140 | 141 | 142 | Pending Locations 143 | 144 | 145 | 148 | 149 |
150 | 151 | {(() => { 152 | if (!isReady) { 153 | return ; 154 | } 155 | return ( 156 | { 160 | const date = new Date(item.time); 161 | const selected = selectedLocationId === item.id; 162 | return ( 163 | 168 | ); 169 | }} 170 | /> 171 | ); 172 | })()} 173 | 174 | 188 |
189 | ); 190 | } 191 | } 192 | 193 | export default PendingLocationsScene; 194 | --------------------------------------------------------------------------------