유희정

add front code

Showing 73 changed files with 3760 additions and 0 deletions
1 +
2 +[android]
3 + target = Google Inc.:Google APIs:23
4 +
5 +[maven_repositories]
6 + central = https://repo1.maven.org/maven2
1 +module.exports = {
2 + root: true,
3 + extends: '@react-native-community',
4 +};
1 +[ignore]
2 +; We fork some components by platform
3 +.*/*[.]android.js
4 +
5 +; Ignore "BUCK" generated dirs
6 +<PROJECT_ROOT>/\.buckd/
7 +
8 +; Ignore polyfills
9 +node_modules/react-native/Libraries/polyfills/.*
10 +
11 +; These should not be required directly
12 +; require from fbjs/lib instead: require('fbjs/lib/warning')
13 +node_modules/warning/.*
14 +
15 +; Flow doesn't support platforms
16 +.*/Libraries/Utilities/LoadingView.js
17 +
18 +[untyped]
19 +.*/node_modules/@react-native-community/cli/.*/.*
20 +
21 +[include]
22 +
23 +[libs]
24 +node_modules/react-native/Libraries/react-native/react-native-interface.js
25 +node_modules/react-native/flow/
26 +
27 +[options]
28 +emoji=true
29 +
30 +esproposal.optional_chaining=enable
31 +esproposal.nullish_coalescing=enable
32 +
33 +module.file_ext=.js
34 +module.file_ext=.json
35 +module.file_ext=.ios.js
36 +
37 +munge_underscores=true
38 +
39 +module.name_mapper='^react-native$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation'
40 +module.name_mapper='^react-native/\(.*\)$' -> '<PROJECT_ROOT>/node_modules/react-native/\1'
41 +module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
42 +
43 +suppress_type=$FlowIssue
44 +suppress_type=$FlowFixMe
45 +suppress_type=$FlowFixMeProps
46 +suppress_type=$FlowFixMeState
47 +
48 +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
49 +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
50 +suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
51 +
52 +[lints]
53 +sketchy-null-number=warn
54 +sketchy-null-mixed=warn
55 +sketchy-number=warn
56 +untyped-type-import=warn
57 +nonstrict-import=warn
58 +deprecated-type=warn
59 +unsafe-getters-setters=warn
60 +inexact-spread=warn
61 +unnecessary-invariant=warn
62 +signature-verification-failure=warn
63 +deprecated-utility=error
64 +
65 +[strict]
66 +deprecated-type
67 +nonstrict-import
68 +sketchy-null
69 +unclear-type
70 +unsafe-getters-setters
71 +untyped-import
72 +untyped-type-import
73 +
74 +[version]
75 +^0.105.0
1 +# OSX
2 +#
3 +.DS_Store
4 +
5 +# Xcode
6 +#
7 +build/
8 +*.pbxuser
9 +!default.pbxuser
10 +*.mode1v3
11 +!default.mode1v3
12 +*.mode2v3
13 +!default.mode2v3
14 +*.perspectivev3
15 +!default.perspectivev3
16 +xcuserdata
17 +*.xccheckout
18 +*.moved-aside
19 +DerivedData
20 +*.hmap
21 +*.ipa
22 +*.xcuserstate
23 +
24 +# Android/IntelliJ
25 +#
26 +build/
27 +.idea
28 +.gradle
29 +local.properties
30 +*.iml
31 +
32 +# node.js
33 +#
34 +node_modules/
35 +npm-debug.log
36 +yarn-error.log
37 +
38 +# BUCK
39 +buck-out/
40 +\.buckd/
41 +*.keystore
42 +!debug.keystore
43 +
44 +# fastlane
45 +#
46 +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
47 +# screenshots whenever they are needed.
48 +# For more information about the recommended setup visit:
49 +# https://docs.fastlane.tools/best-practices/source-control/
50 +
51 +*/fastlane/report.xml
52 +*/fastlane/Preview.html
53 +*/fastlane/screenshots
54 +
55 +# Bundle artifact
56 +*.jsbundle
57 +
58 +# CocoaPods
59 +/ios/Pods/
1 +module.exports = {
2 + bracketSpacing: false,
3 + jsxBracketSameLine: true,
4 + singleQuote: true,
5 + trailingComma: 'all',
6 +};
1 +{}
...\ No newline at end of file ...\ No newline at end of file
1 +import React, { Component } from 'react';
2 +import { StyleSheet, Text, View } from 'react-native';
3 +import { createAppContainer } from 'react-navigation';
4 +import { createStackNavigator } from 'react-navigation-stack'
5 +// import MainScreen from './components/MainScreen';
6 +import Login from './source/Login';
7 +import MainScreen from './source/MainScreen';
8 +import {checkUser} from './source/component/DBhelper'
9 +
10 +// const AppStackNavigator = createStackNavigator({
11 +// Main:{
12 +// screen: MainScreen // MainScreen 컴포넌트를 네비게이터에 등록
13 +// }
14 +// });
15 +
16 +// export default createAppContainer(AppStackNavigator);
17 +
18 +var initialName = ''
19 +
20 +if(checkUser() == true){
21 + initialName = 'MainScreen'
22 +}
23 +else initialName = 'Login'
24 +
25 +const MainNavigator = createStackNavigator({
26 + Login : {screen: Login},
27 + MainScreen : {screen:MainScreen},
28 +},
29 + {initialRouteName: initialName,headerMode:'none'}
30 +);
31 +
32 +const App = createAppContainer(MainNavigator);
33 +
34 +export default App;
1 +/**
2 + * @format
3 + */
4 +
5 +import 'react-native';
6 +import React from 'react';
7 +import App from '../App';
8 +
9 +// Note: test renderer must be required after react-native.
10 +import renderer from 'react-test-renderer';
11 +
12 +it('renders correctly', () => {
13 + renderer.create(<App />);
14 +});
1 +# To learn about Buck see [Docs](https://buckbuild.com/).
2 +# To run your application with Buck:
3 +# - install Buck
4 +# - `npm start` - to start the packager
5 +# - `cd android`
6 +# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
7 +# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
8 +# - `buck install -r android/app` - compile, install and run application
9 +#
10 +
11 +load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
12 +
13 +lib_deps = []
14 +
15 +create_aar_targets(glob(["libs/*.aar"]))
16 +
17 +create_jar_targets(glob(["libs/*.jar"]))
18 +
19 +android_library(
20 + name = "all-libs",
21 + exported_deps = lib_deps,
22 +)
23 +
24 +android_library(
25 + name = "app-code",
26 + srcs = glob([
27 + "src/main/java/**/*.java",
28 + ]),
29 + deps = [
30 + ":all-libs",
31 + ":build_config",
32 + ":res",
33 + ],
34 +)
35 +
36 +android_build_config(
37 + name = "build_config",
38 + package = "com.testproject",
39 +)
40 +
41 +android_resource(
42 + name = "res",
43 + package = "com.testproject",
44 + res = "src/main/res",
45 +)
46 +
47 +android_binary(
48 + name = "app",
49 + keystore = "//android/keystores:debug",
50 + manifest = "src/main/AndroidManifest.xml",
51 + package_type = "debug",
52 + deps = [
53 + ":app-code",
54 + ],
55 +)
1 +apply plugin: "com.android.application"
2 +
3 +import com.android.build.OutputFile
4 +
5 +/**
6 + * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
7 + * and bundleReleaseJsAndAssets).
8 + * These basically call `react-native bundle` with the correct arguments during the Android build
9 + * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
10 + * bundle directly from the development server. Below you can see all the possible configurations
11 + * and their defaults. If you decide to add a configuration block, make sure to add it before the
12 + * `apply from: "../../node_modules/react-native/react.gradle"` line.
13 + *
14 + * project.ext.react = [
15 + * // the name of the generated asset file containing your JS bundle
16 + * bundleAssetName: "index.android.bundle",
17 + *
18 + * // the entry file for bundle generation
19 + * entryFile: "index.android.js",
20 + *
21 + * // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
22 + * bundleCommand: "ram-bundle",
23 + *
24 + * // whether to bundle JS and assets in debug mode
25 + * bundleInDebug: false,
26 + *
27 + * // whether to bundle JS and assets in release mode
28 + * bundleInRelease: true,
29 + *
30 + * // whether to bundle JS and assets in another build variant (if configured).
31 + * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
32 + * // The configuration property can be in the following formats
33 + * // 'bundleIn${productFlavor}${buildType}'
34 + * // 'bundleIn${buildType}'
35 + * // bundleInFreeDebug: true,
36 + * // bundleInPaidRelease: true,
37 + * // bundleInBeta: true,
38 + *
39 + * // whether to disable dev mode in custom build variants (by default only disabled in release)
40 + * // for example: to disable dev mode in the staging build type (if configured)
41 + * devDisabledInStaging: true,
42 + * // The configuration property can be in the following formats
43 + * // 'devDisabledIn${productFlavor}${buildType}'
44 + * // 'devDisabledIn${buildType}'
45 + *
46 + * // the root of your project, i.e. where "package.json" lives
47 + * root: "../../",
48 + *
49 + * // where to put the JS bundle asset in debug mode
50 + * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
51 + *
52 + * // where to put the JS bundle asset in release mode
53 + * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
54 + *
55 + * // where to put drawable resources / React Native assets, e.g. the ones you use via
56 + * // require('./image.png')), in debug mode
57 + * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
58 + *
59 + * // where to put drawable resources / React Native assets, e.g. the ones you use via
60 + * // require('./image.png')), in release mode
61 + * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
62 + *
63 + * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
64 + * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
65 + * // date; if you have any other folders that you want to ignore for performance reasons (gradle
66 + * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
67 + * // for example, you might want to remove it from here.
68 + * inputExcludes: ["android/**", "ios/**"],
69 + *
70 + * // override which node gets called and with what additional arguments
71 + * nodeExecutableAndArgs: ["node"],
72 + *
73 + * // supply additional arguments to the packager
74 + * extraPackagerArgs: []
75 + * ]
76 + */
77 +
78 +project.ext.react = [
79 + entryFile: "index.js",
80 + enableHermes: false, // clean and rebuild if changing
81 +]
82 +
83 +apply from: "../../node_modules/react-native/react.gradle"
84 +
85 +/**
86 + * Set this to true to create two separate APKs instead of one:
87 + * - An APK that only works on ARM devices
88 + * - An APK that only works on x86 devices
89 + * The advantage is the size of the APK is reduced by about 4MB.
90 + * Upload all the APKs to the Play Store and people will download
91 + * the correct one based on the CPU architecture of their device.
92 + */
93 +def enableSeparateBuildPerCPUArchitecture = false
94 +
95 +/**
96 + * Run Proguard to shrink the Java bytecode in release builds.
97 + */
98 +def enableProguardInReleaseBuilds = false
99 +
100 +/**
101 + * The preferred build flavor of JavaScriptCore.
102 + *
103 + * For example, to use the international variant, you can use:
104 + * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
105 + *
106 + * The international variant includes ICU i18n library and necessary data
107 + * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
108 + * give correct results when using with locales other than en-US. Note that
109 + * this variant is about 6MiB larger per architecture than default.
110 + */
111 +def jscFlavor = 'org.webkit:android-jsc:+'
112 +
113 +/**
114 + * Whether to enable the Hermes VM.
115 + *
116 + * This should be set on project.ext.react and mirrored here. If it is not set
117 + * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
118 + * and the benefits of using Hermes will therefore be sharply reduced.
119 + */
120 +def enableHermes = project.ext.react.get("enableHermes", false);
121 +
122 +android {
123 + compileSdkVersion rootProject.ext.compileSdkVersion
124 +
125 + compileOptions {
126 + sourceCompatibility JavaVersion.VERSION_1_8
127 + targetCompatibility JavaVersion.VERSION_1_8
128 + }
129 +
130 + defaultConfig {
131 + applicationId "com.testproject"
132 + minSdkVersion rootProject.ext.minSdkVersion
133 + targetSdkVersion rootProject.ext.targetSdkVersion
134 + versionCode 1
135 + versionName "1.0"
136 + }
137 + splits {
138 + abi {
139 + reset()
140 + enable enableSeparateBuildPerCPUArchitecture
141 + universalApk false // If true, also generate a universal APK
142 + include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
143 + }
144 + }
145 + signingConfigs {
146 + debug {
147 + storeFile file('debug.keystore')
148 + storePassword 'android'
149 + keyAlias 'androiddebugkey'
150 + keyPassword 'android'
151 + }
152 + }
153 + buildTypes {
154 + debug {
155 + signingConfig signingConfigs.debug
156 + }
157 + release {
158 + // Caution! In production, you need to generate your own keystore file.
159 + // see https://facebook.github.io/react-native/docs/signed-apk-android.
160 + signingConfig signingConfigs.debug
161 + minifyEnabled enableProguardInReleaseBuilds
162 + proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
163 + }
164 + }
165 + // applicationVariants are e.g. debug, release
166 + applicationVariants.all { variant ->
167 + variant.outputs.each { output ->
168 + // For each separate APK per architecture, set a unique version code as described here:
169 + // https://developer.android.com/studio/build/configure-apk-splits.html
170 + def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
171 + def abi = output.getFilter(OutputFile.ABI)
172 + if (abi != null) { // null for the universal-debug, universal-release variants
173 + output.versionCodeOverride =
174 + versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
175 + }
176 +
177 + }
178 + }
179 +}
180 +
181 +dependencies {
182 + implementation fileTree(dir: "libs", include: ["*.jar"])
183 + implementation "com.facebook.react:react-native:+" // From node_modules
184 +
185 + if (enableHermes) {
186 + def hermesPath = "../../node_modules/hermes-engine/android/";
187 + debugImplementation files(hermesPath + "hermes-debug.aar")
188 + releaseImplementation files(hermesPath + "hermes-release.aar")
189 + } else {
190 + implementation jscFlavor
191 + }
192 +}
193 +
194 +// Run this once to be able to run the application with BUCK
195 +// puts all compile dependencies into folder libs for BUCK to use
196 +task copyDownloadableDepsToLibs(type: Copy) {
197 + from configurations.compile
198 + into 'libs'
199 +}
200 +
201 +apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
1 +"""Helper definitions to glob .aar and .jar targets"""
2 +
3 +def create_aar_targets(aarfiles):
4 + for aarfile in aarfiles:
5 + name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6 + lib_deps.append(":" + name)
7 + android_prebuilt_aar(
8 + name = name,
9 + aar = aarfile,
10 + )
11 +
12 +def create_jar_targets(jarfiles):
13 + for jarfile in jarfiles:
14 + name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15 + lib_deps.append(":" + name)
16 + prebuilt_jar(
17 + name = name,
18 + binary_jar = jarfile,
19 + )
No preview for this file type
1 +# Add project specific ProGuard rules here.
2 +# By default, the flags in this file are appended to flags specified
3 +# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 +# You can edit the include path and order by changing the proguardFiles
5 +# directive in build.gradle.
6 +#
7 +# For more details, see
8 +# http://developer.android.com/guide/developing/tools/proguard.html
9 +
10 +# Add any project specific keep options here:
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 + xmlns:tools="http://schemas.android.com/tools">
4 +
5 + <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
6 +
7 + <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
8 +</manifest>
1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2 + package="com.testproject">
3 +
4 + <uses-permission android:name="android.permission.INTERNET" />
5 +
6 + <application
7 + android:name=".MainApplication"
8 + android:label="@string/app_name"
9 + android:icon="@mipmap/ic_launcher"
10 + android:roundIcon="@mipmap/ic_launcher_round"
11 + android:allowBackup="false"
12 + android:theme="@style/AppTheme">
13 + <activity
14 + android:name=".MainActivity"
15 + android:label="@string/app_name"
16 + android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
17 + android:windowSoftInputMode="adjustResize">
18 + <intent-filter>
19 + <action android:name="android.intent.action.MAIN" />
20 + <category android:name="android.intent.category.LAUNCHER" />
21 + </intent-filter>
22 + </activity>
23 + <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
24 + </application>
25 +
26 +</manifest>
1 +package com.testproject;
2 +
3 +import com.facebook.react.ReactActivity;
4 +
5 +public class MainActivity extends ReactActivity {
6 +
7 + /**
8 + * Returns the name of the main component registered from JavaScript. This is used to schedule
9 + * rendering of the component.
10 + */
11 + @Override
12 + protected String getMainComponentName() {
13 + return "TestProject";
14 + }
15 +}
1 +package com.testproject;
2 +
3 +import android.app.Application;
4 +import android.content.Context;
5 +import com.facebook.react.PackageList;
6 +import com.facebook.react.ReactApplication;
7 +import com.facebook.react.ReactNativeHost;
8 +import com.facebook.react.ReactPackage;
9 +import com.facebook.soloader.SoLoader;
10 +import java.lang.reflect.InvocationTargetException;
11 +import java.util.List;
12 +
13 +public class MainApplication extends Application implements ReactApplication {
14 +
15 + private final ReactNativeHost mReactNativeHost =
16 + new ReactNativeHost(this) {
17 + @Override
18 + public boolean getUseDeveloperSupport() {
19 + return BuildConfig.DEBUG;
20 + }
21 +
22 + @Override
23 + protected List<ReactPackage> getPackages() {
24 + @SuppressWarnings("UnnecessaryLocalVariable")
25 + List<ReactPackage> packages = new PackageList(this).getPackages();
26 + // Packages that cannot be autolinked yet can be added manually here, for example:
27 + // packages.add(new MyReactNativePackage());
28 + return packages;
29 + }
30 +
31 + @Override
32 + protected String getJSMainModuleName() {
33 + return "index";
34 + }
35 + };
36 +
37 + @Override
38 + public ReactNativeHost getReactNativeHost() {
39 + return mReactNativeHost;
40 + }
41 +
42 + @Override
43 + public void onCreate() {
44 + super.onCreate();
45 + SoLoader.init(this, /* native exopackage */ false);
46 + initializeFlipper(this); // Remove this line if you don't want Flipper enabled
47 + }
48 +
49 + /**
50 + * Loads Flipper in React Native templates.
51 + *
52 + * @param context
53 + */
54 + private static void initializeFlipper(Context context) {
55 + if (BuildConfig.DEBUG) {
56 + try {
57 + /*
58 + We use reflection here to pick up the class that initializes Flipper,
59 + since Flipper library is not available in release mode
60 + */
61 + Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
62 + aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
63 + } catch (ClassNotFoundException e) {
64 + e.printStackTrace();
65 + } catch (NoSuchMethodException e) {
66 + e.printStackTrace();
67 + } catch (IllegalAccessException e) {
68 + e.printStackTrace();
69 + } catch (InvocationTargetException e) {
70 + e.printStackTrace();
71 + }
72 + }
73 + }
74 +}
1 +<resources>
2 + <string name="app_name">TestProject</string>
3 +</resources>
1 +<resources>
2 +
3 + <!-- Base application theme. -->
4 + <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
5 + <!-- Customize your theme here. -->
6 + <item name="android:textColor">#000000</item>
7 + </style>
8 +
9 +</resources>
1 +// Top-level build file where you can add configuration options common to all sub-projects/modules.
2 +
3 +buildscript {
4 + ext {
5 + buildToolsVersion = "28.0.3"
6 + minSdkVersion = 16
7 + compileSdkVersion = 28
8 + targetSdkVersion = 28
9 + }
10 + repositories {
11 + google()
12 + jcenter()
13 + }
14 + dependencies {
15 + classpath("com.android.tools.build:gradle:3.4.2")
16 +
17 + // NOTE: Do not place your application dependencies here; they belong
18 + // in the individual module build.gradle files
19 + }
20 +}
21 +
22 +allprojects {
23 + repositories {
24 + mavenLocal()
25 + maven {
26 + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
27 + url("$rootDir/../node_modules/react-native/android")
28 + }
29 + maven {
30 + // Android JSC is installed from npm
31 + url("$rootDir/../node_modules/jsc-android/dist")
32 + }
33 +
34 + google()
35 + jcenter()
36 + maven { url 'https://jitpack.io' }
37 + }
38 +}
1 +# Project-wide Gradle settings.
2 +
3 +# IDE (e.g. Android Studio) users:
4 +# Gradle settings configured through the IDE *will override*
5 +# any settings specified in this file.
6 +
7 +# For more details on how to configure your build environment visit
8 +# http://www.gradle.org/docs/current/userguide/build_environment.html
9 +
10 +# Specifies the JVM arguments used for the daemon process.
11 +# The setting is particularly useful for tweaking memory settings.
12 +# Default value: -Xmx10248m -XX:MaxPermSize=256m
13 +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 +
15 +# When configured, Gradle will run in incubating parallel mode.
16 +# This option should only be used with decoupled projects. More details, visit
17 +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 +# org.gradle.parallel=true
19 +
20 +android.useAndroidX=true
21 +android.enableJetifier=true
1 +distributionBase=GRADLE_USER_HOME
2 +distributionPath=wrapper/dists
3 +distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
4 +zipStoreBase=GRADLE_USER_HOME
5 +zipStorePath=wrapper/dists
1 +#!/usr/bin/env sh
2 +
3 +#
4 +# Copyright 2015 the original author or authors.
5 +#
6 +# Licensed under the Apache License, Version 2.0 (the "License");
7 +# you may not use this file except in compliance with the License.
8 +# You may obtain a copy of the License at
9 +#
10 +# http://www.apache.org/licenses/LICENSE-2.0
11 +#
12 +# Unless required by applicable law or agreed to in writing, software
13 +# distributed under the License is distributed on an "AS IS" BASIS,
14 +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 +# See the License for the specific language governing permissions and
16 +# limitations under the License.
17 +#
18 +
19 +##############################################################################
20 +##
21 +## Gradle start up script for UN*X
22 +##
23 +##############################################################################
24 +
25 +# Attempt to set APP_HOME
26 +# Resolve links: $0 may be a link
27 +PRG="$0"
28 +# Need this for relative symlinks.
29 +while [ -h "$PRG" ] ; do
30 + ls=`ls -ld "$PRG"`
31 + link=`expr "$ls" : '.*-> \(.*\)$'`
32 + if expr "$link" : '/.*' > /dev/null; then
33 + PRG="$link"
34 + else
35 + PRG=`dirname "$PRG"`"/$link"
36 + fi
37 +done
38 +SAVED="`pwd`"
39 +cd "`dirname \"$PRG\"`/" >/dev/null
40 +APP_HOME="`pwd -P`"
41 +cd "$SAVED" >/dev/null
42 +
43 +APP_NAME="Gradle"
44 +APP_BASE_NAME=`basename "$0"`
45 +
46 +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 +
49 +# Use the maximum available, or set MAX_FD != -1 to use that value.
50 +MAX_FD="maximum"
51 +
52 +warn () {
53 + echo "$*"
54 +}
55 +
56 +die () {
57 + echo
58 + echo "$*"
59 + echo
60 + exit 1
61 +}
62 +
63 +# OS specific support (must be 'true' or 'false').
64 +cygwin=false
65 +msys=false
66 +darwin=false
67 +nonstop=false
68 +case "`uname`" in
69 + CYGWIN* )
70 + cygwin=true
71 + ;;
72 + Darwin* )
73 + darwin=true
74 + ;;
75 + MINGW* )
76 + msys=true
77 + ;;
78 + NONSTOP* )
79 + nonstop=true
80 + ;;
81 +esac
82 +
83 +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 +
85 +# Determine the Java command to use to start the JVM.
86 +if [ -n "$JAVA_HOME" ] ; then
87 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
88 + # IBM's JDK on AIX uses strange locations for the executables
89 + JAVACMD="$JAVA_HOME/jre/sh/java"
90 + else
91 + JAVACMD="$JAVA_HOME/bin/java"
92 + fi
93 + if [ ! -x "$JAVACMD" ] ; then
94 + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
95 +
96 +Please set the JAVA_HOME variable in your environment to match the
97 +location of your Java installation."
98 + fi
99 +else
100 + JAVACMD="java"
101 + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
102 +
103 +Please set the JAVA_HOME variable in your environment to match the
104 +location of your Java installation."
105 +fi
106 +
107 +# Increase the maximum file descriptors if we can.
108 +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
109 + MAX_FD_LIMIT=`ulimit -H -n`
110 + if [ $? -eq 0 ] ; then
111 + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
112 + MAX_FD="$MAX_FD_LIMIT"
113 + fi
114 + ulimit -n $MAX_FD
115 + if [ $? -ne 0 ] ; then
116 + warn "Could not set maximum file descriptor limit: $MAX_FD"
117 + fi
118 + else
119 + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
120 + fi
121 +fi
122 +
123 +# For Darwin, add options to specify how the application appears in the dock
124 +if $darwin; then
125 + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
126 +fi
127 +
128 +# For Cygwin, switch paths to Windows format before running java
129 +if $cygwin ; then
130 + APP_HOME=`cygpath --path --mixed "$APP_HOME"`
131 + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
132 + JAVACMD=`cygpath --unix "$JAVACMD"`
133 +
134 + # We build the pattern for arguments to be converted via cygpath
135 + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
136 + SEP=""
137 + for dir in $ROOTDIRSRAW ; do
138 + ROOTDIRS="$ROOTDIRS$SEP$dir"
139 + SEP="|"
140 + done
141 + OURCYGPATTERN="(^($ROOTDIRS))"
142 + # Add a user-defined pattern to the cygpath arguments
143 + if [ "$GRADLE_CYGPATTERN" != "" ] ; then
144 + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
145 + fi
146 + # Now convert the arguments - kludge to limit ourselves to /bin/sh
147 + i=0
148 + for arg in "$@" ; do
149 + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
150 + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
151 +
152 + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
153 + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
154 + else
155 + eval `echo args$i`="\"$arg\""
156 + fi
157 + i=$((i+1))
158 + done
159 + case $i in
160 + (0) set -- ;;
161 + (1) set -- "$args0" ;;
162 + (2) set -- "$args0" "$args1" ;;
163 + (3) set -- "$args0" "$args1" "$args2" ;;
164 + (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
165 + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
166 + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
167 + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
168 + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
169 + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
170 + esac
171 +fi
172 +
173 +# Escape application args
174 +save () {
175 + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
176 + echo " "
177 +}
178 +APP_ARGS=$(save "$@")
179 +
180 +# Collect all arguments for the java command, following the shell quoting and substitution rules
181 +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
182 +
183 +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
184 +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
185 + cd "$(dirname "$0")"
186 +fi
187 +
188 +exec "$JAVACMD" "$@"
1 +@rem
2 +@rem Copyright 2015 the original author or authors.
3 +@rem
4 +@rem Licensed under the Apache License, Version 2.0 (the "License");
5 +@rem you may not use this file except in compliance with the License.
6 +@rem You may obtain a copy of the License at
7 +@rem
8 +@rem http://www.apache.org/licenses/LICENSE-2.0
9 +@rem
10 +@rem Unless required by applicable law or agreed to in writing, software
11 +@rem distributed under the License is distributed on an "AS IS" BASIS,
12 +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 +@rem See the License for the specific language governing permissions and
14 +@rem limitations under the License.
15 +@rem
16 +
17 +@if "%DEBUG%" == "" @echo off
18 +@rem ##########################################################################
19 +@rem
20 +@rem Gradle startup script for Windows
21 +@rem
22 +@rem ##########################################################################
23 +
24 +@rem Set local scope for the variables with windows NT shell
25 +if "%OS%"=="Windows_NT" setlocal
26 +
27 +set DIRNAME=%~dp0
28 +if "%DIRNAME%" == "" set DIRNAME=.
29 +set APP_BASE_NAME=%~n0
30 +set APP_HOME=%DIRNAME%
31 +
32 +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
33 +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
34 +
35 +@rem Find java.exe
36 +if defined JAVA_HOME goto findJavaFromJavaHome
37 +
38 +set JAVA_EXE=java.exe
39 +%JAVA_EXE% -version >NUL 2>&1
40 +if "%ERRORLEVEL%" == "0" goto init
41 +
42 +echo.
43 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
44 +echo.
45 +echo Please set the JAVA_HOME variable in your environment to match the
46 +echo location of your Java installation.
47 +
48 +goto fail
49 +
50 +:findJavaFromJavaHome
51 +set JAVA_HOME=%JAVA_HOME:"=%
52 +set JAVA_EXE=%JAVA_HOME%/bin/java.exe
53 +
54 +if exist "%JAVA_EXE%" goto init
55 +
56 +echo.
57 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
58 +echo.
59 +echo Please set the JAVA_HOME variable in your environment to match the
60 +echo location of your Java installation.
61 +
62 +goto fail
63 +
64 +:init
65 +@rem Get command-line arguments, handling Windows variants
66 +
67 +if not "%OS%" == "Windows_NT" goto win9xME_args
68 +
69 +:win9xME_args
70 +@rem Slurp the command line arguments.
71 +set CMD_LINE_ARGS=
72 +set _SKIP=2
73 +
74 +:win9xME_args_slurp
75 +if "x%~1" == "x" goto execute
76 +
77 +set CMD_LINE_ARGS=%*
78 +
79 +:execute
80 +@rem Setup the command line
81 +
82 +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
83 +
84 +@rem Execute Gradle
85 +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
86 +
87 +:end
88 +@rem End local scope for the variables with windows NT shell
89 +if "%ERRORLEVEL%"=="0" goto mainEnd
90 +
91 +:fail
92 +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
93 +rem the _cmd.exe /c_ return code!
94 +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
95 +exit /b 1
96 +
97 +:mainEnd
98 +if "%OS%"=="Windows_NT" endlocal
99 +
100 +:omega
1 +rootProject.name = 'TestProject'
2 +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 +include ':app'
1 +{
2 + "name": "TestProject",
3 + "displayName": "TestProject"
4 +}
...\ No newline at end of file ...\ No newline at end of file
1 +module.exports = {
2 + presets: ['module:metro-react-native-babel-preset'],
3 +};
1 +/**
2 + * @format
3 + */
4 +
5 +import {AppRegistry} from 'react-native';
6 +import App from './App';
7 +import {name as appName} from './app.json';
8 +
9 +AppRegistry.registerComponent(appName, () => App);
1 +platform :ios, '9.0'
2 +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3 +
4 +target 'TestProject' do
5 + # Pods for TestProject
6 + pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
7 + pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
8 + pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
9 + pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
10 + pod 'React', :path => '../node_modules/react-native/'
11 + pod 'React-Core', :path => '../node_modules/react-native/'
12 + pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
13 + pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
14 + pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
15 + pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
16 + pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
17 + pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
18 + pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
19 + pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
20 + pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
21 + pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
22 + pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
23 + pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
24 +
25 + pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
26 + pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
27 + pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
28 + pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
29 + pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon"
30 + pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
31 + pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
32 +
33 + pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
34 + pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
35 + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
36 +
37 +
38 + target 'TestProjectTests' do
39 + inherit! :search_paths
40 + # Pods for testing
41 + end
42 +
43 + use_native_modules!
44 +end
45 +
46 +target 'TestProject-tvOS' do
47 + # Pods for TestProject-tvOS
48 +
49 + target 'TestProject-tvOSTests' do
50 + inherit! :search_paths
51 + # Pods for testing
52 + end
53 +
54 +end
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>APPL</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleSignature</key>
20 + <string>????</string>
21 + <key>CFBundleVersion</key>
22 + <string>1</string>
23 + <key>LSRequiresIPhoneOS</key>
24 + <true/>
25 + <key>NSAppTransportSecurity</key>
26 + <dict>
27 + <key>NSExceptionDomains</key>
28 + <dict>
29 + <key>localhost</key>
30 + <dict>
31 + <key>NSExceptionAllowsInsecureHTTPLoads</key>
32 + <true/>
33 + </dict>
34 + </dict>
35 + </dict>
36 + <key>NSLocationWhenInUseUsageDescription</key>
37 + <string></string>
38 + <key>UILaunchStoryboardName</key>
39 + <string>LaunchScreen</string>
40 + <key>UIRequiredDeviceCapabilities</key>
41 + <array>
42 + <string>armv7</string>
43 + </array>
44 + <key>UISupportedInterfaceOrientations</key>
45 + <array>
46 + <string>UIInterfaceOrientationPortrait</string>
47 + <string>UIInterfaceOrientationLandscapeLeft</string>
48 + <string>UIInterfaceOrientationLandscapeRight</string>
49 + </array>
50 + <key>UIViewControllerBasedStatusBarAppearance</key>
51 + <false/>
52 +</dict>
53 +</plist>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>BNDL</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleSignature</key>
20 + <string>????</string>
21 + <key>CFBundleVersion</key>
22 + <string>1</string>
23 +</dict>
24 +</plist>
1 +// !$*UTF8*$!
2 +{
3 + archiveVersion = 1;
4 + classes = {
5 + };
6 + objectVersion = 46;
7 + objects = {
8 +/* Begin PBXBuildFile section */
9 + 00E356F31AD99517003FC87E /* TestProjectTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* TestProjectTests.m */; };
10 + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
11 + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
12 + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13 + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
14 + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
15 + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
16 + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
17 + 2DCD954D1E0B4F2C00145EB5 /* TestProjectTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* TestProjectTests.m */; };
18 +/* End PBXBuildFile section */
19 +
20 +/* Begin PBXContainerItemProxy section */
21 + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
22 + isa = PBXContainerItemProxy;
23 + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
24 + proxyType = 1;
25 + remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
26 + remoteInfo = TestProject;
27 + };
28 + 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
29 + isa = PBXContainerItemProxy;
30 + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
31 + proxyType = 1;
32 + remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
33 + remoteInfo = "TestProject-tvOS";
34 + };
35 +/* End PBXContainerItemProxy section */
36 +
37 +/* Begin PBXFileReference section */
38 + 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
39 + 00E356EE1AD99517003FC87E /* TestProjectTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TestProjectTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
40 + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
41 + 00E356F21AD99517003FC87E /* TestProjectTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestProjectTests.m; sourceTree = "<group>"; };
42 + 13B07F961A680F5B00A75B9A /* TestProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TestProject.app; sourceTree = BUILT_PRODUCTS_DIR; };
43 + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = TestProject/AppDelegate.h; sourceTree = "<group>"; };
44 + 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = TestProject/AppDelegate.m; sourceTree = "<group>"; };
45 + 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
46 + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = TestProject/Images.xcassets; sourceTree = "<group>"; };
47 + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = TestProject/Info.plist; sourceTree = "<group>"; };
48 + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = TestProject/main.m; sourceTree = "<group>"; };
49 + 2D02E47B1E0B4A5D006451C7 /* TestProject-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "TestProject-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
50 + 2D02E4901E0B4A5D006451C7 /* TestProject-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "TestProject-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
51 + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
52 + 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; };
53 +/* End PBXFileReference section */
54 +
55 +/* Begin PBXFrameworksBuildPhase section */
56 + 00E356EB1AD99517003FC87E /* Frameworks */ = {
57 + isa = PBXFrameworksBuildPhase;
58 + buildActionMask = 2147483647;
59 + files = (
60 + );
61 + runOnlyForDeploymentPostprocessing = 0;
62 + };
63 + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
64 + isa = PBXFrameworksBuildPhase;
65 + buildActionMask = 2147483647;
66 + files = (
67 + );
68 + runOnlyForDeploymentPostprocessing = 0;
69 + };
70 + 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
71 + isa = PBXFrameworksBuildPhase;
72 + buildActionMask = 2147483647;
73 + files = (
74 + );
75 + runOnlyForDeploymentPostprocessing = 0;
76 + };
77 + 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
78 + isa = PBXFrameworksBuildPhase;
79 + buildActionMask = 2147483647;
80 + files = (
81 + );
82 + runOnlyForDeploymentPostprocessing = 0;
83 + };
84 +/* End PBXFrameworksBuildPhase section */
85 +
86 +/* Begin PBXGroup section */
87 + 00E356EF1AD99517003FC87E /* TestProjectTests */ = {
88 + isa = PBXGroup;
89 + children = (
90 + 00E356F21AD99517003FC87E /* TestProjectTests.m */,
91 + 00E356F01AD99517003FC87E /* Supporting Files */,
92 + );
93 + path = TestProjectTests;
94 + sourceTree = "<group>";
95 + };
96 + 00E356F01AD99517003FC87E /* Supporting Files */ = {
97 + isa = PBXGroup;
98 + children = (
99 + 00E356F11AD99517003FC87E /* Info.plist */,
100 + );
101 + name = "Supporting Files";
102 + sourceTree = "<group>";
103 + };
104 + 13B07FAE1A68108700A75B9A /* TestProject */ = {
105 + isa = PBXGroup;
106 + children = (
107 + 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
108 + 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
109 + 13B07FB01A68108700A75B9A /* AppDelegate.m */,
110 + 13B07FB51A68108700A75B9A /* Images.xcassets */,
111 + 13B07FB61A68108700A75B9A /* Info.plist */,
112 + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
113 + 13B07FB71A68108700A75B9A /* main.m */,
114 + );
115 + name = TestProject;
116 + sourceTree = "<group>";
117 + };
118 + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
119 + isa = PBXGroup;
120 + children = (
121 + ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
122 + ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
123 + );
124 + name = Frameworks;
125 + sourceTree = "<group>";
126 + };
127 + 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
128 + isa = PBXGroup;
129 + children = (
130 + );
131 + name = Libraries;
132 + sourceTree = "<group>";
133 + };
134 + 83CBB9F61A601CBA00E9B192 = {
135 + isa = PBXGroup;
136 + children = (
137 + 13B07FAE1A68108700A75B9A /* TestProject */,
138 + 832341AE1AAA6A7D00B99B32 /* Libraries */,
139 + 00E356EF1AD99517003FC87E /* TestProjectTests */,
140 + 83CBBA001A601CBA00E9B192 /* Products */,
141 + 2D16E6871FA4F8E400B85C8A /* Frameworks */,
142 + 63DAD7E5815F44A1BCFE007A /* Resources */,
143 + );
144 + indentWidth = 2;
145 + sourceTree = "<group>";
146 + tabWidth = 2;
147 + usesTabs = 0;
148 + };
149 + 83CBBA001A601CBA00E9B192 /* Products */ = {
150 + isa = PBXGroup;
151 + children = (
152 + 13B07F961A680F5B00A75B9A /* TestProject.app */,
153 + 00E356EE1AD99517003FC87E /* TestProjectTests.xctest */,
154 + 2D02E47B1E0B4A5D006451C7 /* TestProject-tvOS.app */,
155 + 2D02E4901E0B4A5D006451C7 /* TestProject-tvOSTests.xctest */,
156 + );
157 + name = Products;
158 + sourceTree = "<group>";
159 + };
160 + 63DAD7E5815F44A1BCFE007A /* Resources */ = {
161 + isa = "PBXGroup";
162 + children = (
163 + );
164 + name = Resources;
165 + sourceTree = "<group>";
166 + path = "";
167 + };
168 +/* End PBXGroup section */
169 +
170 +/* Begin PBXNativeTarget section */
171 + 00E356ED1AD99517003FC87E /* TestProjectTests */ = {
172 + isa = PBXNativeTarget;
173 + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "TestProjectTests" */;
174 + buildPhases = (
175 + 00E356EA1AD99517003FC87E /* Sources */,
176 + 00E356EB1AD99517003FC87E /* Frameworks */,
177 + 00E356EC1AD99517003FC87E /* Resources */,
178 + );
179 + buildRules = (
180 + );
181 + dependencies = (
182 + 00E356F51AD99517003FC87E /* PBXTargetDependency */,
183 + );
184 + name = TestProjectTests;
185 + productName = TestProjectTests;
186 + productReference = 00E356EE1AD99517003FC87E /* TestProjectTests.xctest */;
187 + productType = "com.apple.product-type.bundle.unit-test";
188 + };
189 + 13B07F861A680F5B00A75B9A /* TestProject */ = {
190 + isa = PBXNativeTarget;
191 + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "TestProject" */;
192 + buildPhases = (
193 + FD10A7F022414F080027D42C /* Start Packager */,
194 + 13B07F871A680F5B00A75B9A /* Sources */,
195 + 13B07F8C1A680F5B00A75B9A /* Frameworks */,
196 + 13B07F8E1A680F5B00A75B9A /* Resources */,
197 + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
198 + );
199 + buildRules = (
200 + );
201 + dependencies = (
202 + );
203 + name = TestProject;
204 + productName = "TestProject";
205 + productReference = 13B07F961A680F5B00A75B9A /* TestProject.app */;
206 + productType = "com.apple.product-type.application";
207 + };
208 + 2D02E47A1E0B4A5D006451C7 /* TestProject-tvOS */ = {
209 + isa = PBXNativeTarget;
210 + buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "TestProject-tvOS" */;
211 + buildPhases = (
212 + FD10A7F122414F3F0027D42C /* Start Packager */,
213 + 2D02E4771E0B4A5D006451C7 /* Sources */,
214 + 2D02E4781E0B4A5D006451C7 /* Frameworks */,
215 + 2D02E4791E0B4A5D006451C7 /* Resources */,
216 + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
217 + );
218 + buildRules = (
219 + );
220 + dependencies = (
221 + );
222 + name = "TestProject-tvOS";
223 + productName = "TestProject-tvOS";
224 + productReference = 2D02E47B1E0B4A5D006451C7 /* TestProject-tvOS.app */;
225 + productType = "com.apple.product-type.application";
226 + };
227 + 2D02E48F1E0B4A5D006451C7 /* TestProject-tvOSTests */ = {
228 + isa = PBXNativeTarget;
229 + buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "TestProject-tvOSTests" */;
230 + buildPhases = (
231 + 2D02E48C1E0B4A5D006451C7 /* Sources */,
232 + 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
233 + 2D02E48E1E0B4A5D006451C7 /* Resources */,
234 + );
235 + buildRules = (
236 + );
237 + dependencies = (
238 + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
239 + );
240 + name = "TestProject-tvOSTests";
241 + productName = "TestProject-tvOSTests";
242 + productReference = 2D02E4901E0B4A5D006451C7 /* TestProject-tvOSTests.xctest */;
243 + productType = "com.apple.product-type.bundle.unit-test";
244 + };
245 +/* End PBXNativeTarget section */
246 +
247 +/* Begin PBXProject section */
248 + 83CBB9F71A601CBA00E9B192 /* Project object */ = {
249 + isa = PBXProject;
250 + attributes = {
251 + LastUpgradeCheck = 940;
252 + ORGANIZATIONNAME = Facebook;
253 + TargetAttributes = {
254 + 00E356ED1AD99517003FC87E = {
255 + CreatedOnToolsVersion = 6.2;
256 + TestTargetID = 13B07F861A680F5B00A75B9A;
257 + };
258 + 2D02E47A1E0B4A5D006451C7 = {
259 + CreatedOnToolsVersion = 8.2.1;
260 + ProvisioningStyle = Automatic;
261 + };
262 + 2D02E48F1E0B4A5D006451C7 = {
263 + CreatedOnToolsVersion = 8.2.1;
264 + ProvisioningStyle = Automatic;
265 + TestTargetID = 2D02E47A1E0B4A5D006451C7;
266 + };
267 + };
268 + };
269 + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "TestProject" */;
270 + compatibilityVersion = "Xcode 3.2";
271 + developmentRegion = English;
272 + hasScannedForEncodings = 0;
273 + knownRegions = (
274 + en,
275 + Base,
276 + );
277 + mainGroup = 83CBB9F61A601CBA00E9B192;
278 + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
279 + projectDirPath = "";
280 + projectRoot = "";
281 + targets = (
282 + 13B07F861A680F5B00A75B9A /* TestProject */,
283 + 00E356ED1AD99517003FC87E /* TestProjectTests */,
284 + 2D02E47A1E0B4A5D006451C7 /* TestProject-tvOS */,
285 + 2D02E48F1E0B4A5D006451C7 /* TestProject-tvOSTests */,
286 + );
287 + };
288 +/* End PBXProject section */
289 +
290 +/* Begin PBXResourcesBuildPhase section */
291 + 00E356EC1AD99517003FC87E /* Resources */ = {
292 + isa = PBXResourcesBuildPhase;
293 + buildActionMask = 2147483647;
294 + files = (
295 + );
296 + runOnlyForDeploymentPostprocessing = 0;
297 + };
298 + 13B07F8E1A680F5B00A75B9A /* Resources */ = {
299 + isa = PBXResourcesBuildPhase;
300 + buildActionMask = 2147483647;
301 + files = (
302 + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
303 + 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
304 + );
305 + runOnlyForDeploymentPostprocessing = 0;
306 + };
307 + 2D02E4791E0B4A5D006451C7 /* Resources */ = {
308 + isa = PBXResourcesBuildPhase;
309 + buildActionMask = 2147483647;
310 + files = (
311 + 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
312 + );
313 + runOnlyForDeploymentPostprocessing = 0;
314 + };
315 + 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
316 + isa = PBXResourcesBuildPhase;
317 + buildActionMask = 2147483647;
318 + files = (
319 + );
320 + runOnlyForDeploymentPostprocessing = 0;
321 + };
322 +/* End PBXResourcesBuildPhase section */
323 +
324 +/* Begin PBXShellScriptBuildPhase section */
325 + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
326 + isa = PBXShellScriptBuildPhase;
327 + buildActionMask = 2147483647;
328 + files = (
329 + );
330 + inputPaths = (
331 + );
332 + name = "Bundle React Native code and images";
333 + outputPaths = (
334 + );
335 + runOnlyForDeploymentPostprocessing = 0;
336 + shellPath = /bin/sh;
337 + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
338 + };
339 + 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
340 + isa = PBXShellScriptBuildPhase;
341 + buildActionMask = 2147483647;
342 + files = (
343 + );
344 + inputPaths = (
345 + );
346 + name = "Bundle React Native Code And Images";
347 + outputPaths = (
348 + );
349 + runOnlyForDeploymentPostprocessing = 0;
350 + shellPath = /bin/sh;
351 + shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
352 + };
353 + FD10A7F022414F080027D42C /* Start Packager */ = {
354 + isa = PBXShellScriptBuildPhase;
355 + buildActionMask = 2147483647;
356 + files = (
357 + );
358 + inputFileListPaths = (
359 + );
360 + inputPaths = (
361 + );
362 + name = "Start Packager";
363 + outputFileListPaths = (
364 + );
365 + outputPaths = (
366 + );
367 + runOnlyForDeploymentPostprocessing = 0;
368 + shellPath = /bin/sh;
369 + shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
370 + showEnvVarsInLog = 0;
371 + };
372 + FD10A7F122414F3F0027D42C /* Start Packager */ = {
373 + isa = PBXShellScriptBuildPhase;
374 + buildActionMask = 2147483647;
375 + files = (
376 + );
377 + inputFileListPaths = (
378 + );
379 + inputPaths = (
380 + );
381 + name = "Start Packager";
382 + outputFileListPaths = (
383 + );
384 + outputPaths = (
385 + );
386 + runOnlyForDeploymentPostprocessing = 0;
387 + shellPath = /bin/sh;
388 + shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
389 + showEnvVarsInLog = 0;
390 + };
391 +/* End PBXShellScriptBuildPhase section */
392 +
393 +/* Begin PBXSourcesBuildPhase section */
394 + 00E356EA1AD99517003FC87E /* Sources */ = {
395 + isa = PBXSourcesBuildPhase;
396 + buildActionMask = 2147483647;
397 + files = (
398 + 00E356F31AD99517003FC87E /* TestProjectTests.m in Sources */,
399 + );
400 + runOnlyForDeploymentPostprocessing = 0;
401 + };
402 + 13B07F871A680F5B00A75B9A /* Sources */ = {
403 + isa = PBXSourcesBuildPhase;
404 + buildActionMask = 2147483647;
405 + files = (
406 + 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
407 + 13B07FC11A68108700A75B9A /* main.m in Sources */,
408 + );
409 + runOnlyForDeploymentPostprocessing = 0;
410 + };
411 + 2D02E4771E0B4A5D006451C7 /* Sources */ = {
412 + isa = PBXSourcesBuildPhase;
413 + buildActionMask = 2147483647;
414 + files = (
415 + 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
416 + 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
417 + );
418 + runOnlyForDeploymentPostprocessing = 0;
419 + };
420 + 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
421 + isa = PBXSourcesBuildPhase;
422 + buildActionMask = 2147483647;
423 + files = (
424 + 2DCD954D1E0B4F2C00145EB5 /* TestProjectTests.m in Sources */,
425 + );
426 + runOnlyForDeploymentPostprocessing = 0;
427 + };
428 +/* End PBXSourcesBuildPhase section */
429 +
430 +/* Begin PBXTargetDependency section */
431 + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
432 + isa = PBXTargetDependency;
433 + target = 13B07F861A680F5B00A75B9A /* TestProject */;
434 + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
435 + };
436 + 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
437 + isa = PBXTargetDependency;
438 + target = 2D02E47A1E0B4A5D006451C7 /* TestProject-tvOS */;
439 + targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
440 + };
441 +/* End PBXTargetDependency section */
442 +
443 +/* Begin PBXVariantGroup section */
444 + 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
445 + isa = PBXVariantGroup;
446 + children = (
447 + 13B07FB21A68108700A75B9A /* Base */,
448 + );
449 + name = LaunchScreen.xib;
450 + path = TestProject;
451 + sourceTree = "<group>";
452 + };
453 +/* End PBXVariantGroup section */
454 +
455 +/* Begin XCBuildConfiguration section */
456 + 00E356F61AD99517003FC87E /* Debug */ = {
457 + isa = XCBuildConfiguration;
458 + buildSettings = {
459 + BUNDLE_LOADER = "$(TEST_HOST)";
460 + GCC_PREPROCESSOR_DEFINITIONS = (
461 + "DEBUG=1",
462 + "$(inherited)",
463 + );
464 + INFOPLIST_FILE = TestProjectTests/Info.plist;
465 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
466 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
467 + OTHER_LDFLAGS = (
468 + "-ObjC",
469 + "-lc++",
470 + "$(inherited)",
471 + );
472 + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
473 + PRODUCT_NAME = "$(TARGET_NAME)";
474 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
475 + };
476 + name = Debug;
477 + };
478 + 00E356F71AD99517003FC87E /* Release */ = {
479 + isa = XCBuildConfiguration;
480 + buildSettings = {
481 + BUNDLE_LOADER = "$(TEST_HOST)";
482 + COPY_PHASE_STRIP = NO;
483 + INFOPLIST_FILE = TestProjectTests/Info.plist;
484 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
485 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
486 + OTHER_LDFLAGS = (
487 + "-ObjC",
488 + "-lc++",
489 + "$(inherited)",
490 + );
491 + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
492 + PRODUCT_NAME = "$(TARGET_NAME)";
493 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject.app/TestProject";
494 + };
495 + name = Release;
496 + };
497 + 13B07F941A680F5B00A75B9A /* Debug */ = {
498 + isa = XCBuildConfiguration;
499 + buildSettings = {
500 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
501 + CURRENT_PROJECT_VERSION = 1;
502 + DEAD_CODE_STRIPPING = NO;
503 + INFOPLIST_FILE = TestProject/Info.plist;
504 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
505 + OTHER_LDFLAGS = (
506 + "$(inherited)",
507 + "-ObjC",
508 + "-lc++",
509 + );
510 + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
511 + PRODUCT_NAME = TestProject;
512 + VERSIONING_SYSTEM = "apple-generic";
513 + };
514 + name = Debug;
515 + };
516 + 13B07F951A680F5B00A75B9A /* Release */ = {
517 + isa = XCBuildConfiguration;
518 + buildSettings = {
519 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
520 + CURRENT_PROJECT_VERSION = 1;
521 + INFOPLIST_FILE = TestProject/Info.plist;
522 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
523 + OTHER_LDFLAGS = (
524 + "$(inherited)",
525 + "-ObjC",
526 + "-lc++",
527 + );
528 + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
529 + PRODUCT_NAME = TestProject;
530 + VERSIONING_SYSTEM = "apple-generic";
531 + };
532 + name = Release;
533 + };
534 + 2D02E4971E0B4A5E006451C7 /* Debug */ = {
535 + isa = XCBuildConfiguration;
536 + buildSettings = {
537 + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
538 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
539 + CLANG_ANALYZER_NONNULL = YES;
540 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
541 + CLANG_WARN_INFINITE_RECURSION = YES;
542 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
543 + DEBUG_INFORMATION_FORMAT = dwarf;
544 + ENABLE_TESTABILITY = YES;
545 + GCC_NO_COMMON_BLOCKS = YES;
546 + INFOPLIST_FILE = "TestProject-tvOS/Info.plist";
547 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
548 + OTHER_LDFLAGS = (
549 + "$(inherited)",
550 + "-ObjC",
551 + "-lc++",
552 + );
553 + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.TestProject-tvOS";
554 + PRODUCT_NAME = "$(TARGET_NAME)";
555 + SDKROOT = appletvos;
556 + TARGETED_DEVICE_FAMILY = 3;
557 + TVOS_DEPLOYMENT_TARGET = 9.2;
558 + };
559 + name = Debug;
560 + };
561 + 2D02E4981E0B4A5E006451C7 /* Release */ = {
562 + isa = XCBuildConfiguration;
563 + buildSettings = {
564 + ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
565 + ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
566 + CLANG_ANALYZER_NONNULL = YES;
567 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
568 + CLANG_WARN_INFINITE_RECURSION = YES;
569 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
570 + COPY_PHASE_STRIP = NO;
571 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
572 + GCC_NO_COMMON_BLOCKS = YES;
573 + INFOPLIST_FILE = "TestProject-tvOS/Info.plist";
574 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
575 + OTHER_LDFLAGS = (
576 + "$(inherited)",
577 + "-ObjC",
578 + "-lc++",
579 + );
580 + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.TestProject-tvOS";
581 + PRODUCT_NAME = "$(TARGET_NAME)";
582 + SDKROOT = appletvos;
583 + TARGETED_DEVICE_FAMILY = 3;
584 + TVOS_DEPLOYMENT_TARGET = 9.2;
585 + };
586 + name = Release;
587 + };
588 + 2D02E4991E0B4A5E006451C7 /* Debug */ = {
589 + isa = XCBuildConfiguration;
590 + buildSettings = {
591 + BUNDLE_LOADER = "$(TEST_HOST)";
592 + CLANG_ANALYZER_NONNULL = YES;
593 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
594 + CLANG_WARN_INFINITE_RECURSION = YES;
595 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
596 + DEBUG_INFORMATION_FORMAT = dwarf;
597 + ENABLE_TESTABILITY = YES;
598 + GCC_NO_COMMON_BLOCKS = YES;
599 + INFOPLIST_FILE = "TestProject-tvOSTests/Info.plist";
600 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
601 + OTHER_LDFLAGS = (
602 + "$(inherited)",
603 + "-ObjC",
604 + "-lc++",
605 + );
606 + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.TestProject-tvOSTests";
607 + PRODUCT_NAME = "$(TARGET_NAME)";
608 + SDKROOT = appletvos;
609 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject-tvOS.app/TestProject-tvOS";
610 + TVOS_DEPLOYMENT_TARGET = 10.1;
611 + };
612 + name = Debug;
613 + };
614 + 2D02E49A1E0B4A5E006451C7 /* Release */ = {
615 + isa = XCBuildConfiguration;
616 + buildSettings = {
617 + BUNDLE_LOADER = "$(TEST_HOST)";
618 + CLANG_ANALYZER_NONNULL = YES;
619 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
620 + CLANG_WARN_INFINITE_RECURSION = YES;
621 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
622 + COPY_PHASE_STRIP = NO;
623 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
624 + GCC_NO_COMMON_BLOCKS = YES;
625 + INFOPLIST_FILE = "TestProject-tvOSTests/Info.plist";
626 + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
627 + OTHER_LDFLAGS = (
628 + "$(inherited)",
629 + "-ObjC",
630 + "-lc++",
631 + );
632 + PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.TestProject-tvOSTests";
633 + PRODUCT_NAME = "$(TARGET_NAME)";
634 + SDKROOT = appletvos;
635 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/TestProject-tvOS.app/TestProject-tvOS";
636 + TVOS_DEPLOYMENT_TARGET = 10.1;
637 + };
638 + name = Release;
639 + };
640 + 83CBBA201A601CBA00E9B192 /* Debug */ = {
641 + isa = XCBuildConfiguration;
642 + buildSettings = {
643 + ALWAYS_SEARCH_USER_PATHS = NO;
644 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
645 + CLANG_CXX_LIBRARY = "libc++";
646 + CLANG_ENABLE_MODULES = YES;
647 + CLANG_ENABLE_OBJC_ARC = YES;
648 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
649 + CLANG_WARN_BOOL_CONVERSION = YES;
650 + CLANG_WARN_COMMA = YES;
651 + CLANG_WARN_CONSTANT_CONVERSION = YES;
652 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
653 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
654 + CLANG_WARN_EMPTY_BODY = YES;
655 + CLANG_WARN_ENUM_CONVERSION = YES;
656 + CLANG_WARN_INFINITE_RECURSION = YES;
657 + CLANG_WARN_INT_CONVERSION = YES;
658 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
659 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
660 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
661 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
662 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
663 + CLANG_WARN_STRICT_PROTOTYPES = YES;
664 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
665 + CLANG_WARN_UNREACHABLE_CODE = YES;
666 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
667 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
668 + COPY_PHASE_STRIP = NO;
669 + ENABLE_STRICT_OBJC_MSGSEND = YES;
670 + ENABLE_TESTABILITY = YES;
671 + GCC_C_LANGUAGE_STANDARD = gnu99;
672 + GCC_DYNAMIC_NO_PIC = NO;
673 + GCC_NO_COMMON_BLOCKS = YES;
674 + GCC_OPTIMIZATION_LEVEL = 0;
675 + GCC_PREPROCESSOR_DEFINITIONS = (
676 + "DEBUG=1",
677 + "$(inherited)",
678 + );
679 + GCC_SYMBOLS_PRIVATE_EXTERN = NO;
680 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
681 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
682 + GCC_WARN_UNDECLARED_SELECTOR = YES;
683 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
684 + GCC_WARN_UNUSED_FUNCTION = YES;
685 + GCC_WARN_UNUSED_VARIABLE = YES;
686 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
687 + MTL_ENABLE_DEBUG_INFO = YES;
688 + ONLY_ACTIVE_ARCH = YES;
689 + SDKROOT = iphoneos;
690 + };
691 + name = Debug;
692 + };
693 + 83CBBA211A601CBA00E9B192 /* Release */ = {
694 + isa = XCBuildConfiguration;
695 + buildSettings = {
696 + ALWAYS_SEARCH_USER_PATHS = NO;
697 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
698 + CLANG_CXX_LIBRARY = "libc++";
699 + CLANG_ENABLE_MODULES = YES;
700 + CLANG_ENABLE_OBJC_ARC = YES;
701 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
702 + CLANG_WARN_BOOL_CONVERSION = YES;
703 + CLANG_WARN_COMMA = YES;
704 + CLANG_WARN_CONSTANT_CONVERSION = YES;
705 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
706 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
707 + CLANG_WARN_EMPTY_BODY = YES;
708 + CLANG_WARN_ENUM_CONVERSION = YES;
709 + CLANG_WARN_INFINITE_RECURSION = YES;
710 + CLANG_WARN_INT_CONVERSION = YES;
711 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
712 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
713 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
714 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
715 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
716 + CLANG_WARN_STRICT_PROTOTYPES = YES;
717 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
718 + CLANG_WARN_UNREACHABLE_CODE = YES;
719 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
720 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
721 + COPY_PHASE_STRIP = YES;
722 + ENABLE_NS_ASSERTIONS = NO;
723 + ENABLE_STRICT_OBJC_MSGSEND = YES;
724 + GCC_C_LANGUAGE_STANDARD = gnu99;
725 + GCC_NO_COMMON_BLOCKS = YES;
726 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
727 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
728 + GCC_WARN_UNDECLARED_SELECTOR = YES;
729 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
730 + GCC_WARN_UNUSED_FUNCTION = YES;
731 + GCC_WARN_UNUSED_VARIABLE = YES;
732 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
733 + MTL_ENABLE_DEBUG_INFO = NO;
734 + SDKROOT = iphoneos;
735 + VALIDATE_PRODUCT = YES;
736 + };
737 + name = Release;
738 + };
739 +/* End XCBuildConfiguration section */
740 +
741 +/* Begin XCConfigurationList section */
742 + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "TestProjectTests" */ = {
743 + isa = XCConfigurationList;
744 + buildConfigurations = (
745 + 00E356F61AD99517003FC87E /* Debug */,
746 + 00E356F71AD99517003FC87E /* Release */,
747 + );
748 + defaultConfigurationIsVisible = 0;
749 + defaultConfigurationName = Release;
750 + };
751 + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "TestProject" */ = {
752 + isa = XCConfigurationList;
753 + buildConfigurations = (
754 + 13B07F941A680F5B00A75B9A /* Debug */,
755 + 13B07F951A680F5B00A75B9A /* Release */,
756 + );
757 + defaultConfigurationIsVisible = 0;
758 + defaultConfigurationName = Release;
759 + };
760 + 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "TestProject-tvOS" */ = {
761 + isa = XCConfigurationList;
762 + buildConfigurations = (
763 + 2D02E4971E0B4A5E006451C7 /* Debug */,
764 + 2D02E4981E0B4A5E006451C7 /* Release */,
765 + );
766 + defaultConfigurationIsVisible = 0;
767 + defaultConfigurationName = Release;
768 + };
769 + 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "TestProject-tvOSTests" */ = {
770 + isa = XCConfigurationList;
771 + buildConfigurations = (
772 + 2D02E4991E0B4A5E006451C7 /* Debug */,
773 + 2D02E49A1E0B4A5E006451C7 /* Release */,
774 + );
775 + defaultConfigurationIsVisible = 0;
776 + defaultConfigurationName = Release;
777 + };
778 + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "TestProject" */ = {
779 + isa = XCConfigurationList;
780 + buildConfigurations = (
781 + 83CBBA201A601CBA00E9B192 /* Debug */,
782 + 83CBBA211A601CBA00E9B192 /* Release */,
783 + );
784 + defaultConfigurationIsVisible = 0;
785 + defaultConfigurationName = Release;
786 + };
787 +/* End XCConfigurationList section */
788 + };
789 + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
790 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0940"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "NO"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "2D2A28121D9B038B00D4039D"
18 + BuildableName = "libReact.a"
19 + BlueprintName = "React-tvOS"
20 + ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "YES"
26 + buildForProfiling = "YES"
27 + buildForArchiving = "YES"
28 + buildForAnalyzing = "YES">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
32 + BuildableName = "TestProject-tvOS.app"
33 + BlueprintName = "TestProject-tvOS"
34 + ReferencedContainer = "container:TestProject.xcodeproj">
35 + </BuildableReference>
36 + </BuildActionEntry>
37 + <BuildActionEntry
38 + buildForTesting = "YES"
39 + buildForRunning = "YES"
40 + buildForProfiling = "NO"
41 + buildForArchiving = "NO"
42 + buildForAnalyzing = "YES">
43 + <BuildableReference
44 + BuildableIdentifier = "primary"
45 + BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7"
46 + BuildableName = "TestProject-tvOSTests.xctest"
47 + BlueprintName = "TestProject-tvOSTests"
48 + ReferencedContainer = "container:TestProject.xcodeproj">
49 + </BuildableReference>
50 + </BuildActionEntry>
51 + </BuildActionEntries>
52 + </BuildAction>
53 + <TestAction
54 + buildConfiguration = "Debug"
55 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
56 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
57 + shouldUseLaunchSchemeArgsEnv = "YES">
58 + <Testables>
59 + <TestableReference
60 + skipped = "NO">
61 + <BuildableReference
62 + BuildableIdentifier = "primary"
63 + BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7"
64 + BuildableName = "TestProject-tvOSTests.xctest"
65 + BlueprintName = "TestProject-tvOSTests"
66 + ReferencedContainer = "container:TestProject.xcodeproj">
67 + </BuildableReference>
68 + </TestableReference>
69 + </Testables>
70 + <MacroExpansion>
71 + <BuildableReference
72 + BuildableIdentifier = "primary"
73 + BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
74 + BuildableName = "TestProject-tvOS.app"
75 + BlueprintName = "TestProject-tvOS"
76 + ReferencedContainer = "container:TestProject.xcodeproj">
77 + </BuildableReference>
78 + </MacroExpansion>
79 + <AdditionalOptions>
80 + </AdditionalOptions>
81 + </TestAction>
82 + <LaunchAction
83 + buildConfiguration = "Debug"
84 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
85 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
86 + launchStyle = "0"
87 + useCustomWorkingDirectory = "NO"
88 + ignoresPersistentStateOnLaunch = "NO"
89 + debugDocumentVersioning = "YES"
90 + debugServiceExtension = "internal"
91 + allowLocationSimulation = "YES">
92 + <BuildableProductRunnable
93 + runnableDebuggingMode = "0">
94 + <BuildableReference
95 + BuildableIdentifier = "primary"
96 + BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
97 + BuildableName = "TestProject-tvOS.app"
98 + BlueprintName = "TestProject-tvOS"
99 + ReferencedContainer = "container:TestProject.xcodeproj">
100 + </BuildableReference>
101 + </BuildableProductRunnable>
102 + <AdditionalOptions>
103 + </AdditionalOptions>
104 + </LaunchAction>
105 + <ProfileAction
106 + buildConfiguration = "Release"
107 + shouldUseLaunchSchemeArgsEnv = "YES"
108 + savedToolIdentifier = ""
109 + useCustomWorkingDirectory = "NO"
110 + debugDocumentVersioning = "YES">
111 + <BuildableProductRunnable
112 + runnableDebuggingMode = "0">
113 + <BuildableReference
114 + BuildableIdentifier = "primary"
115 + BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
116 + BuildableName = "TestProject-tvOS.app"
117 + BlueprintName = "TestProject-tvOS"
118 + ReferencedContainer = "container:TestProject.xcodeproj">
119 + </BuildableReference>
120 + </BuildableProductRunnable>
121 + </ProfileAction>
122 + <AnalyzeAction
123 + buildConfiguration = "Debug">
124 + </AnalyzeAction>
125 + <ArchiveAction
126 + buildConfiguration = "Release"
127 + revealArchiveInOrganizer = "YES">
128 + </ArchiveAction>
129 +</Scheme>
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<Scheme
3 + LastUpgradeVersion = "0940"
4 + version = "1.3">
5 + <BuildAction
6 + parallelizeBuildables = "NO"
7 + buildImplicitDependencies = "YES">
8 + <BuildActionEntries>
9 + <BuildActionEntry
10 + buildForTesting = "YES"
11 + buildForRunning = "YES"
12 + buildForProfiling = "YES"
13 + buildForArchiving = "YES"
14 + buildForAnalyzing = "YES">
15 + <BuildableReference
16 + BuildableIdentifier = "primary"
17 + BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192"
18 + BuildableName = "libReact.a"
19 + BlueprintName = "React"
20 + ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
21 + </BuildableReference>
22 + </BuildActionEntry>
23 + <BuildActionEntry
24 + buildForTesting = "YES"
25 + buildForRunning = "YES"
26 + buildForProfiling = "YES"
27 + buildForArchiving = "YES"
28 + buildForAnalyzing = "YES">
29 + <BuildableReference
30 + BuildableIdentifier = "primary"
31 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
32 + BuildableName = "TestProject.app"
33 + BlueprintName = "TestProject"
34 + ReferencedContainer = "container:TestProject.xcodeproj">
35 + </BuildableReference>
36 + </BuildActionEntry>
37 + <BuildActionEntry
38 + buildForTesting = "YES"
39 + buildForRunning = "YES"
40 + buildForProfiling = "NO"
41 + buildForArchiving = "NO"
42 + buildForAnalyzing = "YES">
43 + <BuildableReference
44 + BuildableIdentifier = "primary"
45 + BlueprintIdentifier = "00E356ED1AD99517003FC87E"
46 + BuildableName = "TestProjectTests.xctest"
47 + BlueprintName = "TestProjectTests"
48 + ReferencedContainer = "container:TestProject.xcodeproj">
49 + </BuildableReference>
50 + </BuildActionEntry>
51 + </BuildActionEntries>
52 + </BuildAction>
53 + <TestAction
54 + buildConfiguration = "Debug"
55 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
56 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
57 + shouldUseLaunchSchemeArgsEnv = "YES">
58 + <Testables>
59 + <TestableReference
60 + skipped = "NO">
61 + <BuildableReference
62 + BuildableIdentifier = "primary"
63 + BlueprintIdentifier = "00E356ED1AD99517003FC87E"
64 + BuildableName = "TestProjectTests.xctest"
65 + BlueprintName = "TestProjectTests"
66 + ReferencedContainer = "container:TestProject.xcodeproj">
67 + </BuildableReference>
68 + </TestableReference>
69 + </Testables>
70 + <MacroExpansion>
71 + <BuildableReference
72 + BuildableIdentifier = "primary"
73 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
74 + BuildableName = "TestProject.app"
75 + BlueprintName = "TestProject"
76 + ReferencedContainer = "container:TestProject.xcodeproj">
77 + </BuildableReference>
78 + </MacroExpansion>
79 + <AdditionalOptions>
80 + </AdditionalOptions>
81 + </TestAction>
82 + <LaunchAction
83 + buildConfiguration = "Debug"
84 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
85 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
86 + launchStyle = "0"
87 + useCustomWorkingDirectory = "NO"
88 + ignoresPersistentStateOnLaunch = "NO"
89 + debugDocumentVersioning = "YES"
90 + debugServiceExtension = "internal"
91 + allowLocationSimulation = "YES">
92 + <BuildableProductRunnable
93 + runnableDebuggingMode = "0">
94 + <BuildableReference
95 + BuildableIdentifier = "primary"
96 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
97 + BuildableName = "TestProject.app"
98 + BlueprintName = "TestProject"
99 + ReferencedContainer = "container:TestProject.xcodeproj">
100 + </BuildableReference>
101 + </BuildableProductRunnable>
102 + <AdditionalOptions>
103 + </AdditionalOptions>
104 + </LaunchAction>
105 + <ProfileAction
106 + buildConfiguration = "Release"
107 + shouldUseLaunchSchemeArgsEnv = "YES"
108 + savedToolIdentifier = ""
109 + useCustomWorkingDirectory = "NO"
110 + debugDocumentVersioning = "YES">
111 + <BuildableProductRunnable
112 + runnableDebuggingMode = "0">
113 + <BuildableReference
114 + BuildableIdentifier = "primary"
115 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
116 + BuildableName = "TestProject.app"
117 + BlueprintName = "TestProject"
118 + ReferencedContainer = "container:TestProject.xcodeproj">
119 + </BuildableReference>
120 + </BuildableProductRunnable>
121 + </ProfileAction>
122 + <AnalyzeAction
123 + buildConfiguration = "Debug">
124 + </AnalyzeAction>
125 + <ArchiveAction
126 + buildConfiguration = "Release"
127 + revealArchiveInOrganizer = "YES">
128 + </ArchiveAction>
129 +</Scheme>
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +#import <React/RCTBridgeDelegate.h>
9 +#import <UIKit/UIKit.h>
10 +
11 +@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
12 +
13 +@property (nonatomic, strong) UIWindow *window;
14 +
15 +@end
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +#import "AppDelegate.h"
9 +
10 +#import <React/RCTBridge.h>
11 +#import <React/RCTBundleURLProvider.h>
12 +#import <React/RCTRootView.h>
13 +
14 +@implementation AppDelegate
15 +
16 +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
17 +{
18 + RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
19 + RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
20 + moduleName:@"TestProject"
21 + initialProperties:nil];
22 +
23 + rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
24 +
25 + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
26 + UIViewController *rootViewController = [UIViewController new];
27 + rootViewController.view = rootView;
28 + self.window.rootViewController = rootViewController;
29 + [self.window makeKeyAndVisible];
30 + return YES;
31 +}
32 +
33 +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
34 +{
35 +#if DEBUG
36 + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
37 +#else
38 + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
39 +#endif
40 +}
41 +
42 +@end
1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
3 + <dependencies>
4 + <deployment identifier="iOS"/>
5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
6 + <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
7 + </dependencies>
8 + <objects>
9 + <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
10 + <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
11 + <view contentMode="scaleToFill" id="iN0-l3-epB">
12 + <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
13 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
14 + <subviews>
15 + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
16 + <rect key="frame" x="20" y="439" width="441" height="21"/>
17 + <fontDescription key="fontDescription" type="system" pointSize="17"/>
18 + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
19 + <nil key="highlightedColor"/>
20 + </label>
21 + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="TestProject" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
22 + <rect key="frame" x="20" y="140" width="441" height="43"/>
23 + <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
24 + <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
25 + <nil key="highlightedColor"/>
26 + </label>
27 + </subviews>
28 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
29 + <constraints>
30 + <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
31 + <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
32 + <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
33 + <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
34 + <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
35 + <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
36 + </constraints>
37 + <nil key="simulatedStatusBarMetrics"/>
38 + <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
39 + <point key="canvasLocation" x="548" y="455"/>
40 + </view>
41 + </objects>
42 +</document>
1 +{
2 + "images" : [
3 + {
4 + "idiom" : "iphone",
5 + "size" : "29x29",
6 + "scale" : "2x"
7 + },
8 + {
9 + "idiom" : "iphone",
10 + "size" : "29x29",
11 + "scale" : "3x"
12 + },
13 + {
14 + "idiom" : "iphone",
15 + "size" : "40x40",
16 + "scale" : "2x"
17 + },
18 + {
19 + "idiom" : "iphone",
20 + "size" : "40x40",
21 + "scale" : "3x"
22 + },
23 + {
24 + "idiom" : "iphone",
25 + "size" : "60x60",
26 + "scale" : "2x"
27 + },
28 + {
29 + "idiom" : "iphone",
30 + "size" : "60x60",
31 + "scale" : "3x"
32 + }
33 + ],
34 + "info" : {
35 + "version" : 1,
36 + "author" : "xcode"
37 + }
38 +}
...\ No newline at end of file ...\ No newline at end of file
1 +{
2 + "info" : {
3 + "version" : 1,
4 + "author" : "xcode"
5 + }
6 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleDisplayName</key>
8 + <string>TestProject</string>
9 + <key>CFBundleExecutable</key>
10 + <string>$(EXECUTABLE_NAME)</string>
11 + <key>CFBundleIdentifier</key>
12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
13 + <key>CFBundleInfoDictionaryVersion</key>
14 + <string>6.0</string>
15 + <key>CFBundleName</key>
16 + <string>$(PRODUCT_NAME)</string>
17 + <key>CFBundlePackageType</key>
18 + <string>APPL</string>
19 + <key>CFBundleShortVersionString</key>
20 + <string>1.0</string>
21 + <key>CFBundleSignature</key>
22 + <string>????</string>
23 + <key>CFBundleVersion</key>
24 + <string>1</string>
25 + <key>LSRequiresIPhoneOS</key>
26 + <true/>
27 + <key>NSAppTransportSecurity</key>
28 + <dict>
29 + <key>NSAllowsArbitraryLoads</key>
30 + <true/>
31 + <key>NSExceptionDomains</key>
32 + <dict>
33 + <key>localhost</key>
34 + <dict>
35 + <key>NSExceptionAllowsInsecureHTTPLoads</key>
36 + <true/>
37 + </dict>
38 + </dict>
39 + </dict>
40 + <key>NSLocationWhenInUseUsageDescription</key>
41 + <string/>
42 + <key>UILaunchStoryboardName</key>
43 + <string>LaunchScreen</string>
44 + <key>UIRequiredDeviceCapabilities</key>
45 + <array>
46 + <string>armv7</string>
47 + </array>
48 + <key>UISupportedInterfaceOrientations</key>
49 + <array>
50 + <string>UIInterfaceOrientationPortrait</string>
51 + <string>UIInterfaceOrientationLandscapeLeft</string>
52 + <string>UIInterfaceOrientationLandscapeRight</string>
53 + </array>
54 + <key>UIViewControllerBasedStatusBarAppearance</key>
55 + <false/>
56 + <key>UIAppFonts</key>
57 + <array/>
58 +</dict>
59 +</plist>
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +#import <UIKit/UIKit.h>
9 +
10 +#import "AppDelegate.h"
11 +
12 +int main(int argc, char * argv[]) {
13 + @autoreleasepool {
14 + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15 + }
16 +}
1 +<?xml version="1.0" encoding="UTF-8"?>
2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 +<plist version="1.0">
4 +<dict>
5 + <key>CFBundleDevelopmentRegion</key>
6 + <string>en</string>
7 + <key>CFBundleExecutable</key>
8 + <string>$(EXECUTABLE_NAME)</string>
9 + <key>CFBundleIdentifier</key>
10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11 + <key>CFBundleInfoDictionaryVersion</key>
12 + <string>6.0</string>
13 + <key>CFBundleName</key>
14 + <string>$(PRODUCT_NAME)</string>
15 + <key>CFBundlePackageType</key>
16 + <string>BNDL</string>
17 + <key>CFBundleShortVersionString</key>
18 + <string>1.0</string>
19 + <key>CFBundleSignature</key>
20 + <string>????</string>
21 + <key>CFBundleVersion</key>
22 + <string>1</string>
23 +</dict>
24 +</plist>
1 +/**
2 + * Copyright (c) Facebook, Inc. and its affiliates.
3 + *
4 + * This source code is licensed under the MIT license found in the
5 + * LICENSE file in the root directory of this source tree.
6 + */
7 +
8 +#import <UIKit/UIKit.h>
9 +#import <XCTest/XCTest.h>
10 +
11 +#import <React/RCTLog.h>
12 +#import <React/RCTRootView.h>
13 +
14 +#define TIMEOUT_SECONDS 600
15 +#define TEXT_TO_LOOK_FOR @"Welcome to React"
16 +
17 +@interface TestProjectTests : XCTestCase
18 +
19 +@end
20 +
21 +@implementation TestProjectTests
22 +
23 +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
24 +{
25 + if (test(view)) {
26 + return YES;
27 + }
28 + for (UIView *subview in [view subviews]) {
29 + if ([self findSubviewInView:subview matching:test]) {
30 + return YES;
31 + }
32 + }
33 + return NO;
34 +}
35 +
36 +- (void)testRendersWelcomeScreen
37 +{
38 + UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
39 + NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
40 + BOOL foundElement = NO;
41 +
42 + __block NSString *redboxError = nil;
43 +#ifdef DEBUG
44 + RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
45 + if (level >= RCTLogLevelError) {
46 + redboxError = message;
47 + }
48 + });
49 +#endif
50 +
51 + while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
52 + [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
53 + [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
54 +
55 + foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
56 + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
57 + return YES;
58 + }
59 + return NO;
60 + }];
61 + }
62 +
63 +#ifdef DEBUG
64 + RCTSetLogFunction(RCTDefaultLogFunction);
65 +#endif
66 +
67 + XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
68 + XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
69 +}
70 +
71 +
72 +@end
1 +/**
2 + * Metro configuration for React Native
3 + * https://github.com/facebook/react-native
4 + *
5 + * @format
6 + */
7 +
8 +module.exports = {
9 + transformer: {
10 + getTransformOptions: async () => ({
11 + transform: {
12 + experimentalImportSupport: false,
13 + inlineRequires: false,
14 + },
15 + }),
16 + },
17 +};
This diff could not be displayed because it is too large.
1 +{
2 + "name": "TestProject",
3 + "version": "0.0.1",
4 + "private": true,
5 + "scripts": {
6 + "android": "react-native run-android",
7 + "ios": "react-native run-ios",
8 + "start": "react-native start",
9 + "test": "jest",
10 + "lint": "eslint ."
11 + },
12 + "dependencies": {
13 + "aws-sdk": "^2.589.0",
14 + "d3": "^5.14.2",
15 + "express": "^4.17.1",
16 + "react": "16.9.0",
17 + "react-native": "0.61.4",
18 + "react-native-gesture-handler": "^1.5.0",
19 + "react-native-reanimated": "^1.4.0",
20 + "react-native-screens": "^2.0.0-alpha.8",
21 + "react-native-segmented-control-tab": "^3.4.1",
22 + "react-native-svg": "^9.13.6",
23 + "react-native-svg-charts": "^5.3.0",
24 + "react-native-table-component": "^1.2.1",
25 + "react-native-vector-icons": "^6.6.0",
26 + "react-navigation": "^4.0.10",
27 + "react-navigation-drawer": "^2.3.3",
28 + "react-navigation-stack": "^1.10.3",
29 + "react-navigation-tabs": "^2.5.6",
30 + "realm": "^3.6.0"
31 + },
32 + "devDependencies": {
33 + "@babel/core": "^7.7.2",
34 + "@babel/runtime": "^7.7.2",
35 + "@react-native-community/eslint-config": "^0.0.5",
36 + "babel-jest": "^24.9.0",
37 + "eslint": "^6.6.0",
38 + "jest": "^24.9.0",
39 + "metro-react-native-babel-preset": "^0.57.0",
40 + "react-test-renderer": "16.9.0"
41 + },
42 + "jest": {
43 + "preset": "react-native"
44 + }
45 +}
1 +import React, { Component } from 'react';
2 +import { View, Text, StyleSheet,ScrollView, RefreshControl } from 'react-native';
3 +import HistoryGraph from '../component/HistoryGraph'
4 +import SegmentedControlTab from "react-native-segmented-control-tab";
5 +import {get_id, add_data, get_week_data, get_month_data, get_year_data, get_recent_date} from'../component/DBhelper.js';
6 +
7 +//var today = new Date();
8 +//today.setHours(today.getHours()+9);
9 +
10 +function total(list){
11 + sum = 0;
12 + for(var i =0; i< list.length; i++)
13 + sum += list[i].value;
14 + return sum
15 +}
16 +
17 +export default class HomeTab extends Component {
18 + constructor(){
19 + super();
20 + this.state = {
21 + selectedIndex: 0,
22 + data: get_week_data(),
23 + title: "총 " + total(get_week_data())/1000 + "kg",
24 + spane: "",
25 + refreshing: false,
26 + ID: get_id(),
27 + }
28 + }
29 +
30 + _onRefresh = () => {
31 + this.setState({refresing: true});
32 + this.get_diff_data();
33 + this.setState({refreshing: false});
34 + }
35 +
36 + componentDidMount() {
37 + const { navigation } = this.props;
38 + this.focusListener = navigation.addListener('didFocus', () => {
39 + this.handleIndexChange(this.state.selectedIndex);
40 + });
41 + }
42 +
43 + componentWillUnmount() {
44 + this.focusListener.remove();
45 + }
46 +
47 + handleIndexChange = index => {
48 + this.setState({selectedIndex: index});
49 + switch(index){
50 + case 0:
51 + this.setState({data: get_week_data(), title: "총 " + total(get_week_data())/1000 + "kg"});
52 + break;
53 + case 1:
54 + this.setState({data: get_month_data(), title: "총 " + total(get_month_data())/1000 + "kg"});
55 + break;
56 + case 2:
57 + this.setState({data: get_year_data(), title: "총 " + total(get_year_data())/1000 + "kg"});
58 + break;
59 + }
60 + };
61 +
62 + get_diff_data(){
63 + return fetch('http://testloadbalancer-1847561458.ap-northeast-2.elb.amazonaws.com/app/get_diff_data/',{
64 + method:'POST',
65 + headers: {
66 + 'Accept': 'application/json',
67 + 'Content-Type': 'application/json',
68 + },
69 + body:JSON.stringify({
70 + ras_id : this.state.ID,
71 + date : String(get_recent_date()),
72 + }),
73 + })
74 + .then((response) => response.json())
75 + .then((responseJson)=> {
76 + console.log(responseJson)
77 + add_data(responseJson)
78 + },function(){
79 + })
80 + .then(()=>{this.handleIndexChange(this.state.selectedIndex)})
81 + .catch((error) => {
82 + console.error(error);
83 + })
84 + }
85 +
86 + render() {
87 + return(
88 + <ScrollView style = {style.container}
89 + refreshControl={
90 + <RefreshControl
91 + refreshing={this.state.refreshing}
92 + onRefresh={this._onRefresh}
93 + tintColor="#000000"
94 + title="Loading..."
95 + titleColor="#0066cc"
96 + colors={["#ffffff",'#0066cc','#ffffff']}
97 + progressBackgroundColor="#0066cc"
98 + />
99 + }
100 + >
101 + <View style = {style.container}>
102 + <View style={style.header}>
103 + <Text style={style.tabName}>History </Text>
104 + </View>
105 +
106 + <View style={{justifyContent:'center', padding: 10}}>
107 + <SegmentedControlTab
108 + values={["Week", "Month", "Year"]}
109 + selectedIndex={this.state.selectedIndex}
110 + onTabPress={this.handleIndexChange}
111 + />
112 + </View>
113 + <View style={{flex : 8, justifyContent:'center', padding: 10}}>
114 + <Text style ={style.date_text}>{this.state.title}</Text>
115 + </View>
116 + <HistoryGraph data={this.state.data} round={1000} unit="g"/>
117 + </View>
118 + </ScrollView>
119 + )
120 + }
121 +}
122 +
123 +const style = StyleSheet.create({
124 + container: {
125 + flex: 1,
126 + },
127 + header: {
128 + flex :2,
129 + justifyContent : 'center',
130 + padding : 10,
131 + },
132 + tabName:{
133 + marginStart : 10,
134 + textAlignVertical : 'center',
135 + fontSize : 20,
136 + color : "#0066cc",
137 + fontWeight: 'bold',
138 + },
139 + date_text:{
140 + fontSize :20,
141 + marginStart:5,
142 + textAlignVertical:'center'
143 + }
144 +})
...\ No newline at end of file ...\ No newline at end of file
1 +import React, { Component } from 'react';
2 +import { View, Text, StyleSheet, SafeAreaView, ScrollView, Image } from 'react-native';
3 +import Circle from '../component/circle_component'
4 +import {Table, TableWrapper, Row,Rows} from 'react-native-table-component'
5 +import {get_now_weight, get_today_data, add_data ,get_id, get_recent_date} from'../component/DBhelper.js';
6 +
7 +var date = new Date();
8 +date.setHours(date.getHours()+9);
9 +var month = date.getMonth()+1;
10 +if(month == 11){
11 + month = 12
12 +}
13 +
14 +export default class HomeTab extends Component {
15 + constructor(props){
16 + super(props);
17 + this.state = {
18 + ID : get_id(),
19 + today : date.getFullYear() + "." + month + "." + date.getDate(),
20 + current_weight : get_now_weight() ,
21 + table_contents : get_today_data()
22 + }
23 + }
24 + componentDidMount() {
25 + const { navigation } = this.props;
26 + this.focusListener = navigation.addListener('didFocus', () => {
27 + this.setState({current_weight : get_now_weight(), table_contents : get_today_data()});
28 + });
29 + }
30 +
31 + componentWillUnmount() {
32 + this.focusListener.remove();
33 + }
34 +
35 + get_diff_data(){
36 + return fetch('http://testloadbalancer-1847561458.ap-northeast-2.elb.amazonaws.com/app/get_diff_data/',{
37 + method:'POST',
38 + headers: {
39 + 'Accept': 'application/json',
40 + 'Content-Type': 'application/json',
41 + },
42 + body:JSON.stringify({
43 + ras_id : this.state.ID,
44 + date : String(get_recent_date()),
45 + }),
46 + })
47 + .then((response) => response.json())
48 + .then((responseJson)=> {
49 + console.log(responseJson)
50 + add_data(responseJson);
51 + },function(){
52 + })
53 + .then(()=>{this.setState({current_weight : get_now_weight(), table_contents : get_today_data()})})
54 + .catch((error) => {
55 + console.error(error);
56 + })
57 + }
58 +
59 + render() {
60 + return (
61 + <View style={style.container}>
62 + <View style={style.header}>
63 + <Text style={style.tabName}>Home</Text>
64 + </View>
65 + <View style={{flexDirection:'row',flex:0.8,backgroundColor: "rgba(230,230,230,0.5)"}}>
66 + <View style={{flex:1,justifyContent:'center'}}>
67 + <Image style={style.img}
68 + source={require("../assets/calendar.jpg")}/>
69 + </View>
70 + <View style={{flex : 8, justifyContent:'center'}}>
71 + <Text style ={style.date_text}>{this.state.today}</Text>
72 + </View>
73 + </View>
74 + <View style={this.state.current_weight}>
75 + <Circle
76 + title={this.state.current_weight/1000}
77 + onPress={()=>{this.get_diff_data()}}>
78 + </Circle>
79 + </View>
80 + <View style={style.waste_detail}>
81 + <SafeAreaView style={style.scroll_container}>
82 + <ScrollView style={style.scroll_page}>
83 + <Text style={style.history}>Today's History</Text>
84 + <Table>
85 + <TableWrapper>
86 + <Row data={['시간', '증가량', '총량']} flexArr={[1, 1, 1]} textStyle={style.row_style1}/>
87 + <Rows data={this.state.table_contents} flexArr={[1, 1, 1]} textStyle={style.row_style2}/>
88 + </TableWrapper>
89 +
90 + </Table>
91 + </ScrollView>
92 + </SafeAreaView>
93 + </View>
94 +
95 + </View>
96 + );
97 + }
98 +}
99 +const style = StyleSheet.create({
100 + container: {
101 + flex: 1,
102 + },
103 + header: {
104 + flex :1,
105 + justifyContent : 'center',
106 + },
107 + tabName:{
108 + marginStart : 10,
109 + textAlignVertical : 'center',
110 + fontSize : 20,
111 + color : "#0066cc",
112 + fontWeight: 'bold',
113 + },
114 + current_state:{
115 + flex: 5,
116 + backgroundColor: "rgba(230,230,230,0.5)"
117 + },
118 + waste_detail:{
119 + flex :5,
120 + backgroundColor: "rgba(230,230,230,0.5)",
121 + },
122 + date_text:{
123 + fontSize :20,
124 + marginStart:5,
125 + textAlignVertical:'center'
126 + },
127 + scroll_container : {
128 + flex:1,
129 + },
130 + scroll_page:{
131 + margin:20,
132 + borderWidth : 1,
133 + },
134 + history : {
135 + fontSize : 22,
136 + marginBottom : 5,
137 + marginStart : 5
138 + },
139 + content:{
140 + fontSize : 15,
141 + },
142 + wrapper: {
143 + flexDirection: 'row'
144 + },
145 + row_style1:{
146 + textAlign : 'center',
147 + fontSize : 18,
148 + marginBottom : 5,
149 + borderBottomWidth:1,
150 + },
151 + row_style2:{
152 + borderBottomWidth:1,
153 + marginVertical : 2,
154 + fontSize : 15,
155 + textAlign : 'center',
156 + },
157 + img:{
158 + width :20,
159 + resizeMode : 'contain',
160 + alignSelf:'baseline',
161 + marginStart:10,
162 + },
163 +});
...\ No newline at end of file ...\ No newline at end of file
1 +import React, { Component } from 'react';
2 +import { View, Text, StyleSheet, TextInput, TouchableOpacity, Image } from 'react-native';
3 +import AddButton from '../component/AddButton'
4 +import {delete_all_data, deleteId, get_id} from '../component/DBhelper'
5 +
6 +var date = new Date();
7 +date.setHours(date.getHours()+9);
8 +
9 +export default class SettingTab extends Component {
10 +
11 + constructor(props){
12 + super(props);
13 + this.state = {
14 + ID : get_id(),
15 + user : 'user1'
16 + }
17 + }
18 +
19 + save_app_data(){
20 + return fetch('http://testloadbalancer-1847561458.ap-northeast-2.elb.amazonaws.com/app/save_data/',{
21 + method:'POST',
22 + headers: {
23 + 'Accept': 'application/json',
24 + 'Content-Type': 'application/json',
25 + },
26 + body:JSON.stringify({
27 + ras_id : this.state.ID,
28 + user_id : this.state.user,
29 + }),
30 + })
31 + .then((response) => console.log(response.json()))
32 + .then((responseJson)=> {
33 + console.log(responseJson)
34 + })
35 + .catch((error) => {
36 + console.error(error);
37 + })
38 + }
39 +
40 + delete_id(){
41 + this.setState({ID: ''})
42 + //save_app_data()
43 + delete_all_data()
44 + deleteId()
45 + this.props.navigation.navigate('Login');
46 + }
47 + render() {
48 + return (
49 + <View style={style.container}>
50 + <View style={style.header}>
51 + <Text style={style.tabName}>Setting</Text>
52 + </View>
53 + <View style={style.content}>
54 + <View style={style.id}>
55 + <Text style={{marginStart:5, marginBottom: 10, fontSize : 15}}>Lasberry PI ID</Text>
56 + <View style={{backgroundColor:'white', height:40,width:'100%',flexDirection:'row', justifyContent:'center', alignItems:'center'}}>
57 + <View style={{flex:8}}>
58 + <Text style={{marginStart:10, fontSize : 15}}>{this.state.ID}</Text>
59 + </View>
60 + <View style={{flex:1}}>
61 + <Image style={style.img}
62 + source={require('../assets/check.jpg')}/>
63 + </View>
64 + </View>
65 + <TouchableOpacity
66 + onPress={()=>this.delete_id()}>
67 + <View style={{backgroundColor:"#0066cc", height:40,width:'100%',flexDirection:'row', justifyContent:'center', alignItems:'center', marginTop:5,}}>
68 + <View style={{flex:8}}>
69 + <Text style={{marginStart:10, fontSize : 15, textAlign:'center'}}>Delete</Text>
70 + </View>
71 + </View>
72 + </TouchableOpacity>
73 + </View>
74 + <View style={style.device}>
75 + <View style={{backgroundColor:'white', height:40,width:'100%',flexDirection:'row', justifyContent:'center', alignItems:'center'}}>
76 + <Text style={{marginStart:10, fontSize : 15}}>Connect New Device</Text>
77 + </View>
78 + <View style={{backgroundColor:'white', height:40,width:'100%', alignItems:'center', marginTop:5}}>
79 + <TextInput style={{marginStart:10}}
80 + placeholder="New Rasberry ID"
81 + value={this.state.text}
82 + onChangeText={(text)=>this.setState({ID:text})}/>
83 + </View>
84 + <AddButton
85 + onPress={()=>{this.save_app_data}}/>
86 + </View>
87 + </View>
88 + </View>
89 + );
90 + }
91 +}
92 +
93 +const style = StyleSheet.create({
94 + container: {
95 + flex: 1,
96 + },
97 + header: {
98 + flex :1,
99 + justifyContent : 'center',
100 + },
101 + tabName:{
102 + marginStart : 10,
103 + textAlignVertical : 'center',
104 + fontSize : 20,
105 + color : "#0066cc",
106 + fontWeight: 'bold',
107 + },
108 + content:{
109 + flex : 8.8,
110 + backgroundColor:"rgba(230,230,230,0.5)",
111 + justifyContent : 'center',
112 + padding : 20,
113 + },
114 + blank :{
115 + flex:3,
116 + },
117 + id:{
118 + alignSelf:'center',
119 + width:'100%',
120 + justifyContent:'center',
121 + flex:1,
122 + },
123 + device:{
124 + flex : 1,
125 + },
126 + blank :{
127 + flex:3,
128 + },
129 + img:{
130 + width : 30,
131 + resizeMode : 'contain',
132 + }
133 +});
...\ No newline at end of file ...\ No newline at end of file
1 +import React, { Component } from 'react';
2 +import { StyleSheet, Text, View, TextInput, Image} from 'react-native';
3 +import LoginButton from './component/LoginButton';
4 +import {add_data} from'./component/DBhelper.js';
5 +
6 +export default class Login extends Component {
7 +
8 + constructor(props) {
9 + super(props);
10 + this.state = {
11 + ID: '',
12 + }
13 + }
14 + static navigationOptions = {
15 + title: 'Login',
16 + };
17 +
18 + getdata() {
19 + return fetch('http://testloadbalancer-1847561458.ap-northeast-2.elb.amazonaws.com/app/get_data/'+this.state.ID)
20 + .then((response) => response.json())
21 + .then((responseJson) => {
22 + add_data(responseJson);
23 + })
24 + .catch((error) => {
25 + console.error(error);
26 + });
27 + }
28 +
29 + navigate(){
30 +
31 + }
32 +
33 + render() {
34 + return (
35 + <View style={styles.container}>
36 + <View style={styles.header}>
37 + <Text
38 + style={{textAlign : 'center', fontSize : 50, marginTop:50}}>FW IoT</Text>
39 + </View>
40 + <View style={styles.logo}>
41 + <Image
42 + style = {styles.img}
43 + source={require('./assets/logo.png')}/>
44 + </View>
45 + <View style={styles.input_div}>
46 + <View
47 + style={StyleSheet.inputPart}>
48 + <Text
49 + style={{textAlign:'center',fontSize : 40, marginTop :20}}>Food Waste IoT</Text>
50 + <Text
51 + style={{textAlign:'center',fontSize : 15, marginTop :20}}>기기 등록</Text>
52 + <TextInput
53 + style={styles.input}
54 + placeholder="ID"
55 + placeholderTextColor="#66b3ff"
56 + value={this.state.text}
57 + onChangeText={(text) => {this.setState({ID:text})}}
58 + />
59 + <LoginButton
60 + onPress={() =>{ this.getdata().then(()=>{this.props.navigation.navigate('MainScreen', { ID: this.state.ID })}) }}
61 + />
62 + </View>
63 + </View>
64 + <View style={styles.footer}>
65 +
66 + </View>
67 + </View>
68 + );
69 + }
70 +}
71 +
72 +
73 +const styles = StyleSheet.create({
74 + input: {
75 + height: 50,
76 + width: 250,
77 + fontSize: 20,
78 + alignSelf: 'center',
79 + borderColor: "#0066cc",
80 + borderWidth: 1,
81 + backgroundColor:"white",
82 + borderRadius: 10,
83 + marginTop : 20,
84 + },
85 + input_title: {
86 + textAlign:'center',
87 + fontSize : 40,
88 + marginTop :20,
89 + },
90 + container: {
91 + flex: 1,
92 + backgroundColor: 'white',
93 + },
94 + header: {
95 + flex: 2,
96 + backgroundColor: 'white',
97 + },
98 + logo: {
99 + flex: 4,
100 + justifyContent: "center",
101 + alignItems: "center",
102 + },
103 + input_div :{
104 + flex: 4,
105 + backgroundColor: "rgba(230,230,230,0.5)",
106 + borderRadius : 20,
107 + margin:20,
108 +
109 + },
110 + footer:{
111 + flex : 1,
112 + },
113 + img:{
114 + width:200,
115 + resizeMode: 'contain',
116 + alignSelf :'center',
117 + marginStart : 30,
118 + },
119 +});
1 +import React, { Component } from 'react';
2 +import { StyleSheet, Platform, View, Text } from 'react-native';
3 +import { createAppContainer } from 'react-navigation';
4 +import { createMaterialTopTabNavigator } from 'react-navigation-tabs'
5 +import HomeTab from './AppTabNavigator/HomeTab'
6 +import HistoryTab from './AppTabNavigator/HistoryTab'
7 +import SettingTab from './AppTabNavigator/SettingTab'
8 +import {registerID} from '../source/component/DBhelper'
9 +
10 +// 하단 탭 네비게이터 생성
11 +const AppTabNavigator = createMaterialTopTabNavigator({
12 + Home: { screen: HomeTab },
13 + History: { screen: HistoryTab },
14 + Setting: { screen: SettingTab }
15 +},{
16 + animationEnabled: true,
17 + swipeEnabled: true,
18 + tabBarPosition: "bottom",
19 + tabBarOptions: {
20 + style: {
21 + ...Platform.select({
22 + android:{
23 + backgroundColor:'white',
24 + }
25 + })
26 + },
27 + iconStyle: { height: 10 },
28 + activeTintColor: '#000',
29 + inactiveTintColor: '#d1cece',
30 + upperCaseLabel: true,
31 + showLabel: true,
32 + showIcon: true,
33 + }
34 +});
35 +
36 +const AppTabContainer = createAppContainer(AppTabNavigator);
37 +
38 +export default class MainScreen extends Component {
39 +
40 + constructor(props) {
41 + super(props);
42 + this.state = {
43 + ID: this.props.navigation.getParam('ID',''),
44 + };
45 + }
46 + static navigationOptions = {
47 + title: 'FW IOT'
48 + }
49 +
50 + render() {
51 + registerID(this.state.ID);
52 + return <AppTabContainer/>; // AppTabContainer 컴포넌트를 리턴한다.
53 + }
54 +}
55 +
56 +const styles = StyleSheet.create({
57 + container: {
58 + flex: 1,
59 + alignItems: 'center',
60 + justifyContent: 'center',
61 + },
62 +});
63 +
1 +import React, { Component } from 'react';
2 +import {
3 + TouchableOpacity,
4 + Text,
5 + StyleSheet,
6 +} from 'react-native';
7 +
8 +export default class AddButton extends Component {
9 + constructor(props) {
10 + super(props);
11 + }
12 +
13 + static defaultProps = {
14 + onPress: () => null,
15 + }
16 +
17 + render() {
18 + return (
19 + <TouchableOpacity
20 + style={styles.button}
21 + onPress={this.props.onPress}
22 + >
23 + <Text style={styles.title}>Register</Text>
24 + </TouchableOpacity>
25 + )
26 + }
27 +}
28 +
29 +const styles = StyleSheet.create({
30 + button: {
31 + alignSelf: 'center',
32 + padding: 10,
33 + backgroundColor: "#0066cc",
34 + width: 100,
35 + height: 30,
36 + marginTop: 10,
37 + borderRadius : 20,
38 + justifyContent : 'center',
39 +
40 + },
41 + title: {
42 + fontSize: 15,
43 + color: 'white',
44 + textAlign: 'center',
45 + textAlignVertical : 'center',
46 + },
47 +});
...\ No newline at end of file ...\ No newline at end of file
1 +// Define your models and their properties
2 +import Realm from 'realm'
3 +
4 +class Waste {}
5 +Waste.schema = {
6 + name: 'Waste',
7 + properties: {
8 + weight: 'int',
9 + diff: 'int',
10 + date: 'float',
11 + }
12 +};
13 +
14 +class ID {}
15 +ID.schema={
16 + name:'ID',
17 + properties:{
18 + id : 'string',
19 + }
20 +};
21 +
22 +export function registerID(_id){
23 + if(_id != ''){
24 + realm.write(()=>{
25 + let user = realm.create('ID',{id:_id});
26 + console.log('success')
27 + });
28 + }
29 +}
30 +
31 +export function checkUser(){
32 + let user = realm.objects('ID');
33 + console.log(user.length);
34 + if(user.length>0)
35 + return true;
36 + return false;
37 +}
38 +
39 +export function get_id(){
40 + let user = realm.objects('ID');
41 + return user[0].id;
42 +}
43 +
44 +export function deleteId(){
45 + let user = realm.objects('ID');
46 + realm.write(()=>{
47 + realm.delete(user);
48 + console.log('success')
49 + })
50 +}
51 +
52 +// Get the default Realm with support for our objects
53 +let realm = new Realm({schema: [Waste, ID]});
54 +export function add_data(responseJson){
55 + for(var i = 0; i < responseJson.length; i++){
56 + realm.write(() => {
57 + // responseJson[0].ras_id.S
58 + let myWaste = realm.create('Waste', {
59 + weight: parseFloat(responseJson[i].weight.N),
60 + diff: parseFloat(responseJson[i].diff.N),
61 + date: parseFloat(responseJson[i].save_date.S),
62 + });
63 + });
64 +
65 + console.log(responseJson[i].save_date.S)
66 + }
67 + return responseJson.length;
68 +}
69 +
70 +export function get_now_weight(){
71 + let wastes = realm.objects('Waste');
72 + let recent = wastes.max('date');
73 +
74 + var recentWeight = wastes.filtered('date = $0', recent);
75 + console.log("now_weight",recentWeight)
76 + if(recentWeight.length != 0)
77 + return recentWeight[recentWeight.length-1].weight;
78 + else
79 + return 0;
80 +}
81 +
82 +export function get_last_update(){
83 + let recent = realm.objects('Waste').max('date');
84 + let recentWeight = wastes.filtered('date = %0', recent);
85 + console.log(recentWeight[0].weight)
86 + return recentWeight[0].weight;
87 +}
88 +
89 +export function get_recent_date(){
90 +
91 + return realm.objects('Waste').max("date");
92 +}
93 +
94 +export function get_today_data(){
95 + var today_start = get_today_start();
96 + console.log("today_start: ",today_start)
97 + let wastes = realm.objects('Waste').filtered('date >= $0',today_start);
98 + var list = [];
99 + for(var i = 0; i < wastes.length; i++){
100 + var save_time = new Date(wastes[i].date);
101 + var temp = [save_time.getHours()+":"+save_time.getMinutes()+":"+save_time.getSeconds(), wastes[i].diff, wastes[i].weight+"g"]
102 + list.push(temp);
103 + }
104 + console.log(list);
105 + console.log("count:", wastes.length)
106 + return list;
107 +}
108 +
109 +export function get_week_data(){
110 + var today = new Date();
111 + var daybefore1 = new Date();
112 + daybefore1.setDate(today.getDate()-1);
113 + var daybefore2 = new Date();
114 + daybefore2.setDate(today.getDate()-2);
115 + var daybefore3 = new Date();
116 + daybefore3.setDate(today.getDate()-3);
117 + var daybefore4 = new Date();
118 + daybefore4.setDate(today.getDate()-4);
119 + var daybefore5 = new Date();
120 + daybefore5.setDate(today.getDate()-5);
121 + var daybefore6 = new Date();
122 + daybefore6.setDate(today.getDate()-6);
123 +
124 + var day = [daybefore6.getDay(), daybefore5.getDay(),daybefore4.getDay(),
125 + daybefore3.getDay(),daybefore2.getDay(),daybefore1.getDay(), today.getDay()]
126 + today = today.getTime();
127 +
128 + daybefore1 = daybefore1.getTime();
129 + daybefore2 = daybefore2.getTime();
130 + daybefore3 = daybefore3.getTime();
131 + daybefore4 = daybefore4.getTime();
132 + daybefore5 = daybefore5.getTime();
133 + daybefore6 = daybefore6.getTime();
134 +
135 + let wastes1 = realm.objects('Waste').filtered('date >= $0 && date <$1', daybefore6, daybefore5).sum('diff');
136 + let wastes2 = realm.objects('Waste').filtered('date >= $0 && date <$1', daybefore5, daybefore4).sum('diff');
137 + let wastes3 = realm.objects('Waste').filtered('date >= $0 && date <$1', daybefore4, daybefore3).sum('diff');
138 + let wastes4 = realm.objects('Waste').filtered('date >= $0 && date <$1', daybefore3, daybefore2).sum('diff');
139 + let wastes5 = realm.objects('Waste').filtered('date >= $0 && date <$1', daybefore2, daybefore1).sum('diff');
140 + let wastes6 = realm.objects('Waste').filtered('date >= $0 && date <$1', daybefore1, today).sum('diff');
141 + let wastes7 = realm.objects('Waste').filtered('date >= $0', today).sum('diff');
142 +
143 +
144 + var week = ['SUN','MON','TUE', 'WED', 'THU', 'FRI', 'SAT'];
145 + var data1 = [
146 + { label: week[day[0]], value: wastes1 },
147 + { label: week[day[1]], value: wastes2 },
148 + { label: week[day[2]], value: wastes3 },
149 + { label: week[day[3]], value: wastes4 },
150 + { label: week[day[4]], value: wastes5 },
151 + { label: week[day[5]], value: wastes6 },
152 + { label: week[day[6]], value: wastes7 }
153 + ]
154 + console.log(data1)
155 + return data1;
156 +}
157 +
158 +function getM_D(time){
159 + console.log("time",time)
160 + var day = new Date(time);
161 + console.log(day.getDate())
162 + return day.getMonth()+1+ "/" +day.getDate();
163 +}
164 +
165 +export function get_month_data(){
166 + var day7 = (24*60*60*1000) * 7;
167 + var today = new Date();
168 + today.setHours(0,0,0,0);
169 + var day = today.getDay();
170 + var diff = today.getDate() - day + (day == 0 ? -6:1);
171 +
172 + var sep5 = new Date(today.setDate(diff));
173 + var sep5 = sep5.getTime();
174 + var sep4 = sep5 - day7;
175 + var sep3 = sep4 - day7;
176 + var sep2 = sep3 - day7;
177 + var sep1 = sep2 - day7;
178 + console.log("first day of week: ", sep5, sep4, sep3, sep2, sep1);
179 +
180 + let wastes1 = realm.objects('Waste').filtered('date >= $0 && date <$1', sep1, sep2).sum('diff');
181 + let wastes2 = realm.objects('Waste').filtered('date >= $0 && date <$1', sep2, sep3).sum('diff');
182 + let wastes3 = realm.objects('Waste').filtered('date >= $0 && date <$1', sep3, sep4).sum('diff');
183 + let wastes4 = realm.objects('Waste').filtered('date >= $0 && date <$1', sep4, sep5).sum('diff');
184 + let wastes5 = realm.objects('Waste').filtered('date >= $0', sep5).sum('diff');
185 +
186 + var data2 = [
187 + { label: getM_D(sep1), value: wastes1 },
188 + { label: getM_D(sep2), value: wastes2 },
189 + { label: getM_D(sep3), value: wastes3 },
190 + { label: getM_D(sep4), value: wastes4 },
191 + { label: getM_D(sep5), value: wastes5 }
192 + ]
193 + console.log(data2)
194 + return data2;
195 +}
196 +
197 +export function get_year_data(){
198 + var today = new Date();
199 + var mon1 = new Date(today.getFullYear(), 0, 1);
200 + var mon2 = new Date(today.getFullYear(), 1, 1);
201 + var mon3 = new Date(today.getFullYear(), 2, 1);
202 + var mon4 = new Date(today.getFullYear(), 3, 1);
203 + var mon5 = new Date(today.getFullYear(), 4, 1);
204 + var mon6 = new Date(today.getFullYear(), 5, 1);
205 + var mon7 = new Date(today.getFullYear(), 6, 1);
206 + var mon8 = new Date(today.getFullYear(), 7, 1);
207 + var mon9 = new Date(today.getFullYear(), 8, 1);
208 + var mon10 = new Date(today.getFullYear(), 9, 1);
209 + var mon11 = new Date(today.getFullYear(), 10, 1);
210 + var mon12 = new Date(today.getFullYear(), 11, 1);
211 + var nYear = new Date(today.getFullYear()+1, 0, 1);
212 +
213 + mon1 = mon1.getTime();
214 + mon2 = mon2.getTime();
215 + mon3 = mon3.getTime();
216 + mon4 = mon4.getTime();
217 + mon5 = mon5.getTime();
218 + mon6 = mon6.getTime();
219 + mon7 = mon7.getTime();
220 + mon8 = mon8.getTime();
221 + mon9 = mon9.getTime();
222 + mon10 = mon10.getTime();
223 + mon11 = mon11.getTime();
224 + mon12 = mon12.getTime();
225 + nYear = nYear.getTime();
226 +
227 +
228 + let wastes1 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon1, mon2).sum('diff');
229 + let wastes2 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon2, mon3).sum('diff');
230 + let wastes3 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon3, mon4).sum('diff');
231 + let wastes4 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon4, mon5).sum('diff');
232 + let wastes5 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon5, mon6).sum('diff');
233 + let wastes6 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon6, mon7).sum('diff');
234 + let wastes7 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon7, mon8).sum('diff');
235 + let wastes8 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon8, mon9).sum('diff');
236 + let wastes9 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon9, mon10).sum('diff');
237 + let wastes10 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon10, mon11).sum('diff');
238 + let wastes11 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon11, mon12).sum('diff');
239 + let wastes12 = realm.objects('Waste').filtered('date >= $0 && date <$1', mon12, nYear).sum('diff');
240 +
241 + var data3 = [
242 + { label: 'Jan', value: wastes1 },
243 + { label: 'Feb', value: wastes2 },
244 + { label: 'Mar', value: wastes3 },
245 + { label: 'Apr', value: wastes4 },
246 + { label: 'May', value: wastes5 },
247 + { label: 'Jun', value: wastes6 },
248 + { label: 'Jul', value: wastes7 },
249 + { label: 'Aug', value: wastes8 },
250 + { label: 'Sep', value: wastes9 },
251 + { label: 'Oct', value: wastes10 },
252 + { label: 'Nov', value: wastes11 },
253 + { label: 'Dec', value: wastes12 }
254 +]
255 +console.log(data3)
256 + return data3;
257 +}
258 +
259 +export function delete_all_data(today){
260 + let all_wastes = realm.objects('Waste');
261 + realm.write(() => {
262 + realm.delete(all_wastes);
263 + })
264 + var wastes = realm.objects('Waste')
265 + console.log("delete, count: ", wastes.length)
266 +}
267 +
268 +function get_today_start(){
269 + var today = new Date();
270 + var dd = today. getDate();
271 + var mm = today.getMonth();
272 + var yyyy = today. getFullYear();
273 +
274 + var togettime = new Date(yyyy,mm,dd).getTime();
275 + console.log(togettime)
276 + return togettime;
277 +}
278 +
1 +import React, { PureComponent } from 'react'
2 +import { View, Text, StyleSheet } from 'react-native';
3 +import { Svg, G, Line, Rect } from 'react-native-svg'
4 +import { Text as SvgText } from 'react-native-svg'
5 +import * as d3 from 'd3'
6 +
7 +const GRAPH_MARGIN = 20
8 +const GRAPH_BAR_WIDTH = 10
9 +const colors = {
10 + axis: '#CED4DA',
11 + bars: '#0066cc',
12 + bardefult: '#CED4DA'
13 +}
14 +
15 +export default class HistoryGraph extends PureComponent {
16 +
17 + constructor(props){
18 + super(props);
19 + this.handleClick = this.handleClick.bind(this);
20 + this.state = {
21 + kg: this.props.data[this.props.data.length - 1].value,
22 + span: this.props.data[this.props.data.length -1].label,
23 + index: this.props.data.length-1
24 + }
25 + }
26 +
27 + handleClick = item => {
28 + this.setState({span: item.label, kg: item.value});
29 + }
30 +
31 + componentDidUpdate(prevProps, prevState){
32 + if (this.props.data !== prevProps.data) {
33 + this.setState({
34 + ...this.state,
35 + kg : this.props.data[this.props.data.length - 1].value,
36 + span: this.props.data[this.props.data.length -1].label,
37 + index: this.props.data.length-1
38 + })
39 + }
40 + }
41 +
42 + render() {
43 + // Dimensions
44 + const SVGHeight = 300
45 + const SVGWidth = 450
46 + const graphHeight = SVGHeight - 2 * GRAPH_MARGIN
47 + const graphWidth = SVGWidth - 2 * GRAPH_MARGIN
48 + const data = this.props.data
49 +
50 + // X scale point
51 + const xDomain = data.map(item => item.label)
52 + const xRange = [0, graphWidth]
53 + const x = d3.scalePoint()
54 + .domain(xDomain)
55 + .range(xRange)
56 + .padding(1)
57 +
58 + // Y scale linear
59 + const maxValue = d3.max(data, d => d.value)
60 + const topValue = Math.ceil(maxValue / this.props.round) * this.props.round
61 + const yDomain = [0, topValue]
62 + const yRange = [0, graphHeight]
63 + const y = d3.scaleLinear()
64 + .domain(yDomain)
65 + .range(yRange)
66 +
67 + // top axis and middle axis
68 + const middleValue = topValue / 2
69 +
70 + return (
71 + <View>
72 + <Svg width={SVGWidth} height={SVGHeight}>
73 + <G y={graphHeight + GRAPH_MARGIN}>
74 + {/* Top value label */}
75 + <SvgText
76 + x={graphWidth}
77 + textAnchor="end"
78 + y={y(topValue) * -1 - 5}
79 + fontSize={15}
80 + fill="black"
81 + fillOpacity={0.4}>
82 + {topValue + ' ' + this.props.unit}
83 + </SvgText>
84 +
85 + {/* top axis */}
86 + <Line
87 + x1="0"
88 + y1={y(topValue) * -1}
89 + x2={graphWidth}
90 + y2={y(topValue) * -1}
91 + stroke={colors.axis}
92 + strokeDasharray={[3, 3]}
93 + strokeWidth="1"
94 + />
95 +
96 + {/* middle axis */}
97 + <Line
98 + x1="0"
99 + y1={y(middleValue) * -1}
100 + x2={graphWidth}
101 + y2={y(middleValue) * -1}
102 + stroke={colors.axis}
103 + strokeDasharray={[3, 3]}
104 + strokeWidth="1"
105 + />
106 +
107 + {/* bottom axis */}
108 + <Line
109 + x1="0"
110 + y1="2"
111 + x2={graphWidth}
112 + y2="2"
113 + stroke={colors.axis}
114 + strokeWidth="1"
115 + />
116 +
117 + {/* bars */}
118 + {data.map(item => (
119 + <Rect
120 + key={'bar' + item.label}
121 + x={x(item.label) - (GRAPH_BAR_WIDTH / 2)}
122 + y={y(item.value) * -1}
123 + rx={2.5}
124 + width={GRAPH_BAR_WIDTH}
125 + height={y(item.value)}
126 + fill = {this.state.span == item.label ? colors.bars : colors.bardefult}
127 + onPress={()=>this.handleClick(item)}
128 + />
129 + ))}
130 +
131 + {/* labels */}
132 + {data.map(item => (
133 + <SvgText
134 + key={'label' + item.label}
135 + fontSize="12"
136 + x={x(item.label)}
137 + y="10"
138 + textAnchor="middle">{item.label}</SvgText>
139 + ))}
140 + </G>
141 + </Svg>
142 + <View style={style.container}>
143 + <Text>{this.state.span}</Text>
144 + <View>
145 + <Text>{this.state.kg/1000}kg</Text>
146 + </View>
147 + </View>
148 + </View>
149 + )
150 + }
151 +}
152 +
153 +const style = StyleSheet.create({
154 + container: {
155 + flex : 8.8,
156 + backgroundColor:"rgba(230,230,230,0.5)",
157 + justifyContent : 'center',
158 + padding : 25,
159 + }
160 +});
...\ No newline at end of file ...\ No newline at end of file
1 +import React, { Component } from 'react';
2 +import {
3 + TouchableOpacity,
4 + Text,
5 + StyleSheet,
6 +} from 'react-native';
7 +
8 +export default class LoginButton extends Component {
9 + constructor(props) {
10 + super(props);
11 + }
12 +
13 + static defaultProps = {
14 + onPress: () => null,
15 + }
16 +
17 + render() {
18 + return (
19 + <TouchableOpacity
20 + style={styles.button}
21 + onPress={this.props.onPress}
22 + >
23 + <Text style={styles.title}>Login</Text>
24 + </TouchableOpacity>
25 + )
26 + }
27 +}
28 +
29 +const styles = StyleSheet.create({
30 + button: {
31 + alignSelf: 'center',
32 + padding: 10,
33 + backgroundColor: "#0066cc",
34 + width: 80,
35 + height: 40,
36 + marginTop: 10,
37 + borderRadius : 20
38 +
39 + },
40 + title: {
41 + fontSize: 15,
42 + color: 'white',
43 + textAlign: 'center',
44 + textAlignVertical : 'center',
45 + },
46 +});
...\ No newline at end of file ...\ No newline at end of file
1 +import React, { Component } from 'react';
2 +import {
3 + TouchableOpacity,
4 + Text,
5 + StyleSheet,
6 +} from 'react-native';
7 +
8 +export default class LoginButton extends Component {
9 + constructor(props) {
10 + super(props);
11 + this.state={
12 + title : '',
13 + }
14 + }
15 +
16 + static defaultProps = {
17 + title : '',
18 + onPress: () => null,
19 + }
20 +
21 + componentDidUpdate(prevProps, prevState){
22 + if (this.props.data !== prevProps.data) {
23 + this.setState({
24 + ...this.state,
25 + title: this.props.data.current_weight
26 + })
27 + }
28 + }
29 +
30 + render() {
31 + return (
32 + <TouchableOpacity
33 + style={styles.button}
34 + onPress={this.props.onPress}
35 + >
36 + <Text style={styles.title}>{this.props.title}kg</Text>
37 + </TouchableOpacity>
38 + )
39 + }
40 +}
41 +
42 +const styles = StyleSheet.create({
43 + button: {
44 + alignSelf: 'center',
45 + padding: 10,
46 + width: 200,
47 + height: 200,
48 + borderRadius : 100,
49 + marginTop : 30,
50 + justifyContent : "center",
51 + alignItems : "center",
52 + borderWidth : 10,
53 + borderColor:"#0066cc"
54 +
55 + },
56 + title: {
57 + fontSize: 30,
58 + textAlign: 'center',
59 + textAlignVertical : 'center',
60 + },
61 +});
...\ No newline at end of file ...\ No newline at end of file
This diff could not be displayed because it is too large.