Resolve "64-bit apk for play store"

This commit is contained in:
Bart Akeley 2019-09-21 15:45:07 +00:00
parent 4573e28684
commit 90b1d381ab
67 changed files with 3187 additions and 2266 deletions

View file

@ -1,3 +0,0 @@
{
"presets": ["module:metro-react-native-babel-preset"]
}

View file

@ -24,7 +24,6 @@
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow/
node_modules/react-native/flow-github/
[options]
emoji=true
@ -67,4 +66,4 @@ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
[version]
^0.78.0
^0.92.0

1
.gitignore vendored
View file

@ -57,3 +57,4 @@ buck-out/
# Bundle artifact
*.jsbundle
ios/Pods/*
android/app/src/main/assets/index.android.bundle

11
App-test.js Normal file
View file

@ -0,0 +1,11 @@
/**
* @format
*/
import 'react-native';
import React from 'react';
import App from '../App';
// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';
it('renders correctly', () => {
renderer.create(<App />);
});

View file

@ -8,23 +8,13 @@
# - `buck install -r android/app` - compile, install and run application
#
load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
lib_deps = []
for jarfile in glob(['libs/*.jar']):
name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
lib_deps.append(':' + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)
create_aar_targets(glob(["libs/*.aar"]))
for aarfile in glob(['libs/*.aar']):
name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
lib_deps.append(':' + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
create_jar_targets(glob(["libs/*.jar"]))
android_library(
name = "all-libs",

View file

@ -1,6 +1,4 @@
apply plugin: "com.android.application"
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"
apply plugin: "io.fabric"
import com.android.build.OutputFile
@ -20,6 +18,9 @@ import com.android.build.OutputFile
* // the entry file for bundle generation
* entryFile: "index.android.js",
*
* // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
* bundleCommand: "ram-bundle",
*
* // whether to bundle JS and assets in debug mode
* bundleInDebug: false,
*
@ -35,6 +36,13 @@ import com.android.build.OutputFile
* // bundleInPaidRelease: true,
* // bundleInBeta: true,
*
* // whether to disable dev mode in custom build variants (by default only disabled in release)
* // for example: to disable dev mode in the staging build type (if configured)
* devDisabledInStaging: true,
* // The configuration property can be in the following formats
* // 'devDisabledIn${productFlavor}${buildType}'
* // 'devDisabledIn${buildType}'
*
* // the root of your project, i.e. where "package.json" lives
* root: "../../",
*
@ -60,13 +68,18 @@ import com.android.build.OutputFile
* inputExcludes: ["android/**", "ios/**"],
*
* // override which node gets called and with what additional arguments
* nodeExecutableAndArgs: ["node"]
* nodeExecutableAndArgs: ["node"],
*
* // supply additional arguments to the packager
* extraPackagerArgs: []
* ]
*/
project.ext.react = [
entryFile: "index.js",
enableHermes: false, // clean and rebuild if changing
]
apply from: "../../node_modules/react-native/react.gradle"
/**
@ -77,36 +90,65 @@ apply from: "../../node_modules/react-native/react.gradle"
* Upload all the APKs to the Play Store and people will download
* the correct one based on the CPU architecture of their device.
*/
def enableSeparateBuildPerCPUArchitecture = true
def enableSeparateBuildPerCPUArchitecture = false
/**
* Run Proguard to shrink the Java bytecode in release builds.
*/
def enableProguardInReleaseBuilds = false
/**
* The preferred build flavor of JavaScriptCore.
*
* For example, to use the international variant, you can use:
* `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
*
* The international variant includes ICU i18n library and necessary data
* allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
* give correct results when using with locales other than en-US. Note that
* this variant is about 6MiB larger per architecture than default.
*/
def jscFlavor = 'org.webkit:android-jsc:+'
/**
* Whether to enable the Hermes VM.
*
* This should be set on project.ext.react and mirrored here. If it is not set
* on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
* and the benefits of using Hermes will therefore be sharply reduced.
*/
def enableHermes = project.ext.react.get("enableHermes", false);
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.aretherecookies"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 61
versionCode 101
versionName "1.0"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
// include "armeabi-v7a", "x86"
include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
@ -115,56 +157,51 @@ android {
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.release
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a":1, "x86":2]
// https://developer.android.com/studio/build/configure-apk-splits.html
def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
packagingOptions {
pickFirst '**/armeabi-v7a/libc++_shared.so'
pickFirst '**/x86/libc++_shared.so'
pickFirst '**/arm64-v8a/libc++_shared.so'
pickFirst '**/x86_64/libc++_shared.so'
pickFirst '**/x86/libjsc.so'
pickFirst '**/armeabi-v7a/libjsc.so'
}
}
dependencies {
api project(':react-native-google-places')
api project(':react-native-snackbar')
api project(':react-native-google-places')
api project(':react-native-auth0')
api project(':react-native-maps')
api project(':react-native-vector-icons')
api project(':react-native-image-picker')
// implementation 'com.google.firebase:firebase-core:16.0.1'
// implementation('com.crashlytics.sdk.android:crashlytics:2.9.5@aar') {
// transitive = true
// }
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
// implementation "com.android.support:appcompat-v7:26.0.0"
implementation "com.android.support:design:${rootProject.ext.supportLibVersion}"
implementation "com.facebook.react:react-native:+" // From node_modules
if (enableHermes) {
def hermesPath = "../../node_modules/hermesvm/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
} else {
implementation jscFlavor
}
}
// Run this once to be able to run the application with BUCK
@ -173,3 +210,5 @@ task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

View file

@ -0,0 +1,19 @@
"""Helper definitions to glob .aar and .jar targets"""
def create_aar_targets(aarfiles):
for aarfile in aarfiles:
name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
lib_deps.append(":" + name)
android_prebuilt_aar(
name = name,
aar = aarfile,
)
def create_jar_targets(jarfiles):
for jarfile in jarfiles:
name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
lib_deps.append(":" + name)
prebuilt_jar(
name = name,
binary_jar = jarfile,
)

View file

@ -8,10 +8,3 @@
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>

View file

@ -5,64 +5,29 @@
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> -->
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<meta-data
android:name="io.fabric.ApiKey"
android:value="d0a6755e645f5a118014ae56f140d916d6d8d0e8"
/>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="aretherecookies.auth0.com"
android:pathPrefix="/android/${applicationId}/callback"
android:scheme="${applicationId}" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
<!-- <activity tools:replace="android:theme"
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"/> -->
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- <data android:scheme="@string/fb_login_protocol_scheme" /> -->
</intent-filter>
</activity>
</application>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="AIzaSyBfMm1y6JayCbXrQmgAG1R3ka4ZOJno_5E"/>
<!-- <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/fb_app_id"/> -->
</application>
</manifest>

View file

@ -10,6 +10,6 @@ public class MainActivity extends ReactActivity {
*/
@Override
protected String getMainComponentName() {
return "AreThereCookies";
return "aretherecookies";
}
}

View file

@ -1,20 +1,16 @@
package com.aretherecookies;
import android.app.Application;
import android.util.Log;
import com.facebook.react.PackageList;
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
import com.facebook.react.bridge.JavaScriptExecutorFactory;
import com.facebook.react.ReactApplication;
import com.oblador.vectoricons.VectorIconsPackage;
import com.azendoo.reactnativesnackbar.SnackbarPackage;
import com.airbnb.android.react.maps.MapsPackage;
import com.imagepicker.ImagePickerPackage;
import com.arttitude360.reactnative.rngoogleplaces.RNGooglePlacesPackage;
import com.auth0.react.A0Auth0Package;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import java.util.Arrays;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
@ -27,14 +23,16 @@ public class MainApplication extends Application implements ReactApplication {
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new RNGooglePlacesPackage(),
new SnackbarPackage(),
new A0Auth0Package(),
new MapsPackage(),
new ImagePickerPackage()
);
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// packages.add(new MyReactNativePackage());
return packages;
}
@Override
protected String getJSMainModuleName() {
return "index";
}
};

View file

@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

0
android/app/src/main/res/mipmap-hdpi/ic_launcher.png Executable file → Normal file
View file

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

0
android/app/src/main/res/mipmap-mdpi/ic_launcher.png Executable file → Normal file
View file

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

0
android/app/src/main/res/mipmap-xhdpi/ic_launcher.png Executable file → Normal file
View file

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

0
android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png Executable file → Normal file
View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View file

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

View file

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
<color name="colorPrimary">#6d5354</color>
<color name="colorPrimaryDark">#412A2B</color>
<color name="colorAccent">#0E6E9E</color>
</resources>

2
android/app/src/main/res/values/strings.xml Executable file → Normal file
View file

@ -1,3 +1,3 @@
<resources>
<string name="app_name">My Application</string>
<string name="app_name">Aretherecookies?</string>
</resources>

6
android/app/src/main/res/values/styles.xml Executable file → Normal file
View file

@ -1,11 +1,9 @@
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textColor">#000000</item>
</style>
</resources>

View file

@ -3,36 +3,36 @@
buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 23
compileSdkVersion = 27
targetSdkVersion = 27
supportLibVersion = "27.1.1"
googlePlayServicesVersion = "15.0.1"
androidMapsUtilsVersion = "0.5+"
minSdkVersion = 16
compileSdkVersion = 28
targetSdkVersion = 28
supportLibVersion = "28.0.0"
}
repositories {
google()
mavenLocal()
jcenter()
maven {
url 'https://maven.fabric.io/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'com.google.gms:google-services:4.0.1'
classpath 'io.fabric.tools:gradle:1.25.4'
classpath("com.android.tools.build:gradle:3.4.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
url("$rootDir/../node_modules/react-native/android")
}
maven {
// Android JSC is installed from npm
url("$rootDir/../node_modules/jsc-android/dist")
}
google()
jcenter()
}
}

Binary file not shown.

View file

@ -12,15 +12,15 @@
# Default value: -Xmx10248m -XX:MaxPermSize=256m
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
MYAPP_RELEASE_STORE_FILE=atc-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=atc-key-alias
MYAPP_RELEASE_STORE_PASSWORD=bigjohncookies
MYAPP_RELEASE_KEY_PASSWORD=bigjohncookies
# android.useDeprecatedNdk=true
# org.gradle.configureondemand=true
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
android.useAndroidX=true
android.enableJetifier=true

Binary file not shown.

View file

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

Binary file not shown.

View file

@ -1,6 +1,5 @@
#Sat Jul 06 09:44:44 CDT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

18
android/gradlew vendored
View file

@ -1,5 +1,21 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
@ -28,7 +44,7 @@ APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

18
android/gradlew.bat vendored
View file

@ -1,3 +1,19 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

View file

@ -1,17 +1,3 @@
rootProject.name = 'AreThereCookies'
include ':react-native-google-places'
project(':react-native-google-places').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-places/android')
include ':react-native-snackbar'
project(':react-native-snackbar').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-snackbar/android')
include ':react-native-google-places'
project(':react-native-google-places').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-google-places/android')
include ':react-native-auth0'
project(':react-native-auth0').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-auth0/android')
include ':react-native-maps'
project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')
include ':react-native-vector-icons'
project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android')
include ':react-native-image-picker'
project(':react-native-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-picker/android')
rootProject.name = 'aretherecookies'
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'

View file

@ -1,4 +1,4 @@
{
"name": "aretherecookies",
"displayName": "aretherecookies"
"displayName": "Aretherecookies?"
}

3
babel.config.js Normal file
View file

@ -0,0 +1,3 @@
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
};

View file

@ -1,12 +0,0 @@
/**
* Sample React Native App
* https://github.com/facebook/react-native
* @flow
*/
import { AppRegistry, UIManager } from 'react-native';
import App from './js/App';
UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);
AppRegistry.registerComponent('AreThereCookies', () => App);

View file

@ -1,7 +0,0 @@
import React, { Component } from 'react';
import { AppRegistry, UIManager, Text, View } from 'react-native';
import App from './js/App';
UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);
AppRegistry.registerComponent('AreThereCookies', () => App);

9
index.js Normal file
View file

@ -0,0 +1,9 @@
/**
* @format
*/
import {AppRegistry} from 'react-native';
import {name as appName} from './app.json';
import App from './js/App';
AppRegistry.registerComponent(appName, () => App);

View file

@ -3,18 +3,63 @@
source 'https://github.com/CocoaPods/Specs.git'
# target 'AreThereCookies' do
# # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# # use_frameworks!
# # Pods for AreThereCookies
# pod 'GooglePlaces', '~> 3.0'
# pod 'GoogleMaps', '~> 3.0'
# pod 'GooglePlacePicker', '~> 3.0'
# target 'AreThereCookiesTests' do
# inherit! :search_paths
# # Pods for testing
# end
# end
target 'AreThereCookies' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for AreThereCookies
pod 'GooglePlaces', '~> 2.7'
pod 'GoogleMaps', '~> 2.7'
pod 'GooglePlacePicker', '~> 2.7'
# Pods for _YOUR_PROJECT_TARGET_
pod 'React', :path => '../node_modules/react-native', :subspecs => [
'Core',
'CxxBridge',
'DevSupport',
'RCTText',
'RCTImage',
'RCTNetwork',
'RCTWebSocket',
'RCTSettings',
'RCTAnimation',
'RCTLinkingIOS',
# Add any other subspecs you want to use in your project
# Remove any subspecs you don't want to use in your project
]
target 'AreThereCookiesTests' do
inherit! :search_paths
# Pods for testing
end
pod "yoga", :path => "../node_modules/react-native/ReactCommon/yoga"
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
# This should already be auto-added for you, if not add the line below
pod 'react-native-google-places', :path => '../node_modules/react-native-google-places'
end
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == 'react-native-google-places'
target.build_configurations.each do |config|
config.build_settings['CLANG_ENABLE_MODULES'] = 'No'
end
end
if target.name == "React"
target.remove_from_project
end
end
end

View file

@ -1,31 +1,121 @@
PODS:
- GoogleMaps (2.7.0):
- GoogleMaps/Maps (= 2.7.0)
- GoogleMaps/Base (2.7.0)
- GoogleMaps/Maps (2.7.0):
- boost-for-react-native (1.63.0)
- DoubleConversion (1.1.6)
- Folly (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
- glog
- glog (0.3.5)
- GoogleMaps (3.1.0):
- GoogleMaps/Maps (= 3.1.0)
- GoogleMaps/Base (3.1.0)
- GoogleMaps/Maps (3.1.0):
- GoogleMaps/Base
- GooglePlacePicker (2.7.0):
- GoogleMaps (= 2.7.0)
- GooglePlaces (= 2.7.0)
- GooglePlaces (2.7.0):
- GoogleMaps/Base (= 2.7.0)
- GooglePlaces (3.1.0):
- GoogleMaps/Base (= 3.1.0)
- React (0.59.10):
- React/Core (= 0.59.10)
- react-native-google-places (3.1.1):
- GoogleMaps (~> 3.1.0)
- GooglePlaces (~> 3.1.0)
- React
- React/Core (0.59.10):
- yoga (= 0.59.10.React)
- React/CxxBridge (0.59.10):
- Folly (= 2018.10.22.00)
- React/Core
- React/cxxreact
- React/jsiexecutor
- React/cxxreact (0.59.10):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React/jsinspector
- React/DevSupport (0.59.10):
- React/Core
- React/RCTWebSocket
- React/fishhook (0.59.10)
- React/jsi (0.59.10):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React/jsiexecutor (0.59.10):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React/cxxreact
- React/jsi
- React/jsinspector (0.59.10)
- React/RCTAnimation (0.59.10):
- React/Core
- React/RCTBlob (0.59.10):
- React/Core
- React/RCTImage (0.59.10):
- React/Core
- React/RCTNetwork
- React/RCTLinkingIOS (0.59.10):
- React/Core
- React/RCTNetwork (0.59.10):
- React/Core
- React/RCTSettings (0.59.10):
- React/Core
- React/RCTText (0.59.10):
- React/Core
- React/RCTWebSocket (0.59.10):
- React/Core
- React/fishhook
- React/RCTBlob
- yoga (0.59.10.React)
DEPENDENCIES:
- GoogleMaps (~> 2.7)
- GooglePlacePicker (~> 2.7)
- GooglePlaces (~> 2.7)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- react-native-google-places (from `../node_modules/react-native-google-places`)
- React/Core (from `../node_modules/react-native`)
- React/CxxBridge (from `../node_modules/react-native`)
- React/DevSupport (from `../node_modules/react-native`)
- React/RCTAnimation (from `../node_modules/react-native`)
- React/RCTImage (from `../node_modules/react-native`)
- React/RCTLinkingIOS (from `../node_modules/react-native`)
- React/RCTNetwork (from `../node_modules/react-native`)
- React/RCTSettings (from `../node_modules/react-native`)
- React/RCTText (from `../node_modules/react-native`)
- React/RCTWebSocket (from `../node_modules/react-native`)
- yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- boost-for-react-native
- GoogleMaps
- GooglePlacePicker
- GooglePlaces
SPEC CHECKSUMS:
GoogleMaps: f79af95cb24d869457b1f961c93d3ce8b2f3b848
GooglePlacePicker: 59ea44db173c58486ad6123993e81feefcbce9c3
GooglePlaces: 3d06e6c99654545b4738ce49648745779c25f2ef
EXTERNAL SOURCES:
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
Folly:
:podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
React:
:path: "../node_modules/react-native"
react-native-google-places:
:path: "../node_modules/react-native-google-places"
yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
PODFILE CHECKSUM: cfd1de49b9cdf4af5bee4d0d1efbe8acf784251b
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
DoubleConversion: bb338842f62ab1d708ceb63ec3d999f0f3d98ecd
Folly: de497beb10f102453a1afa9edbf8cf8a251890de
glog: aefd1eb5dda2ab95ba0938556f34b98e2da3a60d
GoogleMaps: 5c13302e6fe6bb6e686b267196586b91cd594225
GooglePlaces: e874db179f2675c4f3eeda0b686b540273a578b0
React: 36d0768f9e93be2473b37e7fa64f92c1d5341eef
react-native-google-places: d09138fdb5d77c071981a4c6170823c8538d2e20
yoga: 684513b14b03201579ba3cee20218c9d1298b0cc
PODFILE CHECKSUM: 5a81856c7abbc2cb4729e6fcb84c67c8f6428613
COCOAPODS: 1.6.1

View file

@ -5,6 +5,7 @@
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@ -24,6 +25,9 @@
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
1BA919979FB9491D9A9FD5B2 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */; };
1D81FF2A34F541A29A1BBC89 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */; };
21A5DFC9CE404E0FB5AE2738 /* Roboto-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */; };
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
@ -39,9 +43,12 @@
2DCD954D1E0B4F2C00145EB5 /* AreThereCookiesTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* AreThereCookiesTests.m */; };
2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
36B20041268B4878A62CE84C /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FF328AF2E4504AAD81574332 /* FontAwesome.ttf */; };
41336C05F4C3070C3BFEB48E /* libPods-AreThereCookiesTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55ABFF2364564CD64DBF6BB5 /* libPods-AreThereCookiesTests.a */; };
3C37B2B1682543FD95F340B4 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */; };
417D040493BD1950B68C01DD /* libPods-AreThereCookies.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D47EBABC8CF468100A3AE407 /* libPods-AreThereCookies.a */; };
42F9AC2255DF4556AC6D7967 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 39E5D242E4F44F41AB357CFE /* Ionicons.ttf */; };
48E301A6DF864C6FA3068DA2 /* Roboto-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */; };
4BCAF68147A24F79A4905DC5 /* Roboto-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */; };
50D90B6D80A04AC8ABAD6829 /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */; };
55FDEE79293C4EFA86063F22 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D75338FE719450A97754019 /* Entypo.ttf */; };
58AA5BD96D1F473CAF1D0297 /* libAirMaps.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 484774914A724BB18F8CBAC7 /* libAirMaps.a */; };
5AAA204F998B478B8817CB33 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E8312BB21594022857FE94F /* libz.tbd */; };
@ -51,6 +58,8 @@
761A158B50BE4290B39D8637 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 28807711BA664F9EB49B3B76 /* SimpleLineIcons.ttf */; };
7D83C54E807D47FCBF127E23 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 53F298ED1335413584C3533A /* EvilIcons.ttf */; };
832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
840DA421AD5C4037A8396890 /* Roboto-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */; };
859F0E069073420E9D810864 /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */; };
861EFBF42274B81B005A103F /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBE52274B81B005A103F /* Octicons.ttf */; };
861EFBF52274B81B005A103F /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBE62274B81B005A103F /* Feather.ttf */; };
861EFBF62274B81B005A103F /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBE72274B81B005A103F /* Entypo.ttf */; };
@ -66,30 +75,22 @@
861EFC002274B81B005A103F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBF12274B81B005A103F /* EvilIcons.ttf */; };
861EFC012274B81B005A103F /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBF22274B81B005A103F /* SimpleLineIcons.ttf */; };
861EFC022274B81B005A103F /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 861EFBF32274B81B005A103F /* MaterialIcons.ttf */; };
8FB7992CBE064AF4A7A5A812 /* Roboto-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */; };
9EC2D5A4B51B408C897B1BD3 /* libRNSnackbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E1417884DC3F4C11A7738305 /* libRNSnackbar.a */; };
A0722B1992204F5B94FD38A6 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */; };
A1CC54A87DDF4FADB9557E40 /* Roboto-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */; };
A1CF0A85A34940CDA949E850 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 840A8631BCFC4F9E8370035F /* SystemConfiguration.framework */; };
B861BE92B155457990C8500E /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D53B3F694EB44AC8B196FE53 /* Zocial.ttf */; };
BC10DD5B7CA14D9D9C7C8041 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 452874387CAA42D7B120E03E /* MaterialCommunityIcons.ttf */; };
C45F4C3259C643E7A69C05D8 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C547107D34794AD7B535271C /* MaterialIcons.ttf */; };
E1F8FA2ADF4A4EC396C4AFE1 /* libRNGooglePlaces.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7AD62EB06284B498A5E9460 /* libRNGooglePlaces.a */; };
EA087CEA76394C3DB637FCA4 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84A166D2AEF7429D9D52FF2D /* SafariServices.framework */; };
F1553D38922A40629C3CE271 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */; };
E1379B5F683347CBB4906496 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 92DB919838DA4ED997CD48E4 /* Feather.ttf */; };
1BA919979FB9491D9A9FD5B2 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */; };
A0722B1992204F5B94FD38A6 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */; };
1D81FF2A34F541A29A1BBC89 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */; };
D2C2690538484953B1A2F79A /* Roboto-Black.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */; };
21A5DFC9CE404E0FB5AE2738 /* Roboto-BlackItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */; };
3C37B2B1682543FD95F340B4 /* Roboto-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */; };
8FB7992CBE064AF4A7A5A812 /* Roboto-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */; };
859F0E069073420E9D810864 /* Roboto-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */; };
E1379B5F683347CBB4906496 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 92DB919838DA4ED997CD48E4 /* Feather.ttf */; };
EA087CEA76394C3DB637FCA4 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84A166D2AEF7429D9D52FF2D /* SafariServices.framework */; };
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED297162215061F000B7C4FE /* JavaScriptCore.framework */; };
ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED2971642150620600B7C4FE /* JavaScriptCore.framework */; };
F1553D38922A40629C3CE271 /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */; };
F2620B0961574CA9A84954D6 /* Roboto-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */; };
840DA421AD5C4037A8396890 /* Roboto-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */; };
F9EB2CC891AE4139A1329A52 /* Roboto-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */; };
A1CC54A87DDF4FADB9557E40 /* Roboto-MediumItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */; };
50D90B6D80A04AC8ABAD6829 /* Roboto-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */; };
4BCAF68147A24F79A4905DC5 /* Roboto-Thin.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */; };
48E301A6DF864C6FA3068DA2 /* Roboto-ThinItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -219,20 +220,6 @@
remoteGlobalIDString = 3D383D621EBD27B9005632C8;
remoteInfo = "double-conversion-tvOS";
};
2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 9936F3131F5F2E4B0010BF04;
remoteInfo = privatedata;
};
2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 9936F32F1F5F2E5B0010BF04;
remoteInfo = "privatedata-tvOS";
};
3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
@ -310,20 +297,6 @@
remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
remoteInfo = "cxxreact-tvOS";
};
3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
remoteInfo = jschelpers;
};
3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
remoteInfo = "jschelpers-tvOS";
};
5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
@ -366,13 +339,6 @@
remoteGlobalIDString = 11FA5C511C4A1296003AC2EE;
remoteInfo = AirMaps;
};
8626C5A62258FE3B00664303 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 134814201AA4EA6300B7C361;
remoteInfo = RNGooglePlaces;
};
8626C5AC2258FE3B00664303 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1CDCCD20971D43E3A647B5AA /* RNImagePicker.xcodeproj */;
@ -401,10 +367,37 @@
remoteGlobalIDString = A39873CE1EA65EE60051E01A;
remoteInfo = "RNVectorIcons-tvOS";
};
86DE46CB22D1044700B70CBA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EDEBC6D6214B3E7000DD5AC8;
remoteInfo = jsi;
};
86DE46CD22D1044700B70CBA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EDEBC73B214B45A300DD5AC8;
remoteInfo = jsiexecutor;
};
86DE46CF22D1044700B70CBA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = ED296FB6214C9A0900B7C4FE;
remoteInfo = "jsi-tvOS";
};
86DE46D122D1044700B70CBA /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = ED296FEE214C9CF800B7C4FE;
remoteInfo = "jsiexecutor-tvOS";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = "<group>"; };
00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = "<group>"; };
00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
@ -423,13 +416,17 @@
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = AreThereCookies/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = AreThereCookies/main.m; sourceTree = "<group>"; };
146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BlackItalic.ttf"; path = "../static/fonts/Roboto-BlackItalic.ttf"; sourceTree = "<group>"; };
1CDCCD20971D43E3A647B5AA /* RNImagePicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNImagePicker.xcodeproj; path = "../node_modules/react-native-image-picker/ios/RNImagePicker.xcodeproj"; sourceTree = "<group>"; };
1E8312BB21594022857FE94F /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; };
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; };
28807711BA664F9EB49B3B76 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; };
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-LightItalic.ttf"; path = "../static/fonts/Roboto-LightItalic.ttf"; sourceTree = "<group>"; };
2D02E47B1E0B4A5D006451C7 /* aretherecookies-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = "aretherecookies-tvOS.app"; path = "AreThereCookies-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E4901E0B4A5D006451C7 /* aretherecookies-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "aretherecookies-tvOSTests.xctest"; path = "AreThereCookies-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
321F99EEE9DC7515AB9BBEF9 /* Pods-AreThereCookiesTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AreThereCookiesTests.release.xcconfig"; path = "Target Support Files/Pods-AreThereCookiesTests/Pods-AreThereCookiesTests.release.xcconfig"; sourceTree = "<group>"; };
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Medium.ttf"; path = "../static/fonts/Roboto-Medium.ttf"; sourceTree = "<group>"; };
39E5D242E4F44F41AB357CFE /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; };
3BA6445F50EA4148970391C2 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; };
40366698AD0243C08C474E18 /* A0Auth0.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = A0Auth0.xcodeproj; path = "../node_modules/react-native-auth0/ios/A0Auth0.xcodeproj"; sourceTree = "<group>"; };
@ -439,15 +436,15 @@
4B39ECE2FC3546CDBD026A5B /* libRNImagePicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNImagePicker.a; sourceTree = "<group>"; };
4D75338FE719450A97754019 /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; };
53F298ED1335413584C3533A /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; };
55ABFF2364564CD64DBF6BB5 /* libPods-AreThereCookiesTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AreThereCookiesTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
55BE16B9C73846718D1F0095 /* libA0Auth0.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libA0Auth0.a; sourceTree = "<group>"; };
58F3E8D932CA42CCBE826FCC /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; };
5BFB7419F05149A0AA3B5196 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = "<group>"; };
5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNGooglePlaces.xcodeproj; path = "../node_modules/react-native-google-places/ios/RNGooglePlaces.xcodeproj"; sourceTree = "<group>"; };
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Thin.ttf"; path = "../static/fonts/Roboto-Thin.ttf"; sourceTree = "<group>"; };
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-BoldItalic.ttf"; path = "../static/fonts/Roboto-BoldItalic.ttf"; sourceTree = "<group>"; };
7164AF7E77DB51BBE253F0CE /* Pods-AreThereCookies.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AreThereCookies.release.xcconfig"; path = "Target Support Files/Pods-AreThereCookies/Pods-AreThereCookies.release.xcconfig"; sourceTree = "<group>"; };
71F6040C4B33CB1CF7754D52 /* Pods-AreThereCookiesTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AreThereCookiesTests.debug.xcconfig"; path = "Target Support Files/Pods-AreThereCookiesTests/Pods-AreThereCookiesTests.debug.xcconfig"; sourceTree = "<group>"; };
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-ThinItalic.ttf"; path = "../static/fonts/Roboto-ThinItalic.ttf"; sourceTree = "<group>"; };
832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
840A8631BCFC4F9E8370035F /* SystemConfiguration.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
84A166D2AEF7429D9D52FF2D /* SafariServices.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; };
@ -466,33 +463,26 @@
861EFBF12274B81B005A103F /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = EvilIcons.ttf; sourceTree = "<group>"; };
861EFBF22274B81B005A103F /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = SimpleLineIcons.ttf; sourceTree = "<group>"; };
861EFBF32274B81B005A103F /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = MaterialIcons.ttf; sourceTree = "<group>"; };
A7AD62EB06284B498A5E9460 /* libRNGooglePlaces.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNGooglePlaces.a; sourceTree = "<group>"; };
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Black.ttf"; path = "../static/fonts/Roboto-Black.ttf"; sourceTree = "<group>"; };
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; };
92DB919838DA4ED997CD48E4 /* 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 = "<group>"; };
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Light.ttf"; path = "../static/fonts/Roboto-Light.ttf"; sourceTree = "<group>"; };
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; };
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Regular.ttf"; path = "../static/fonts/Roboto-Regular.ttf"; sourceTree = "<group>"; };
ABBDD4481F9A4A879DC2DA9B /* 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 = "<group>"; };
C547107D34794AD7B535271C /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; };
C68D60C5A4D14EB1B5FCF548 /* RNSnackbar.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNSnackbar.xcodeproj; path = "../node_modules/react-native-snackbar/ios/RNSnackbar.xcodeproj"; sourceTree = "<group>"; };
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Bold.ttf"; path = "../static/fonts/Roboto-Bold.ttf"; sourceTree = "<group>"; };
CA8120963AF94E0FB384289D /* 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 = "<group>"; };
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-Italic.ttf"; path = "../static/fonts/Roboto-Italic.ttf"; sourceTree = "<group>"; };
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-MediumItalic.ttf"; path = "../static/fonts/Roboto-MediumItalic.ttf"; sourceTree = "<group>"; };
D47EBABC8CF468100A3AE407 /* libPods-AreThereCookies.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AreThereCookies.a"; sourceTree = BUILT_PRODUCTS_DIR; };
D53B3F694EB44AC8B196FE53 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; };
E1417884DC3F4C11A7738305 /* libRNSnackbar.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNSnackbar.a; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F8F9368F722A4808842C3802 /* AddressBook.framework */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; };
FF328AF2E4504AAD81574332 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; };
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */ = {isa = PBXFileReference; name = "AntDesign.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
92DB919838DA4ED997CD48E4 /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Brands.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Regular.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Solid.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */ = {isa = PBXFileReference; name = "Roboto-Black.ttf"; path = "../static/fonts/Roboto-Black.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-BlackItalic.ttf"; path = "../static/fonts/Roboto-BlackItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */ = {isa = PBXFileReference; name = "Roboto-Bold.ttf"; path = "../static/fonts/Roboto-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-BoldItalic.ttf"; path = "../static/fonts/Roboto-BoldItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */ = {isa = PBXFileReference; name = "Roboto-Italic.ttf"; path = "../static/fonts/Roboto-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */ = {isa = PBXFileReference; name = "Roboto-Light.ttf"; path = "../static/fonts/Roboto-Light.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-LightItalic.ttf"; path = "../static/fonts/Roboto-LightItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */ = {isa = PBXFileReference; name = "Roboto-Medium.ttf"; path = "../static/fonts/Roboto-Medium.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-MediumItalic.ttf"; path = "../static/fonts/Roboto-MediumItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */ = {isa = PBXFileReference; name = "Roboto-Regular.ttf"; path = "../static/fonts/Roboto-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */ = {isa = PBXFileReference; name = "Roboto-Thin.ttf"; path = "../static/fonts/Roboto-Thin.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */ = {isa = PBXFileReference; name = "Roboto-ThinItalic.ttf"; path = "../static/fonts/Roboto-ThinItalic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -500,8 +490,8 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ED297163215061F000B7C4FE /* JavaScriptCore.framework in Frameworks */,
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
41336C05F4C3070C3BFEB48E /* libPods-AreThereCookiesTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -509,6 +499,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
ED2971652150620600B7C4FE /* JavaScriptCore.framework in Frameworks */,
11D1A2F320CAFA9E000508D9 /* libRCTAnimation.a in Frameworks */,
146834051AC3E58100842450 /* libReact.a in Frameworks */,
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
@ -528,7 +519,6 @@
A1CF0A85A34940CDA949E850 /* SystemConfiguration.framework in Frameworks */,
029B651D0B0E4AE3837F4281 /* AddressBook.framework in Frameworks */,
5F2AA8F2235A4CD68207EAB7 /* libA0Auth0.a in Frameworks */,
E1F8FA2ADF4A4EC396C4AFE1 /* libRNGooglePlaces.a in Frameworks */,
9EC2D5A4B51B408C897B1BD3 /* libRNSnackbar.a in Frameworks */,
417D040493BD1950B68C01DD /* libPods-AreThereCookies.a in Frameworks */,
);
@ -643,7 +633,6 @@
isa = PBXGroup;
children = (
861EFBE42274B81B005A103F /* Fonts */,
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
@ -663,16 +652,16 @@
3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
2DF0FFDF2056DD460020B375 /* libjsinspector.a */,
2DF0FFE12056DD460020B375 /* libjsinspector-tvOS.a */,
2DF0FFE32056DD460020B375 /* libthird-party.a */,
2DF0FFE52056DD460020B375 /* libthird-party.a */,
2DF0FFE72056DD460020B375 /* libdouble-conversion.a */,
2DF0FFE92056DD460020B375 /* libdouble-conversion.a */,
2DF0FFEB2056DD460020B375 /* libprivatedata.a */,
2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */,
86DE46CC22D1044700B70CBA /* libjsi.a */,
86DE46CE22D1044700B70CBA /* libjsiexecutor.a */,
86DE46D022D1044700B70CBA /* libjsi-tvOS.a */,
86DE46D222D1044700B70CBA /* libjsiexecutor-tvOS.a */,
);
name = Products;
sourceTree = "<group>";
@ -682,7 +671,6 @@
children = (
2D16E6891FA4F8E400B85C8A /* libReact.a */,
D47EBABC8CF468100A3AE407 /* libPods-AreThereCookies.a */,
55ABFF2364564CD64DBF6BB5 /* libPods-AreThereCookiesTests.a */,
);
name = Frameworks;
sourceTree = "<group>";
@ -696,6 +684,30 @@
name = Products;
sourceTree = "<group>";
};
7080528B7A4F4FBA89B50416 /* Resources */ = {
isa = PBXGroup;
children = (
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */,
92DB919838DA4ED997CD48E4 /* Feather.ttf */,
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */,
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */,
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */,
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */,
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */,
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */,
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */,
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */,
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */,
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */,
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */,
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */,
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */,
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */,
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */,
);
name = Resources;
sourceTree = "<group>";
};
78C398B11ACF4ADC00677621 /* Products */ = {
isa = PBXGroup;
children = (
@ -723,7 +735,6 @@
ABBDD4481F9A4A879DC2DA9B /* RNVectorIcons.xcodeproj */,
CA8120963AF94E0FB384289D /* AirMaps.xcodeproj */,
40366698AD0243C08C474E18 /* A0Auth0.xcodeproj */,
6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */,
C68D60C5A4D14EB1B5FCF548 /* RNSnackbar.xcodeproj */,
);
name = Libraries;
@ -799,7 +810,6 @@
840A8631BCFC4F9E8370035F /* SystemConfiguration.framework */,
F8F9368F722A4808842C3802 /* AddressBook.framework */,
55BE16B9C73846718D1F0095 /* libA0Auth0.a */,
A7AD62EB06284B498A5E9460 /* libRNGooglePlaces.a */,
E1417884DC3F4C11A7738305 /* libRNSnackbar.a */,
4D75338FE719450A97754019 /* Entypo.ttf */,
53F298ED1335413584C3533A /* EvilIcons.ttf */,
@ -811,6 +821,8 @@
58F3E8D932CA42CCBE826FCC /* Octicons.ttf */,
28807711BA664F9EB49B3B76 /* SimpleLineIcons.ttf */,
D53B3F694EB44AC8B196FE53 /* Zocial.ttf */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
);
name = "Recovered References";
sourceTree = "<group>";
@ -831,14 +843,6 @@
name = Products;
sourceTree = "<group>";
};
8626C5902258FE3B00664303 /* Products */ = {
isa = PBXGroup;
children = (
8626C5A72258FE3B00664303 /* libRNGooglePlaces.a */,
);
name = Products;
sourceTree = "<group>";
};
8626C5942258FE3B00664303 /* Products */ = {
isa = PBXGroup;
children = (
@ -869,37 +873,10 @@
children = (
44FFE9EC7CB7E38CB33D7533 /* Pods-AreThereCookies.debug.xcconfig */,
7164AF7E77DB51BBE253F0CE /* Pods-AreThereCookies.release.xcconfig */,
71F6040C4B33CB1CF7754D52 /* Pods-AreThereCookiesTests.debug.xcconfig */,
321F99EEE9DC7515AB9BBEF9 /* Pods-AreThereCookiesTests.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
7080528B7A4F4FBA89B50416 /* Resources */ = {
isa = "PBXGroup";
children = (
1F5ACA76D45A42F7B97E5907 /* AntDesign.ttf */,
92DB919838DA4ED997CD48E4 /* Feather.ttf */,
9C594C7BB4CB41A186372233 /* FontAwesome5_Brands.ttf */,
8FB8920840B04753AE5E450E /* FontAwesome5_Regular.ttf */,
214A46B0158E452CA1009197 /* FontAwesome5_Solid.ttf */,
89AC73049079482DBCBB2CD9 /* Roboto-Black.ttf */,
1A1081C5AC6A4355A7934EDE /* Roboto-BlackItalic.ttf */,
C93FAF8572F54F189A859FAC /* Roboto-Bold.ttf */,
63417ECCAEBD4001932D07CF /* Roboto-BoldItalic.ttf */,
D015CCB188D0418A8C94D524 /* Roboto-Italic.ttf */,
962B2A8EF37D4811AA86ED44 /* Roboto-Light.ttf */,
2AEFED41912C4269B1A34B8D /* Roboto-LightItalic.ttf */,
389FDF9FC3DF4163B2578E88 /* Roboto-Medium.ttf */,
D32EFBE8AB52428E896D1650 /* Roboto-MediumItalic.ttf */,
9D44E016C6284FE5AA672A79 /* Roboto-Regular.ttf */,
5FF3D276AFF64A23A2B5E680 /* Roboto-Thin.ttf */,
7EADFEEDB73A42B9B934DD48 /* Roboto-ThinItalic.ttf */,
);
name = Resources;
sourceTree = "<group>";
path = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@ -907,7 +884,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "AreThereCookiesTests" */;
buildPhases = (
6AD6EC0CC61071A66DB649AC /* [CP] Check Pods Manifest.lock */,
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
@ -1066,10 +1042,6 @@
ProductGroup = 146834001AC3E56700842450 /* Products */;
ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
},
{
ProductGroup = 8626C5902258FE3B00664303 /* Products */;
ProjectRef = 6A1C7332790C45828F29BB89 /* RNGooglePlaces.xcodeproj */;
},
{
ProductGroup = 8626C5982258FE3B00664303 /* Products */;
ProjectRef = 1CDCCD20971D43E3A647B5AA /* RNImagePicker.xcodeproj */;
@ -1206,20 +1178,6 @@
remoteRef = 2DF0FFE82056DD460020B375 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
2DF0FFEB2056DD460020B375 /* libprivatedata.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libprivatedata.a;
remoteRef = 2DF0FFEA2056DD460020B375 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
2DF0FFED2056DD460020B375 /* libprivatedata-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libprivatedata-tvOS.a";
remoteRef = 2DF0FFEC2056DD460020B375 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -1297,20 +1255,6 @@
remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjschelpers.a;
remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjschelpers.a;
remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -1353,13 +1297,6 @@
remoteRef = 8626C5A02258FE3B00664303 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
8626C5A72258FE3B00664303 /* libRNGooglePlaces.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libRNGooglePlaces.a;
remoteRef = 8626C5A62258FE3B00664303 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
8626C5AD2258FE3B00664303 /* libRNImagePicker.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
@ -1388,6 +1325,34 @@
remoteRef = 8626C5B52258FE3B00664303 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
86DE46CC22D1044700B70CBA /* libjsi.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjsi.a;
remoteRef = 86DE46CB22D1044700B70CBA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
86DE46CE22D1044700B70CBA /* libjsiexecutor.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libjsiexecutor.a;
remoteRef = 86DE46CD22D1044700B70CBA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
86DE46D022D1044700B70CBA /* libjsi-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libjsi-tvOS.a";
remoteRef = 86DE46CF22D1044700B70CBA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
86DE46D222D1044700B70CBA /* libjsiexecutor-tvOS.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = "libjsiexecutor-tvOS.a";
remoteRef = 86DE46D122D1044700B70CBA /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
@ -1505,7 +1470,6 @@
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-AreThereCookies/Pods-AreThereCookies-resources.sh",
"${PODS_ROOT}/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/Resources/GoogleMaps.bundle",
"${PODS_ROOT}/GooglePlacePicker/Frameworks/GooglePlacePicker.framework/Resources/GooglePlacePicker.bundle",
"${PODS_ROOT}/GooglePlaces/Frameworks/GooglePlaces.framework/Resources/GooglePlaces.bundle",
);
name = "[CP] Copy Pods Resources";
@ -1513,7 +1477,6 @@
);
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleMaps.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GooglePlacePicker.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GooglePlaces.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
@ -1521,28 +1484,6 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AreThereCookies/Pods-AreThereCookies-resources.sh\"\n";
showEnvVarsInLog = 0;
};
6AD6EC0CC61071A66DB649AC /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-AreThereCookiesTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
E06654CADD25E198C33CC7BD /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@ -1632,7 +1573,6 @@
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 71F6040C4B33CB1CF7754D52 /* Pods-AreThereCookiesTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
@ -1668,7 +1608,6 @@
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 321F99EEE9DC7515AB9BBEF9 /* Pods-AreThereCookiesTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;

View file

@ -6,8 +6,11 @@
*/
#import <UIKit/UIKit.h>
#import <React/RCTBridgeDelegate.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
//@interface AppDelegate : UIResponder <UIApplicationDelegate>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@property (nonatomic, strong) UIWindow *window;

View file

@ -9,6 +9,7 @@
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <React/RCTBridge.h>
@import GooglePlaces;
@import GoogleMaps;
@ -17,14 +18,9 @@
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSURL *jsCodeLocation;
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"AreThereCookies" initialProperties:nil];
jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
moduleName:@"AreThereCookies"
initialProperties:nil
launchOptions:launchOptions];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
@ -39,4 +35,13 @@
return YES;
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
@end

View file

@ -1,32 +1,32 @@
//@flow
import React, { Component } from 'react';
import { StatusBar } from 'react-native';
import { ThemeProvider } from 'react-native-material-ui';
import rxjsconfig from 'recompose/rxjsObservableConfig';
import setObservableConfig from 'recompose/setObservableConfig';
import { NativeRouter, Route, Redirect, AndroidBackButton, Switch } from 'react-router-native';
import Nav from './pages/Nav';
import FoodItemDetail from './pages/FoodItemDetail';
import PlaceDetail from './pages/PlaceDetail';
import CreateFoodItem from './pages/CreateFoodItem';
import AuthManager from './AuthManager';
import LoginPage from './pages/LoginPage';
import LandingPage from './pages/LandingPage';
import ZipcodePage from './pages/ZipcodePage';
import { AppContainer } from './components/AppContainer';
import React, { Component } from "react";
import { StatusBar } from "react-native";
import { ThemeContext, getTheme } from "react-native-material-ui";
import rxjsconfig from "recompose/rxjsObservableConfig";
import setObservableConfig from "recompose/setObservableConfig";
import { NativeRouter, Route, Redirect, AndroidBackButton, Switch } from "react-router-native";
import Nav from "./pages/Nav";
import FoodItemDetail from "./pages/FoodItemDetail";
import PlaceDetail from "./pages/PlaceDetail";
import CreateFoodItem from "./pages/CreateFoodItem";
import AuthManager from "./AuthManager";
import LoginPage from "./pages/LoginPage";
import LandingPage from "./pages/LandingPage";
import ZipcodePage from "./pages/ZipcodePage";
import { AppContainer } from "./components/AppContainer";
import theme from './ui-theme';
import theme from "./ui-theme";
setObservableConfig(rxjsconfig);
export default class App extends Component {
static displayName = 'App';
static displayName = "App";
render() {
return (
<NativeRouter>
<AndroidBackButton>
<ThemeProvider uiTheme={theme}>
<ThemeContext.Provider value={getTheme(theme)}>
<AppContainer>
<StatusBar backgroundColor={theme.statusBarColor} />
<Redirect from="/" to="/landing" />
@ -42,7 +42,7 @@ export default class App extends Component {
path="/createFoodItem"
render={props => {
if (!AuthManager.isLoggedIn()) {
const search = props.location.search + '&' || '?';
const search = props.location.search + "&" || "?";
return <Redirect to={`/login${search}`} push />;
}
return <CreateFoodItem />;
@ -50,7 +50,7 @@ export default class App extends Component {
/>
</Switch>
</AppContainer>
</ThemeProvider>
</ThemeContext.Provider>
</AndroidBackButton>
</NativeRouter>
);

View file

@ -1,26 +1,26 @@
// @flow
import { BASE_URL } from '../constants/AppConstants';
import AuthManager from '../AuthManager';
import { BASE_URL } from "../constants/AppConstants";
import AuthManager from "../AuthManager";
export const fetchRequest = async ({
endpoint,
method,
headers = {},
body,
body
}: {
endpoint: string,
method: string,
headers?: Object,
body?: Object,
body?: Object
}) => {
const res = await fetch(`http://${BASE_URL}${endpoint}`, {
const res = await fetch(`https://${BASE_URL}${endpoint}`, {
method,
headers: {
'Content-Type': 'application/json',
"Content-Type": "application/json",
...AuthManager.getAuthHeader(),
...headers,
...headers
},
...(body ? { body: JSON.stringify(body) } : {}),
...(body ? { body: JSON.stringify(body) } : {})
});
if (res.status === 401) {
@ -36,10 +36,10 @@ export const fetchRequest = async ({
export const fetchRequestBinary = async ({ endpoint, body }: { endpoint: string, body: any }) => {
return fetch(`http://${BASE_URL}${endpoint}`, {
method: 'POST',
method: "POST",
headers: {
...AuthManager.getAuthHeader(),
...AuthManager.getAuthHeader()
},
body,
body
});
};

View file

@ -1,14 +1,14 @@
// @flow
import { memoize } from 'ramda';
import FilterRecord from '../records/FilterRecord';
import FoodItemRecord from '../records/FoodItemRecord';
import AuthManager from '../AuthManager';
import { map, path, nth } from 'ramda';
import { addImage } from './ImagesApi';
import { fetchRequest } from './FetchApi';
import { memoizeWith, identity } from "ramda";
import FilterRecord from "../records/FilterRecord";
import FoodItemRecord from "../records/FoodItemRecord";
import AuthManager from "../AuthManager";
import { map, path, nth } from "ramda";
import { addImage } from "./ImagesApi";
import { fetchRequest } from "./FetchApi";
export type FoodItemsFilter = {
radius?: number,
radius?: number
};
export type RawFoodItem = {
@ -21,32 +21,27 @@ export type RawFoodItem = {
latitude: number,
longitude: number,
distance: number,
lastupdated: number,
lastupdated: number
};
export type FoodItemsForLocation = {
orderby: string,
filter: FoodItemsFilter,
fooditems: ?Array<RawFoodItem>,
fooditems: ?Array<RawFoodItem>
};
export const getFoodItems = memoize(
async ({
loc,
filter,
}: {
loc: Position,
filter: FilterRecord,
}): Promise<FoodItemsForLocation> => {
export const getFoodItems = memoizeWith(
identity,
async ({ loc, filter }: { loc: Position, filter: FilterRecord }): Promise<FoodItemsForLocation> => {
const {
coords: { latitude: lat, longitude: lng },
coords: { latitude: lat, longitude: lng }
} = loc;
const { orderby, categories, radius, search } = filter;
try {
return fetchRequest({
endpoint: '/fooditems',
method: 'POST',
endpoint: "/fooditems",
method: "POST",
body: {
lat,
lng,
@ -54,22 +49,22 @@ export const getFoodItems = memoize(
filter: {
...(categories ? { categories } : {}),
radius,
search,
},
},
search
}
}
}).then(json => ({
...json,
loading: false,
error: null,
error: null
}));
} catch (error) {
console.log(error); // eslint-disable-line no-console
console.error(error); // eslint-disable-line no-console
return {
orderby: 'distance',
orderby: "distance",
filter: {},
fooditems: [],
loading: false,
error: error,
error: error
};
}
}
@ -77,24 +72,24 @@ export const getFoodItems = memoize(
export const createFoodItem = async (foodItem: FoodItemRecord) => {
if (!AuthManager.user) {
throw new Error('You must be logged in to create food items');
throw new Error("You must be logged in to create food items");
}
const username = AuthManager.user.name;
const res = await fetchRequest({
endpoint: '/addfooditem',
method: 'POST',
body: foodItem,
endpoint: "/addfooditem",
method: "POST",
body: foodItem
});
const addImageUri = (imageUri: string) => addImage({ foodItemId: res.id, imageUri, username });
const images = map(path(['url']), await Promise.all(map(addImageUri, foodItem.images.toArray())));
const images = map(path(["url"]), await Promise.all(map(addImageUri, foodItem.images.toArray())));
return {
...res,
images,
thumbimage: nth(0, images),
thumbimage: nth(0, images)
};
};

View file

@ -1,18 +1,18 @@
// @flow
import { GoogleAPIKey } from '../constants/AppConstants';
import { path } from 'ramda';
import { GoogleAPIKey } from "../constants/AppConstants";
import { path } from "ramda";
const url = 'https://maps.googleapis.com/maps/api/geocode/json';
const url = "https://maps.googleapis.com/maps/api/geocode/json";
type Location = {
lat: number,
lng: number,
lng: number
};
type AddressComponent = {
long_name: string,
short_name: string,
types: Array<string>,
types: Array<string>
};
type GeocodeResult = {
@ -20,16 +20,14 @@ type GeocodeResult = {
address_components: Array<AddressComponent>,
formatted_address: string,
geometry: {
location: Location,
location: Location
},
place_id: string,
types: Array<string>,
}>,
types: Array<string>
}>
};
export const getCoordsFromZip = async (zip: string): Promise<Location> => {
const res: GeocodeResult = await (await fetch(
`${url}?key=${GoogleAPIKey}&address=${zip}`
)).json();
return path(['results', 0, 'geometry', 'location'], res) || { lat: 0, lng: 0 };
const res: GeocodeResult = await (await fetch(`${url}?key=${GoogleAPIKey}&address=${zip}`)).json();
return path(["results", 0, "geometry", "location"], res) || { lat: 0, lng: 0 };
};

View file

@ -1,7 +1,7 @@
// @flow
import { type GooglePlaceObj } from '../records/PlaceRecord';
import { GoogleAPIKey } from '../constants/AppConstants';
import { memoize } from 'ramda';
import { type GooglePlaceObj } from "../records/PlaceRecord";
import { GoogleAPIKey } from "../constants/AppConstants";
import { memoizeWith, identity } from "ramda";
const placesDetailUrl = `https://maps.googleapis.com/maps/api/place/details/json?key=${GoogleAPIKey}`;
const photosUrl = `https://maps.googleapis.com/maps/api/place/photo?key=${GoogleAPIKey}`;
@ -11,7 +11,7 @@ type GooglePlaceDetailsResponse = { error_message: ?string, result: GooglePlaceO
type GoogleFindPlaceResponse = {
status: string,
results: Array<GooglePlaceObj>,
next_page_token?: string,
next_page_token?: string
};
const milesToMeters = miles => Math.ceil(miles > 0 ? miles / 0.00062137 : 0);
@ -20,23 +20,17 @@ const milesToMeters = miles => Math.ceil(miles > 0 ? miles / 0.00062137 : 0);
* always return a promise and swallow exceptions so as not to break the stream
*/
const safeWrapAjax = ajaxFn =>
memoize((...args) => {
memoizeWith(identity, (...args) => {
return ajaxFn(...args).catch(error => {
console.log('ERROR: ', error); //eslint-disable-line no-console
console.log("ERROR: ", error); //eslint-disable-line no-console
return null;
});
});
export const getPlaceDetails = safeWrapAjax(
async ({
distance,
placeId,
}: {
distance: number,
placeId: ?string,
}): Promise<GooglePlaceObj> => {
if (!placeId || typeof placeId !== 'string') {
throw new Error('placeid looks wrong');
async ({ distance, placeId }: { distance: number, placeId: ?string }): Promise<GooglePlaceObj> => {
if (!placeId || typeof placeId !== "string") {
throw new Error("placeid looks wrong");
}
const res = await fetch(`${placesDetailUrl}&placeid=${placeId}`);
@ -55,13 +49,13 @@ export const getURLForPhotoReference = (opts?: { maxheight?: number, maxwidth?:
photoReference: string
) => {
if (!photoReference) {
return '';
return "";
}
const { maxheight, maxwidth } = opts;
const maxHeight = `&maxheight=${maxheight || 600}`;
const maxWidth = maxwidth ? `&maxwidth=${maxwidth}` : '';
const maxWidth = maxwidth ? `&maxwidth=${maxwidth}` : "";
const photoref = `&photoreference=${photoReference}`;
return `${photosUrl}${photoref}${maxHeight}${maxWidth}`;
@ -76,21 +70,21 @@ export const findNearbyPlaces = safeWrapAjax(
async ({
location,
search,
radius,
radius
}: {
location?: Position,
search?: string,
radius: number,
radius: number
}): Promise<any> => {
if (!location) {
return null;
}
const {
coords: { latitude, longitude },
coords: { latitude, longitude }
} = location;
const keyword = search ? `keyword=${encodeURIComponent(search)}` : '';
const keyword = search ? `keyword=${encodeURIComponent(search)}` : "";
const loc = `location=${latitude},${longitude}`;
const rad = `radius=${milesToMeters(radius)}`;
const reqUrl = `${placesFromTextUrl}&${keyword}&${loc}&${rad}&type=restaurant`;
@ -105,19 +99,19 @@ export const findNearbyPlaces = safeWrapAjax(
// return concat(response.results, page.results);
// }
if (response.status !== 'OK') {
throw new Error('google find places request failed');
if (response.status !== "OK") {
throw new Error("google find places request failed");
}
places = response.results;
} catch (err) {
console.log(error); // eslint-disable-line no-console
console.error(error); // eslint-disable-line no-console
error = err;
}
return {
error,
location,
places,
places
};
}
);

View file

@ -1,37 +1,37 @@
// @flow
import type { ImageRaw } from '../records/ImageRecord';
import { fetchRequest, fetchRequestBinary } from './FetchApi';
import type { ImageRaw } from "../records/ImageRecord";
import { fetchRequest, fetchRequestBinary } from "./FetchApi";
export const getImages = (foodItemId: string): Promise<Array<ImageRaw>> => {
return fetchRequest({
endpoint: `/images/${foodItemId}`,
method: 'GET',
method: "GET"
});
};
export const addImage = async ({
foodItemId,
username,
imageUri,
imageUri
}: {
foodItemId: string,
username: string,
imageUri: string,
imageUri: string
}) => {
const body = new FormData();
// $FlowFixMe - react-native does different stuff with FormData
body.append('photo', {
body.append("photo", {
uri: imageUri,
type: 'image/jpeg',
name: 'photo.jpg',
type: "image/jpeg",
name: "photo.jpg"
});
body.append('username', username);
body.append("username", username);
const res = await fetchRequestBinary({
endpoint: `/images/${foodItemId}`,
body,
body
});
if (!res.ok) {

View file

@ -1,23 +1,24 @@
// @flow
import { emitter } from '../streams/LocationStream';
import { getCoordsFromZip } from './GoogleMapsApi';
import { AsyncStorage, PermissionsAndroid, Platform } from 'react-native';
import { emitter } from "../streams/LocationStream";
import { getCoordsFromZip } from "./GoogleMapsApi";
import { AsyncStorage, PermissionsAndroid, Platform } from "react-native";
import Geolocation from "react-native-geolocation-service";
const {
PERMISSIONS: { ACCESS_FINE_LOCATION },
RESULTS,
request: requestPermission,
request: requestPermission
} = PermissionsAndroid;
let locationPermissionResponse = false;
const askLocationPermission = async () => {
if (Platform.OS === 'ios') {
if (Platform.OS === "ios") {
locationPermissionResponse = RESULTS.GRANTED;
} else if (locationPermissionResponse !== RESULTS.GRANTED) {
locationPermissionResponse = await requestPermission(ACCESS_FINE_LOCATION, {
title: 'Aretherecookies? Location Permission',
message: 'Aretherecookies? would like to use your location to find some cookies. Is that OK?',
title: "Aretherecookies? Location Permission",
message: "Aretherecookies? would like to use your location to find some cookies. Is that OK?"
});
}
return locationPermissionResponse === RESULTS.GRANTED;
@ -27,9 +28,9 @@ export const getCurrentPosition = () => {
return new Promise((resolve, reject) => {
askLocationPermission().then(granted => {
if (!granted) {
return reject('Permission was not given for location');
return reject("Permission was not given for location");
}
navigator.geolocation.getCurrentPosition(
Geolocation.getCurrentPosition(
(pos: Position) => {
emitter(pos), resolve(pos);
return pos;
@ -39,7 +40,7 @@ export const getCurrentPosition = () => {
},
{
enableHighAccuracy: true,
timeout: 5000,
timeout: 5000
}
);
});
@ -52,8 +53,8 @@ export const getPositionFromZip = async (zip: string) => {
const pos: any = {
coords: {
latitude,
longitude,
},
longitude
}
};
emitter(pos);
@ -62,14 +63,14 @@ export const getPositionFromZip = async (zip: string) => {
};
export const getLocation: () => Promise<Position> = async () => {
const currentZip = await AsyncStorage.getItem('zipcode');
const currentZip = await AsyncStorage.getItem("zipcode");
if (currentZip && currentZip !== 'usegps') {
if (currentZip && currentZip !== "usegps") {
return getPositionFromZip(currentZip);
} else {
AsyncStorage.setItem('zipcode', 'usegps');
AsyncStorage.setItem("zipcode", "usegps");
return getCurrentPosition().catch(error => {
AsyncStorage.removeItem('zipcode');
AsyncStorage.removeItem("zipcode");
throw error;
});
}

View file

@ -1,15 +1,15 @@
// @flow
import { withProps } from 'recompose';
import { emit } from '../streams/ImagesStream';
import { addImage, getImages } from '../apis/ImagesApi';
import AuthManager from '../AuthManager';
import { map } from 'ramda';
import { withProps } from "recompose";
import { emit } from "../streams/ImagesStream";
import { addImage, getImages } from "../apis/ImagesApi";
import AuthManager from "../AuthManager";
import { map } from "ramda";
export const withImages = withProps({
addImage: async ({ foodItemId, imageUri }) => {
try {
if (!AuthManager.user) {
throw new Error('You need to be logged in to add images');
throw new Error("You need to be logged in to add images");
}
const username = AuthManager.user.name;
@ -20,11 +20,11 @@ export const withImages = withProps({
url,
username,
date,
food_item_id: foodItemId,
food_item_id: foodItemId
});
} catch (error) {
// TODO error handling in the UI
console.log(error); // eslint-disable-line
console.error(error); // eslint-disable-line
}
},
getImages: async ({ foodItemId }) => {
@ -33,7 +33,7 @@ export const withImages = withProps({
map(emit, images);
} catch (error) {
// TODO error handling in the UI
console.log(error); // eslint-disable-line
console.error(error); // eslint-disable-line
}
}
},
});

View file

@ -1,26 +1,20 @@
// @flow
import withProps from 'recompose/withProps';
import mapPropsStream from 'recompose/mapPropsStream';
import compose from 'recompose/compose';
import Places$, { emitter as emitPlace } from '../streams/PlacesStream';
import FoodItems$ from '../streams/FoodItemsStream';
import { path } from 'ramda';
import { List } from 'immutable';
import { buildPlaceRecord } from '../records/PlaceRecord';
import { getPlaceDetails } from '../apis/GooglePlacesApi';
import { getSearch } from '../helpers/RouteHelpers';
import { withRouterContext } from './routeEnhancers';
import withProps from "recompose/withProps";
import mapPropsStream from "recompose/mapPropsStream";
import compose from "recompose/compose";
import Places$, { emitter as emitPlace } from "../streams/PlacesStream";
import FoodItems$ from "../streams/FoodItemsStream";
import { path } from "ramda";
import { List } from "immutable";
import { buildPlaceRecord } from "../records/PlaceRecord";
import { getPlaceDetails } from "../apis/GooglePlacesApi";
import { getSearch } from "../helpers/RouteHelpers";
import { withRouterContext } from "./routeEnhancers";
export const fetchPlaceDetails = async ({
distance,
placeId,
}: {
distance: number,
placeId: ?string,
}) => {
export const fetchPlaceDetails = async ({ distance, placeId }: { distance: number, placeId: ?string }) => {
const place = await getPlaceDetails({
distance,
placeId,
placeId
});
emitPlace(buildPlaceRecord(place));
};
@ -29,13 +23,13 @@ export const withPlaces = mapPropsStream(props$ =>
props$.combineLatest(Places$, (props, places) => {
return {
...props,
places,
places
};
})
);
export const withPlaceIdFromRoute = withProps((props: { match: { params: { id: string } } }) => {
const placeId = path(['match', 'params', 'id'], props);
const placeId = path(["match", "params", "id"], props);
return { placeId };
});
@ -51,7 +45,7 @@ export const withPlaceId = compose(
export const withPlaceActions = withProps(() => {
return {
emitPlace,
fetchPlaceDetails,
fetchPlaceDetails
};
});
@ -62,12 +56,12 @@ export const withPlace = compose(
if (!placeId) {
return {
place: null,
fetchPlaceDetails,
fetchPlaceDetails
};
}
return {
place: places && places.get(placeId),
fetchPlaceDetails,
fetchPlaceDetails
};
})
);
@ -79,7 +73,7 @@ export const withPlaceForFoodItem = compose(
return { place: null };
}
return {
place: places.get(foodItem.placeId),
place: places && places.get(foodItem.placeId)
};
})
);
@ -92,7 +86,7 @@ export const withFoodItemsForPlace = mapPropsStream(props$ =>
: List();
return {
...props,
foodItems,
foodItems
};
})
);

View file

@ -1,9 +1,9 @@
//@flow
import { withProps } from 'recompose';
import { setQuantity } from '../apis/QuantityApi';
import { emit as emitQuantity } from '../streams/QuantityStream';
import type { Quantity, QuantityResponse } from '../constants/QuantityConstants';
import { nth } from 'ramda';
import { withProps } from "recompose";
import { setQuantity } from "../apis/QuantityApi";
import { emit as emitQuantity } from "../streams/QuantityStream";
import type { Quantity, QuantityResponse } from "../constants/QuantityConstants";
import { nth } from "ramda";
export const withUpdateQuantity = withProps({
updateQuantity: async ({ foodItemId, quantity }: { foodItemId: string, quantity: Quantity }) => {
@ -12,7 +12,7 @@ export const withUpdateQuantity = withProps({
emitQuantity(newQuantity);
} catch (error) {
// todo - error states in food item detail page
console.log(error); // eslint-disable-line
console.error(error); // eslint-disable-line
}
}
},
});

View file

@ -1,32 +1,28 @@
import { memoize } from 'ramda';
import { memoizeWith, identity } from "ramda";
export const getZoomBox = memoize((foodItemsMap, coords) =>
export const getZoomBox = memoizeWith(identity, (foodItemsMap, coords) =>
foodItemsMap.reduce(
(prev, foodItem) => {
const minLat =
!prev.minLat || prev.minLat > foodItem.latitude ? foodItem.latitude : prev.minLat;
const minLat = !prev.minLat || prev.minLat > foodItem.latitude ? foodItem.latitude : prev.minLat;
const maxLat =
!prev.maxLat || prev.maxLat < foodItem.latitude ? foodItem.latitude : prev.maxLat;
const maxLat = !prev.maxLat || prev.maxLat < foodItem.latitude ? foodItem.latitude : prev.maxLat;
const minLng =
!prev.minLng || prev.minLng > foodItem.longitude ? foodItem.longitude : prev.minLng;
const minLng = !prev.minLng || prev.minLng > foodItem.longitude ? foodItem.longitude : prev.minLng;
const maxLng =
!prev.maxLng || prev.maxLng < foodItem.longitude ? foodItem.longitude : prev.maxLng;
const maxLng = !prev.maxLng || prev.maxLng < foodItem.longitude ? foodItem.longitude : prev.maxLng;
return {
minLat,
maxLat,
minLng,
maxLng,
maxLng
};
},
{
minLat: coords.latitude,
maxLat: coords.latitude,
minLng: coords.longitude,
maxLng: coords.longitude,
maxLng: coords.longitude
}
)
);

View file

@ -1,22 +1,22 @@
// @flow
import React from 'react';
import { View, Text, ScrollView, RefreshControl } from 'react-native';
import FoodItemTile from '../components/FoodItemTile';
import FoodItemList from '../components/FoodItemList';
import typeof FoodItemRecord from '../records/FoodItemRecord';
import { withFoodItemsAsSeq } from '../enhancers/foodItemEnhancers';
import { type SetSeq } from 'immutable';
import { compose, pure, withState, withHandlers, lifecycle } from 'recompose';
import { withFilter } from '../enhancers/filterEnhancers';
import { withRouterContext } from '../enhancers/routeEnhancers';
import FullScreenMessage from '../components/FullScreenMessage';
import React from "react";
import { View, Text, ScrollView, RefreshControl } from "react-native";
import FoodItemTile from "../components/FoodItemTile";
import FoodItemList from "../components/FoodItemList";
import typeof FoodItemRecord from "../records/FoodItemRecord";
import { withFoodItemsAsSeq } from "../enhancers/foodItemEnhancers";
import { type SetSeq } from "immutable";
import { compose, pure, withState, withHandlers, lifecycle } from "recompose";
import { withFilter } from "../enhancers/filterEnhancers";
import { withRouterContext } from "../enhancers/routeEnhancers";
import FullScreenMessage from "../components/FullScreenMessage";
type Props = {
foodItemsSeq: SetSeq<FoodItemRecord>,
isRefreshing: boolean,
onRefresh: () => Promise<any>,
onPulldown: () => {},
isFilterDirty: boolean,
isFilterDirty: boolean
};
const FoodList = (props: Props) => {
@ -36,7 +36,8 @@ const FoodList = (props: Props) => {
{!showNoResults && (
<ScrollView
style={{ flex: 1 }}
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}>
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}
>
<FoodItemList foodItemsSeq={foodItemsSeq}>
{(foodItem: FoodItemRecord) => <FoodItemTile key={foodItem.id} foodItem={foodItem} />}
</FoodItemList>
@ -51,23 +52,23 @@ export default compose(
withRouterContext,
withFoodItemsAsSeq,
withFilter,
withState('isRefreshing', 'setRefreshing', false),
withState("isRefreshing", "setRefreshing", false),
withHandlers({
onPulldown: ({ setRefreshing, onRefresh, router }) => async () => {
try {
setRefreshing(true);
await onRefresh();
} catch (error) {
console.log(error); // eslint-disable-line no-console
router.history.push('/zipcode');
console.error(error); // eslint-disable-line no-console
router.history.push("/zipcode");
} finally {
setTimeout(() => setRefreshing(false), 1000);
}
},
}
}),
lifecycle({
componentDidMount() {
this.props.onPulldown();
},
}
})
)(FoodList);

View file

@ -1,13 +1,13 @@
// @flow
import React from 'react';
import { View, Text, AsyncStorage } from 'react-native';
import React from "react";
import { View, Text, AsyncStorage } from "react-native";
// import atcCookieImage from '../imgs/atc-cookie-logo.png';
import { Link } from 'react-router-native';
import RouterButton from 'react-router-native-button';
import { compose, withHandlers, withState } from 'recompose';
import { withRouterContext } from '../enhancers/routeEnhancers';
import { Link } from "react-router-native";
import RouterButton from "react-router-native-button";
import { compose, withHandlers, withState } from "recompose";
import { withRouterContext } from "../enhancers/routeEnhancers";
import theme from '../ui-theme';
import theme from "../ui-theme";
type Props = {
skipIfAlreadyChosen: () => void,
@ -15,9 +15,9 @@ type Props = {
loading: boolean,
router: {
history: {
replace: (route: string) => void,
},
},
replace: (route: string) => void
}
}
};
const LandingPage = ({ skipIfAlreadyChosen, loading }: Props) => {
@ -29,18 +29,19 @@ const LandingPage = ({ skipIfAlreadyChosen, loading }: Props) => {
return (
<View
style={{
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
flex: 1,
height: '100%',
}}>
height: "100%"
}}
>
{/* <Image
source={atcCookieImage}
style={{ height: 320, marginBottom: 10 }}
resizeMode="contain"
/> */}
<Text style={{ fontSize: 24, marginBottom: 30, textAlign: 'center', width: 330 }}>
<Text style={{ fontSize: 24, marginBottom: 30, textAlign: "center", width: 330 }}>
We need to use your location to bring you the best experience possible.
</Text>
<View style={{ width: 275, marginBottom: 30 }}>
@ -57,15 +58,15 @@ const LandingPage = ({ skipIfAlreadyChosen, loading }: Props) => {
export default compose(
withRouterContext,
withState('loading', 'setLoading', true),
withState("loading", "setLoading", true),
withHandlers({
skipIfAlreadyChosen: (props: Props) => async () => {
const zipcode = await AsyncStorage.getItem('zipcode');
const zipcode = await AsyncStorage.getItem("zipcode");
if (zipcode) {
props.router.history.replace('/list/food');
props.router.history.replace("/list/food");
} else {
props.setLoading(false);
}
},
}
})
)(LandingPage);

View file

@ -1,33 +1,29 @@
// @flow
import React from 'react';
import { View, Text, Image, ScrollView } from 'react-native';
import theme, { palette } from '../ui-theme';
import { compose, pure, withState, withHandlers, lifecycle } from 'recompose';
import typeof PlaceRecord from '../records/PlaceRecord';
import {
withPlace,
withPlaceIdFromRoute,
withFoodItemsForPlace,
} from '../enhancers/placeEnhancers';
import Carousel from 'react-native-looped-carousel';
import CountBadge from '../components/CountBadge';
import { StrongText } from '../components/ItemTile';
import IconButton from '../components/IconButton';
import { type List } from 'immutable';
import typeof FoodItemRecord from '../records/FoodItemRecord';
import FoodItemTile from '../components/FoodItemTile';
import { openUrl } from '../helpers/linkHelpers';
import { routeWithQuery } from '../helpers/RouteHelpers';
import { Link } from 'react-router-native';
import React from "react";
import { View, Text, Image, ScrollView } from "react-native";
import theme, { palette } from "../ui-theme";
import { compose, pure, withState, withHandlers, lifecycle } from "recompose";
import typeof PlaceRecord from "../records/PlaceRecord";
import { withPlace, withPlaceIdFromRoute, withFoodItemsForPlace } from "../enhancers/placeEnhancers";
import Carousel from "react-native-looped-carousel";
import CountBadge from "../components/CountBadge";
import { StrongText } from "../components/ItemTile";
import IconButton from "../components/IconButton";
import { type List } from "immutable";
import typeof FoodItemRecord from "../records/FoodItemRecord";
import FoodItemTile from "../components/FoodItemTile";
import { openUrl } from "../helpers/linkHelpers";
import { routeWithQuery } from "../helpers/RouteHelpers";
import { Link } from "react-router-native";
const { placeDetails: style } = theme;
const stretchedStyle = { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0 };
const stretchedStyle = { position: "absolute", top: 0, left: 0, right: 0, bottom: 0 };
const contentTileStyle = {
backgroundColor: 'white',
backgroundColor: "white",
paddingLeft: 20,
paddingRight: 20,
paddingRight: 20
};
type Props = {
@ -37,7 +33,7 @@ type Props = {
setCurrentImage: (idx: number) => void,
viewOnMap: () => void,
fetchPlaceDetails: (arg: { distance: number, placeId: string }) => Promise<void>,
phoneCall: () => Promise<any>,
phoneCall: () => Promise<any>
};
const PlaceDetail = (props: Props) => {
@ -57,7 +53,7 @@ const PlaceDetail = (props: Props) => {
{photos.size > 1 && (
<Carousel autoplay={false} onAnimateNextPage={setCurrentImage} style={stretchedStyle}>
{photos.map(uri => (
<Image key={uri} style={{ flex: 1, resizeMode: 'stretch' }} source={{ uri }} />
<Image key={uri} style={{ flex: 1, resizeMode: "stretch" }} source={{ uri }} />
))}
</Carousel>
)}
@ -74,40 +70,36 @@ const PlaceDetail = (props: Props) => {
</View>
<View
style={{
flexDirection: 'column',
flexDirection: "column",
...contentTileStyle,
marginBottom: 10,
paddingTop: 5,
paddingBottom: 10,
}}>
<IconButton
glyph="favorite"
text="Add to Faves"
onPress={() => {}}
color={style.actionIconColor}
/>
paddingBottom: 10
}}
>
<IconButton glyph="favorite" text="Add to Faves" onPress={() => {}} color={style.actionIconColor} />
<IconButton glyph="phone" text="Call" onPress={phoneCall} color={style.actionIconColor} />
</View>
<View style={{ padding: 15, ...contentTileStyle }}>
<StrongText>Products</StrongText>
{!!foodItems &&
foodItems.map(foodItem => (
<FoodItemTile key={foodItem.id} foodItem={foodItem} place={place} />
))}
foodItems.map(foodItem => <FoodItemTile key={foodItem.id} foodItem={foodItem} place={place} />)}
{!foodItems ||
(!foodItems.size && (
<Link
to={routeWithQuery('/createFoodItem', {
routeTitle: 'Add a Food Item',
placeId: place.id,
})}>
to={routeWithQuery("/createFoodItem", {
routeTitle: "Add a Food Item",
placeId: place.id
})}
>
<Text
style={{
marginTop: 15,
marginBottom: 15,
fontSize: 16,
color: palette.accentColor,
}}>
color: palette.accentColor
}}
>
No products yet, add a new one.
</Text>
</Link>
@ -123,7 +115,7 @@ export default compose(
withPlaceIdFromRoute,
withPlace,
withFoodItemsForPlace,
withState('currentImage', 'setCurrentImage', 0),
withState("currentImage", "setCurrentImage", 0),
withHandlers({
viewOnMap: (props: Props) => () => {
const { place } = props;
@ -140,14 +132,14 @@ export default compose(
return;
}
openUrl(`tel:${props.place.phoneNumber}`);
},
}
}),
lifecycle({
componentDidMount() {
this.props.fetchPlaceDetails({
distance: this.props.place.distance,
placeId: this.props.place.id,
placeId: this.props.place.id
});
},
}
})
)(PlaceDetail);

View file

@ -1,14 +1,14 @@
// @flow
import React from 'react';
import { View, ScrollView, RefreshControl } from 'react-native';
import PlaceTile from '../components/PlaceTile';
import { compose, pure, withState, withHandlers, lifecycle } from 'recompose';
import { withFoodItemsGroupedByPlace } from '../enhancers/foodItemEnhancers';
import { withPlaces } from '../enhancers/placeEnhancers';
import { Map, List } from 'immutable';
import typeof FoodItemRecord from '../records/FoodItemRecord';
import typeof PlaceRecord from '../records/PlaceRecord';
import { withRouterContext } from '../enhancers/routeEnhancers';
import React from "react";
import { View, ScrollView, RefreshControl } from "react-native";
import PlaceTile from "../components/PlaceTile";
import { compose, pure, withState, withHandlers, lifecycle } from "recompose";
import { withFoodItemsGroupedByPlace } from "../enhancers/foodItemEnhancers";
import { withPlaces } from "../enhancers/placeEnhancers";
import { Map, List } from "immutable";
import typeof FoodItemRecord from "../records/FoodItemRecord";
import typeof PlaceRecord from "../records/PlaceRecord";
import { withRouterContext } from "../enhancers/routeEnhancers";
type Props = {
foodItemsByPlace: Map<string, Map<string, FoodItemRecord>>,
@ -16,7 +16,7 @@ type Props = {
onRefresh: () => Promise<any>,
onPulldown: () => {},
isRefreshing: boolean,
viewMode: string,
viewMode: string
};
const byDistance = (left: PlaceRecord, right: PlaceRecord) => left.distance - right.distance;
@ -25,8 +25,7 @@ const PlacesList = ({ foodItemsByPlace = Map(), places, isRefreshing, onPulldown
const refreshing = isRefreshing || !places;
return (
<View>
<ScrollView
refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}>
<ScrollView refreshControl={<RefreshControl refreshing={refreshing} onRefresh={onPulldown} />}>
{places &&
places
.sort(byDistance)
@ -45,23 +44,23 @@ export default compose(
withFoodItemsGroupedByPlace,
withPlaces,
withRouterContext,
withState('isRefreshing', 'setRefreshing', false),
withState("isRefreshing", "setRefreshing", false),
withHandlers({
onPulldown: ({ setRefreshing, onRefresh, router }) => async () => {
try {
setRefreshing(true);
await onRefresh();
} catch (error) {
console.log(error); // eslint-disable-line no-console
router.history.push('/zipcode');
console.error(error); // eslint-disable-line no-console
router.history.push("/zipcode");
} finally {
setTimeout(() => setRefreshing(false), 1000);
}
},
}
}),
lifecycle({
componentDidMount() {
this.props.onPulldown();
},
}
})
)(PlacesList);

View file

@ -1,12 +1,12 @@
// @flow
import React from 'react';
import { View, Text, Switch, TextInput, AsyncStorage } from 'react-native';
import IconButton from '../components/IconButton';
import { palette } from '../ui-theme';
import { compose, withState, withHandlers, lifecycle } from 'recompose';
import { withRouterContext } from '../enhancers/routeEnhancers';
import { getLocation } from '../apis/PositionApi';
import Snackbar from 'react-native-snackbar';
import React from "react";
import { View, Text, Switch, TextInput, AsyncStorage } from "react-native";
import IconButton from "../components/IconButton";
import { palette } from "../ui-theme";
import { compose, withState, withHandlers, lifecycle } from "recompose";
import { withRouterContext } from "../enhancers/routeEnhancers";
import { getLocation } from "../apis/PositionApi";
import Snackbar from "react-native-snackbar";
type Props = {
zipcode: ?string,
@ -19,10 +19,10 @@ type Props = {
toggleGPS: (a: boolean) => Promise<void>,
router: {
history: {
replace: (route: string) => void,
replace: (route: string) => void
}
},
},
isLoggedIn: boolean,
isLoggedIn: boolean
};
export const ProfilePage = (props: Props) => {
@ -34,25 +34,26 @@ export const ProfilePage = (props: Props) => {
error,
toggleGPS,
router: { history },
isLoggedIn,
isLoggedIn
} = props;
const usingGPS = zipcode === 'usegps';
const usingGPS = zipcode === "usegps";
return (
<View style={{ flex: 1, flexDirection: 'column', padding: 15 }}>
<Text style={{ fontSize: 32, marginBottom: 20, color: '#555555' }}>Profile</Text>
<View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
<View style={{ flex: 1, flexDirection: "column", padding: 15 }}>
<Text style={{ fontSize: 32, marginBottom: 20, color: "#555555" }}>Profile</Text>
<View style={{ flexDirection: "row", justifyContent: "space-between" }}>
<Text style={{ fontSize: 18 }}>Use My Location</Text>
<Switch value={usingGPS} onValueChange={toggleGPS} />
</View>
{!usingGPS && (
<View style={{ flexDirection: 'row' }}>
<View style={{ flexDirection: "row" }}>
<View
style={{
flex: 1,
flexDirection: 'column',
justifyContent: 'flex-end',
height: 60,
}}>
flexDirection: "column",
justifyContent: "flex-end",
height: 60
}}
>
<TextInput
editable={!loading}
value={zipcode}
@ -61,19 +62,19 @@ export const ProfilePage = (props: Props) => {
onEndEditing={saveZip}
keyboardType="numeric"
style={{
fontSize: 18,
fontSize: 18
}}
/>
</View>
</View>
)}
{!!error && <Text style={{ fontSize: 16, color: 'red' }}>{error}</Text>}
{!!error && <Text style={{ fontSize: 16, color: "red" }}>{error}</Text>}
<View style={{ marginTop: 20 }}>
{isLoggedIn && (
<IconButton
glyph="exit-to-app"
text="Logout"
onPress={() => history.push('/logout')}
onPress={() => history.push("/logout")}
color={palette.accentColor}
textStyle={{ color: palette.accentColor }}
/>
@ -82,7 +83,7 @@ export const ProfilePage = (props: Props) => {
<IconButton
glyph="exit-to-app"
text="Login"
onPress={() => history.push('/login')}
onPress={() => history.push("/login")}
color={palette.accentColor}
textStyle={{ color: palette.accentColor }}
/>
@ -94,32 +95,32 @@ export const ProfilePage = (props: Props) => {
export default compose(
withRouterContext,
withState('loading', 'setLoading', false),
withState('zipcode', 'setZip', null),
withState('error', 'setError', ''),
withState("loading", "setLoading", false),
withState("zipcode", "setZip", null),
withState("error", "setError", ""),
withHandlers({
saveZip: (props: Props) => async () => {
props.setError('');
props.setError("");
if (!props.zipcode || props.zipcode.length !== 5) {
props.setError('Zipcode must be five digits');
props.setError("Zipcode must be five digits");
return;
}
props.setLoading(true);
await AsyncStorage.setItem('zipcode', props.zipcode);
await AsyncStorage.setItem("zipcode", props.zipcode);
props.setLoading(false);
getLocation();
Snackbar.show({ title: 'Zipcode updated.' });
},
Snackbar.show({ title: "Zipcode updated." });
}
}),
withHandlers({
toggleGPS: (props: Props) => async (useGPS: boolean) => {
try {
props.setLoading(true);
props.setZip(useGPS ? 'usegps' : '');
await AsyncStorage.setItem('zipcode', 'usegps');
props.setZip(useGPS ? "usegps" : "");
await AsyncStorage.setItem("zipcode", "usegps");
} catch (error) {
console.log(error); //eslint-disable-line no-console
props.setZip(props.zipcode || '');
console.error(error); //eslint-disable-line no-console
props.setZip(props.zipcode || "");
} finally {
props.setLoading(false);
}
@ -127,17 +128,17 @@ export default compose(
getZipcode: ({ setLoading, setZip }) => async () => {
setLoading(true);
try {
setZip(await AsyncStorage.getItem('zipcode'));
setZip(await AsyncStorage.getItem("zipcode"));
} catch (error) {
console.log(error); //eslint-disable-line no-console
console.error(error); //eslint-disable-line no-console
} finally {
setLoading(false);
}
},
}
}),
lifecycle({
componentDidMount() {
this.props.getZipcode();
},
}
})
)(ProfilePage);

View file

@ -1,15 +1,15 @@
//@flow
import { ReplaySubject, Observable } from 'rxjs';
import FoodItemRecord, { createFoodItem } from '../records/FoodItemRecord';
import { setById } from '../helpers/ImmutableHelpers';
import { Map } from 'immutable';
import location$ from './LocationStream';
import { getFoodItems, type FoodItemsForLocation } from '../apis/FoodItemsApi';
import Filter$ from './FilterStream';
import Quantity$ from './QuantityStream';
import type { QuantityFragment } from '../constants/QuantityConstants';
import { type ImageFragment } from '../records/ImageRecord';
import Image$ from './ImagesStream';
import { ReplaySubject, Observable } from "rxjs";
import FoodItemRecord, { createFoodItem } from "../records/FoodItemRecord";
import { setById } from "../helpers/ImmutableHelpers";
import { Map } from "immutable";
import location$ from "./LocationStream";
import { getFoodItems, type FoodItemsForLocation } from "../apis/FoodItemsApi";
import Filter$ from "./FilterStream";
import Quantity$ from "./QuantityStream";
import type { QuantityFragment } from "../constants/QuantityConstants";
import { type ImageFragment } from "../records/ImageRecord";
import Image$ from "./ImagesStream";
const foodItemSubject: ReplaySubject<FoodItemRecord> = new ReplaySubject();
@ -49,10 +49,7 @@ export default fetchedFoodItems$
})
.combineLatest(
Quantity$,
(
foodItems: ?Map<string, FoodItemRecord>,
quantitiesFromStream: Map<string, QuantityFragment>
) => {
(foodItems: ?Map<string, FoodItemRecord>, quantitiesFromStream: Map<string, QuantityFragment>) => {
if (foodItems) {
return foodItems.mergeDeepWith(
(foodItem, foodItemQuantities) => foodItem.merge(foodItemQuantities),
@ -68,7 +65,7 @@ export default fetchedFoodItems$
return foodItems.mergeDeepWith(
// $FlowFixMe
(foodItem: FoodItemRecord, imageFragment: ImageFragment) => {
return foodItem.set('images', imageFragment.images);
return foodItem.set("images", imageFragment.images);
},
latestFromImages$
);

View file

@ -1,17 +1,17 @@
// @flow
import { ReplaySubject, Observable } from 'rxjs';
import { buildPlaceRecord } from '../records/PlaceRecord';
import { Map } from 'immutable';
import { findNearbyPlaces, getPlaceDetails } from '../apis/GooglePlacesApi';
import { path } from 'ramda';
import { type GooglePlaceObj } from '../records/PlaceRecord';
import { setById } from '../helpers/ImmutableHelpers';
import location$ from './LocationStream';
import filter$ from './FilterStream';
import FilterRecord from '../records/FilterRecord';
import foodItems$ from './FoodItemsStream';
import PlaceRecord from '../records/PlaceRecord';
import geodist from 'geodist';
import { ReplaySubject, Observable } from "rxjs";
import { buildPlaceRecord } from "../records/PlaceRecord";
import { Map } from "immutable";
import { findNearbyPlaces, getPlaceDetails } from "../apis/GooglePlacesApi";
import { path } from "ramda";
import { type GooglePlaceObj } from "../records/PlaceRecord";
import { setById } from "../helpers/ImmutableHelpers";
import location$ from "./LocationStream";
import filter$ from "./FilterStream";
import FilterRecord from "../records/FilterRecord";
import foodItems$ from "./FoodItemsStream";
import PlaceRecord from "../records/PlaceRecord";
import geodist from "geodist";
const getGeoDist = begin => end => geodist(begin, end, { exact: true });
@ -25,7 +25,7 @@ filter$.subscribe(() => emitter(null));
foodItems$
.mergeMap((foodItems = Map()) => Observable.from(foodItems.toArray()))
.mergeMap(getPlaceDetails)
.mergeMap(([foodItemId, foodItem]) => getPlaceDetails(foodItem))
.map(buildPlaceRecord)
.subscribe(emitter);
@ -36,7 +36,7 @@ location$
return findNearbyPlaces({
location,
radius: filter.radius,
search: filter.search,
search: filter.search
});
})
.map((val: { location: ?Position, places: ?Array<GooglePlaceObj> }) => {
@ -44,13 +44,13 @@ location$
return;
}
const { places } = val;
const coords = path(['location', 'coords'], val) || {};
const coords = path(["location", "coords"], val) || {};
const getDist = getGeoDist({ lat: coords.latitude, lon: coords.longitude });
return (places || []).map((place: GooglePlaceObj) =>
buildPlaceRecord({
...place,
distance: getDist({ lat: place.geometry.location.lat, lon: place.geometry.location.lng }),
distance: getDist({ lat: place.geometry.location.lat, lon: place.geometry.location.lng })
})
);
})

17
metro.config.js Normal file
View file

@ -0,0 +1,17 @@
/**
* Metro configuration for React Native
* https://github.com/facebook/react-native
*
* @format
*/
module.exports = {
transformer: {
getTransformOptions: async () => ({
transform: {
experimentalImportSupport: false,
inlineRequires: false,
},
}),
},
};

View file

@ -6,48 +6,51 @@
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest",
"lint": "flow && eslint js",
"android:dev": "react-native run-android && react-native start",
"android:release": "cd android && ./gradlew assembleRelease"
},
"rnpm": {
"assets": [
"static/fonts"
]
"android:bundle": "react-native bundle --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle",
"android:release": "yarn android:bundle && cd android && ./gradlew bundleRelease",
"android:bundle-release": "yarn android:bundle && yarn android:release",
"android:bundletool": "java -jar ./android/bundletool-0.10.2.jar",
"android:build-apks": "yarn android:bundletool build-apks --bundle=android/app/build/outputs/bundle/release/app.aab --ks=android/app/atc-release-key.keystore --ks-key-alias=atc-key-alias --ks-pass=pass:bigjohncookies --output=/tmp/app.apks",
"android:install-apks": "yarn android:bundletool install-apks --apks=/tmp/app.apks"
},
"dependencies": {
"babel-preset-es2015": "^6.24.0",
"geodist": "^0.2.1",
"immutable": "^3.8.1",
"moment": "^2.19.2",
"query-string": "^5.0.1",
"ramda": "^0.24.1",
"react": "16.6.1",
"react-native": "0.57.5",
"react-native-auth0": "^1.3.0",
"react-native-google-places": "3.1.1",
"react-native-image-picker": "^0.27",
"react-native-loading-spinner-overlay": "^0.5.2",
"react-native-looped-carousel": "^0.1.5",
"react-native-maps": "^0.24",
"react-native-material-ui": "1.22.0",
"react-native-snackbar": "^0.5.3",
"react-native-vector-icons": "6.0.2",
"react-router-native": "^4.3.0",
"immutable": "^4.0.0-rc.12",
"moment": "^2.24.0",
"query-string": "^6.8.3",
"ramda": "^0.26.1",
"react": "16.8.6",
"react-native": "0.60.5",
"react-native-auth0": "^1.5.0",
"react-native-geolocation-service": "^3.1.0",
"react-native-google-places": "^3.1.2",
"react-native-image-picker": "^1.1.0",
"react-native-loading-spinner-overlay": "^1.0.1",
"react-native-looped-carousel": "^0.1.13",
"react-native-maps": "^0.25.0",
"react-native-material-ui": "^1.30.1",
"react-native-snackbar": "^2.0.2",
"react-native-vector-icons": "^6.6.0",
"react-router-native": "^4",
"react-router-native-button": "^1.2.0",
"recompose": "0.30.0",
"rxjs": "^5.4.2"
"recompose": "^0.30.0",
"rxjs": "^5"
},
"devDependencies": {
"@babel/core": "^7.5.0",
"@babel/runtime": "^7.5.0",
"@react-native-community/eslint-config": "^0.0.3",
"babel-jest": "^24.1.0",
"jest": "^24.1.0",
"metro-react-native-babel-preset": "0.54.1",
"react-test-renderer": "16.8.6",
"babel-eslint": "^8.1.1",
"babel-jest": "18.0.0",
"babel-preset-react-native": "1.9.1",
"eslint": "^5",
"eslint-plugin-react": "^7",
"eslint-plugin-react-native": "^2.2.1",
"flow-bin": "0.38",
"jest": "18.1.0",
"jshint": "^2.9.4",
"react-test-renderer": "15.4.2"
"flow-bin": "^0.92.0",
"jshint": "^2.9.4"
},
"jest": {
"preset": "react-native"

3676
yarn.lock

File diff suppressed because it is too large Load diff