유희정

기본 설정

Showing 67 changed files with 2191 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 +*.pbxproj -text
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 { createAppContainer } from 'react-navigation';
3 +import { createStackNavigator } from 'react-navigation-stack';
4 +import Login from './source/Login';
5 +import MainScreen from './source/MainScreen';
6 +
7 +const MainNavigator = createStackNavigator({
8 + Login : {screen: Login},
9 + MainScreen : {screen:MainScreen},
10 +},
11 + {initialRouteName: 'Login',headerMode:'none'}
12 +);
13 +
14 +const App = createAppContainer(MainNavigator);
15 +
16 +export default App;
...\ No newline at end of file ...\ No newline at end of file
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.fwiot",
39 +)
40 +
41 +android_resource(
42 + name = "res",
43 + package = "com.fwiot",
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.fwiot"
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 + compile project(':react-native-push-notification')
194 + compile ('com.google.android.gms:play-services-gcm:8.1.0') {
195 + force = true;
196 + }
197 +}
198 +
199 +// Run this once to be able to run the application with BUCK
200 +// puts all compile dependencies into folder libs for BUCK to use
201 +task copyDownloadableDepsToLibs(type: Copy) {
202 + from configurations.compile
203 + into 'libs'
204 +}
205 +
206 +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.fwiot">
3 +
4 + <uses-permission android:name="android.permission.INTERNET" />
5 + <uses-permission android:name="android.permission.WAKE_LOCK" />
6 + <permission
7 + android:name="${applicationId}.permission.C2D_MESSAGE"
8 + android:protectionLevel="signature" />
9 + <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
10 + <uses-permission android:name="android.permission.VIBRATE" />
11 + <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
12 +
13 + <application
14 + android:name=".MainApplication"
15 + android:label="@string/app_name"
16 + android:icon="@mipmap/ic_launcher"
17 + android:roundIcon="@mipmap/ic_launcher_round"
18 + android:allowBackup="false"
19 + android:theme="@style/AppTheme">
20 +
21 + <receiver
22 + android:name="com.google.android.gms.gcm.GcmReceiver"
23 + android:exported="true"
24 + android:permission="com.google.android.c2dm.permission.SEND" >
25 + <intent-filter>
26 + <action android:name="com.google.android.c2dm.intent.RECEIVE" />
27 + <category android:name="${applicationId}" />
28 + </intent-filter>
29 + </receiver>
30 +
31 + <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
32 + <receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
33 + <intent-filter>
34 + <action android:name="android.intent.action.BOOT_COMPLETED" />
35 + </intent-filter>
36 + </receiver>
37 + <service android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationRegistrationService"/>
38 + <service
39 + android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService"
40 + android:exported="false" >
41 + <intent-filter>
42 + <action android:name="com.google.android.c2dm.intent.RECEIVE" />
43 + </intent-filter>
44 + </service>
45 +
46 + <activity
47 + android:name=".MainActivity"
48 + android:label="@string/app_name"
49 + android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
50 + android:windowSoftInputMode="adjustResize">
51 + <intent-filter>
52 + <action android:name="android.intent.action.MAIN" />
53 + <category android:name="android.intent.category.LAUNCHER" />
54 + </intent-filter>
55 + </activity>
56 + <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
57 +
58 + </application>
59 +
60 +
61 +
62 +</manifest>
1 +package com.fwiot;
2 +
3 +import com.facebook.react.ReactActivity;
4 +import com.dieam.reactnativepushnotification.ReactNativePushNotificationPackage;
5 +
6 +public class MainActivity extends ReactActivity implements ReactApplication {
7 +
8 + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
9 + @Override
10 + protected boolean getUseDeveloperSupport() {
11 + return BuildConfig.DEBUG;
12 + }
13 +
14 + @Override
15 + protected List<ReactPackage> getPackages() {
16 +
17 + return Arrays.<ReactPackage>asList(
18 + new MainReactPackage(),
19 + new ReactNativePushNotificationPackage() // <---- Add the Package
20 + );
21 + }
22 + };
23 + /**
24 + * Returns the name of the main component registered from JavaScript. This is used to schedule
25 + * rendering of the component.
26 + */
27 + @Override
28 + protected String getMainComponentName() {
29 + return "FWIoT";
30 + }
31 +}
1 +package com.fwiot;
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">FWIoT</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
No preview for this file type
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 = 'FWIoT'
2 +apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 +include ':app'
4 +include ':react-native-push-notification'
5 +project(':react-native-push-notification').projectDir = file('../node_modules/react-native-push-notification/android')
1 +{
2 + "name": "FWIoT",
3 + "displayName": "FWIoT"
4 +}
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 +module.exports = {
2 + presets: ['module:metro-react-native-babel-preset'],
3 +};
1 +{"web":{"client_id":"978869138601-u3euf0c04sbdor68r30m599gilvjn91e.apps.googleusercontent.com","project_id":"reminder-talk","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"N7Uh_oVQZt-almzA4DkM4bm_"}}
...\ No newline at end of file ...\ No newline at end of file
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 +<?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>
This diff is collapsed. Click to expand it.
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 = "FWIoT-tvOS.app"
33 + BlueprintName = "FWIoT-tvOS"
34 + ReferencedContainer = "container:FWIoT.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 = "FWIoT-tvOSTests.xctest"
47 + BlueprintName = "FWIoT-tvOSTests"
48 + ReferencedContainer = "container:FWIoT.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 = "FWIoT-tvOSTests.xctest"
65 + BlueprintName = "FWIoT-tvOSTests"
66 + ReferencedContainer = "container:FWIoT.xcodeproj">
67 + </BuildableReference>
68 + </TestableReference>
69 + </Testables>
70 + <MacroExpansion>
71 + <BuildableReference
72 + BuildableIdentifier = "primary"
73 + BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
74 + BuildableName = "FWIoT-tvOS.app"
75 + BlueprintName = "FWIoT-tvOS"
76 + ReferencedContainer = "container:FWIoT.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 = "FWIoT-tvOS.app"
98 + BlueprintName = "FWIoT-tvOS"
99 + ReferencedContainer = "container:FWIoT.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 = "FWIoT-tvOS.app"
117 + BlueprintName = "FWIoT-tvOS"
118 + ReferencedContainer = "container:FWIoT.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 = "FWIoT.app"
33 + BlueprintName = "FWIoT"
34 + ReferencedContainer = "container:FWIoT.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 = "FWIoTTests.xctest"
47 + BlueprintName = "FWIoTTests"
48 + ReferencedContainer = "container:FWIoT.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 = "FWIoTTests.xctest"
65 + BlueprintName = "FWIoTTests"
66 + ReferencedContainer = "container:FWIoT.xcodeproj">
67 + </BuildableReference>
68 + </TestableReference>
69 + </Testables>
70 + <MacroExpansion>
71 + <BuildableReference
72 + BuildableIdentifier = "primary"
73 + BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
74 + BuildableName = "FWIoT.app"
75 + BlueprintName = "FWIoT"
76 + ReferencedContainer = "container:FWIoT.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 = "FWIoT.app"
98 + BlueprintName = "FWIoT"
99 + ReferencedContainer = "container:FWIoT.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 = "FWIoT.app"
117 + BlueprintName = "FWIoT"
118 + ReferencedContainer = "container:FWIoT.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:@"FWIoT"
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="FWIoT" 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>FWIoT</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 + <string>BMJUA_ttf.ttf</string>
59 + </array>
60 +</dict>
61 +</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 +/**
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 FWIoTTests : XCTestCase
18 +
19 +@end
20 +
21 +@implementation FWIoTTests
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 +<?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 +platform :ios, '9.0'
2 +require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
3 +
4 +target 'FWIoT' do
5 + # Pods for FWIoT
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 + target 'FWIoTTests' do
38 + inherit! :search_paths
39 + # Pods for testing
40 + end
41 +
42 + use_native_modules!
43 +end
44 +
45 +target 'FWIoT-tvOS' do
46 + # Pods for FWIoT-tvOS
47 +
48 + target 'FWIoT-tvOSTests' do
49 + inherit! :search_paths
50 + # Pods for testing
51 + end
52 +
53 +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": "FWIoT",
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 + "react": "16.9.0",
14 + "react-native": "0.61.5",
15 + "react-native-gesture-handler": "^1.5.2",
16 + "react-native-push-notification": "^3.1.9",
17 + "react-navigation": "^4.0.10",
18 + "react-navigation-stack": "^1.10.3"
19 + },
20 + "devDependencies": {
21 + "@babel/core": "^7.6.2",
22 + "@babel/runtime": "^7.6.2",
23 + "@react-native-community/eslint-config": "^0.0.5",
24 + "babel-jest": "^24.9.0",
25 + "eslint": "^6.5.1",
26 + "jest": "^24.9.0",
27 + "metro-react-native-babel-preset": "^0.56.0",
28 + "react-test-renderer": "16.9.0"
29 + },
30 + "jest": {
31 + "preset": "react-native"
32 + }
33 +}
1 +var fs = require('fs');
2 +var readline = require('readline');
3 +var google = require('googleapis');
4 +var googleAuth = require('google-auth-library');
5 +
6 +var SCOPES = [
7 + 'https://www.googleapis.com/auth/calendar.readonly', // 캘린더 정보의 읽기 권한? 입니다.
8 + 'https://www.googleapis.com/auth/calendar' // 캘린더 정보의 편집 권한? 입니다.
9 + ];
10 +
11 +var TOKEN_DIR = (process.env.HOME || process.env.HOMEPATH ||
12 + process.env.USERPROFILE) + '/.credentials/';
13 +// 토큰이 저장될 디렉토리
14 +var TOKEN_PATH = TOKEN_DIR + 'calendar-nodejs-quickstart.json';
15 +// 토큰 파일 명
16 +
17 +fs.readFile('client_secret.json', function processClientSecrets(err, content) {
18 + // 로컬의 client_secret.json 파일을 읽고 'authorize' 함수 실행
19 + if (err) {
20 + console.log('Error loading client secret file: ' + err);
21 + return;
22 + }
23 + authorize(JSON.parse(content), listEvents);
24 +});
25 +
26 +function authorize(credentials, callback) {
27 + var clientSecret = credentials.web.client_secret;
28 + var clientId = credentials.web.client_id;
29 + var redirectUrl = credentials.web.auth_provider_x509_cert_url;
30 + // client_secret.json 파일에서 시크릿키, 클라이언트 아이디, 리다이렉트 URI를 받습니다.
31 + // 웹 어플리케이션으로 만들었을 때에는 'installed' -> 'web' 으로 수정합니다.
32 + // ex 'var clientSecret = credentials.web.client_secret;'
33 +
34 + var auth = new googleAuth();
35 + var oauth2Client = new auth.OAuth2(clientId, clientSecret, redirectUrl);
36 +
37 + fs.readFile(TOKEN_PATH, function(err, token) {
38 + // 앞서 지정한 디렉토리와 파일명으로 토큰 파일을 읽습니다.
39 + if (err) {
40 + getNewToken(oauth2Client, callback); // 토큰이 없다면 만듭니다.
41 + } else {
42 + oauth2Client.credentials = JSON.parse(token); // 토큰이 있다면 정보를 객체에 담습니다.
43 + callback(oauth2Client);
44 + }
45 + });
46 +}
47 +
48 +function getNewToken(oauth2Client, callback) {
49 + var authUrl = oauth2Client.generateAuthUrl({
50 + access_type: 'offline',
51 + scope: SCOPES
52 + });
53 +
54 + // 브라우저에 'authUrl'의 링크로 접근하여 데이터 접근에 동의한 후 리다이렉트 되는 URL의
55 + // 'code=' 다음 부분을 복사합니다.
56 + console.log('Authorize this app by visiting this url: ', authUrl);
57 + var rl = readline.createInterface({
58 + input: process.stdin,
59 + output: process.stdout
60 + });
61 + // 복사한 'code=' 다음 부분을 입력합니다.
62 + // 로컬에서 테스트 할때에는 code= 다음 부분의 값이 URL 인코딩이 되어 있을 수 있으니
63 + // URL 디코딩한 후에 입력합니다.
64 + rl.question('Enter the code from that page here: ', function(code) {
65 + rl.close();
66 + oauth2Client.getToken(code, function(err, token) {
67 + if (err) {
68 + console.log('Error while trying to retrieve access token', err);
69 + return;
70 + }
71 + oauth2Client.credentials = token;
72 + storeToken(token);
73 + callback(oauth2Client);
74 + });
75 + });
76 +}
77 +
78 +function storeToken(token) {
79 + try {
80 + fs.mkdirSync(TOKEN_DIR);
81 + } catch (err) {
82 + if (err.code != 'EEXIST') {
83 + throw err;
84 + }
85 + }
86 + fs.writeFile(TOKEN_PATH, JSON.stringify(token)); // 토큰을 만듭니다.
87 + console.log('Token stored to ' + TOKEN_PATH);
88 +}
89 +
90 +function listEvents(auth) {
91 + // 토큰 인증이 완료되면 최종적으로 실행되는 함수 입니다.
92 + // 아래의 예제는 구글 캘린더에 등록된 이벤트 10개의 정보를 출력합니다.
93 + var calendar = google.calendar('v3');
94 +
95 + calendar.events.list({
96 + auth: auth,
97 + calendarId: 'primary', // 이곳에 이벤트를 가져올 캘린더 id를 입력해야 합니다.
98 + timeMin: (new Date()).toISOString(),
99 + maxResults: 10,
100 + singleEvents: true,
101 + orderBy: 'startTime'
102 + }, function(err, response) {
103 + if (err) {
104 + console.log('The API returned an error: ' + err);
105 + return;
106 + }
107 + var events = response.items;
108 + if (events.length == 0) {
109 + console.log('No upcoming events found.');
110 + } else {
111 + console.log('Upcoming 10 events:');
112 + for (var i = 0; i < events.length; i++) {
113 + var event = events[i];
114 + var start = event.start.dateTime || event.start.date;
115 + console.log('%s - %s', start, event.summary);
116 + }
117 + }
118 + });
119 +
120 +
121 + // 다음은 구글 캘린더에 'CHEOLGUSO' 라는 이름의 캘린더가 있는지 확인하여
122 + // 없다면 만들고 있다면 삭제해보겠습니다.
123 + calendar.calendarList.list({
124 + auth : auth
125 + }, function(err, calendarList){
126 + if(err) console.log(err);
127 +
128 + var deleteCalendarId; // 캘린더 삭제를 위한 아이디 변수
129 + var isCGSCalendar = false; // 'CHEOLGUSO' 캘린더가 존재하는지 확인하기 위한 변수
130 +
131 + // 'CHEOLGUSO' 캘린더가 있는지 확인
132 + for(var i=0; i<calendarList.items.length; i++){
133 + if(calendarList.items[i].summary === 'CHEOLGUSO'){
134 + isCGSCalendar = true;
135 + deleteCalendarId = calendarList.items[i].id;
136 + }
137 + }
138 +
139 + if(isCGSCalendar){
140 +
141 + // 'CHEOLGUSO' 캘린더가 있다면 캘린더를 지움
142 + calendar.calendars.delete({
143 + auth : auth,
144 + calendarId : deleteCalendarId
145 + }, function(err, calendars){
146 + if(err) console.log(err);
147 + });
148 +
149 + }else{
150 +
151 + // 'CHEOLGUSO' 캘린더가 없다면 캘린더를 만듬
152 + calendar.calendars.insert({
153 + auth : auth,
154 + resource : {
155 + summary : 'CHEOLGUSO'
156 + }
157 + }, function(err, calendars){
158 + if(err) console.log(err);
159 + });
160 +
161 + }
162 +
163 + });
164 +
165 +
166 +}
...\ 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 +
5 +export default class Login extends Component {
6 +
7 + constructor(props) {
8 + super(props);
9 + this.state = {
10 + ID: '',
11 + };
12 + }
13 + static navigationOptions = {
14 + title: 'Login',
15 + };
16 +
17 + render() {
18 + return (
19 + <View style={styles.container}>
20 + <View style={styles.header}>
21 + <Text
22 + style={{textAlign : 'center', fontSize : 50, fontFamily : "BMJUA_ttf", marginTop:50}}>FW IoT</Text>
23 + </View>
24 + <View style={styles.logo}>
25 + <Image
26 + style = {styles.img}
27 + source={require('./assets/logo.png')}/>
28 + </View>
29 + <View style={styles.input_div}>
30 + <View
31 + style={StyleSheet.inputPart}>
32 + <Text
33 + style={{textAlign:'center',fontSize : 40, marginTop :20, fontFamily : "BMJUA_ttf"}}>Food Waste IoT</Text>
34 + <Text
35 + style={{textAlign:'center',fontSize : 15, marginTop :20, fontFamily : "BMJUA_ttf"}}>기기 등록</Text>
36 + <TextInput
37 + style={styles.input}
38 + placeholder="ID"
39 + placeholderTextColor="#66b3ff"
40 + value={this.state.text}
41 + onChangeText={(text) => this.setState({ ID: text })}
42 + />
43 + <LoginButton
44 + onPress={() => { this.props.navigation.navigate('MainScreen', { ID: this.state.ID }) }}
45 + />
46 + </View>
47 + </View>
48 + <View style={styles.footer}>
49 +
50 + </View>
51 + </View>
52 + );
53 + }
54 +}
55 +
56 +const styles = StyleSheet.create({
57 + input: {
58 + height: 50,
59 + width: 250,
60 + fontSize: 20,
61 + alignSelf: 'center',
62 + borderColor: "#0066cc",
63 + borderWidth: 1,
64 + backgroundColor:"white",
65 + borderRadius: 10,
66 + marginTop : 20,
67 + },
68 + input_title: {
69 + textAlign:'center',
70 + fontSize : 40,
71 + marginTop :20,
72 + },
73 + container: {
74 + flex: 1,
75 + backgroundColor: 'white',
76 + },
77 + header: {
78 + flex: 2,
79 + backgroundColor: 'white',
80 + },
81 + logo: {
82 + flex: 4,
83 + justifyContent: "center",
84 + alignItems: "center",
85 + },
86 + input_div :{
87 + flex: 4,
88 + backgroundColor: '#0149ff',
89 + borderRadius : 20,
90 + margin:20,
91 +
92 + },
93 + footer:{
94 + flex : 1,
95 + },
96 + img:{
97 + width:200,
98 + resizeMode: 'contain',
99 + alignSelf :'center',
100 + marginStart : 30,
101 + },
102 +});
1 +import React, { Component, Notifications } from 'react';
2 +import { StyleSheet, Text, View, TextInput, Image, } from 'react-native';
3 +
4 +export default class Login extends Component {
5 +
6 + constructor(props) {
7 + super(props);
8 + this.state = {
9 + ID: this.props.navigation.getParam('ID'),
10 + };
11 + }
12 + static navigationOptions = {
13 + title: 'MainScreen',
14 + };
15 +
16 + render() {
17 + return (
18 + <View style={styles.container}>
19 + <View style={styles.header}>
20 + <Text>{this.state.ID}</Text>
21 + </View>
22 + </View>
23 + );
24 + }
25 +}
26 +
27 +var PushNotification = require('react-native-push-notification');
28 +
29 +PushNotification.configure({
30 +
31 + // (optional) Called when Token is generated (iOS and Android)
32 + onRegister: function(token) {
33 + console.log( 'TOKEN:', token );
34 + },
35 +
36 + // (required) Called when a remote or local notification is opened or received
37 + onNotification: function(notification) {
38 + console.log( 'NOTIFICATION:', notification );
39 + },
40 +
41 + // ANDROID ONLY: GCM Sender ID (optional - not required for local notifications, but is need to receive remote push notifications)
42 + senderID: "YOUR GCM SENDER ID",
43 +
44 + // IOS ONLY (optional): default: all - Permissions to register.
45 + permissions: {
46 + alert: true,
47 + badge: true,
48 + sound: true
49 + },
50 +
51 + // Should the initial notification be popped automatically
52 + // default: true
53 + popInitialNotification: true,
54 +
55 + /**
56 + * (optional) default: true
57 + * - Specified if permissions (ios) and token (android and ios) will requested or not,
58 + * - if not, you must call PushNotificationsHandler.requestPermissions() later
59 + */
60 + requestPermissions: true,
61 +});
62 +
63 +const styles = StyleSheet.create({
64 + input: {
65 + height: 50,
66 + width: 250,
67 + fontSize: 0,
68 + alignSelf: 'center',
69 + borderRadius: 1,
70 + borderStyle: 'dotted',
71 + borderBottomColor: "#0066cc",
72 + borderBottomWidth: 2,
73 + },
74 + container: {
75 + flex: 1,
76 + backgroundColor: 'white',
77 + },
78 + header: {
79 + flex: 2,
80 + backgroundColor: 'white',
81 + },
82 + logo: {
83 + flex: 4,
84 + backgroundColor: 'white',
85 + },
86 + inputPart: {
87 + flex: 4,
88 + backgroundColor: 'white',
89 + },
90 +});
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