(null);
31 |
32 | const [isLoading, setIsLoading] = useState(false);
33 | const [isError, setIsError] = useState(false);
34 |
35 | const onChangeSearch = (query: string) => setSearchQuery(query);
36 |
37 | const onSubmitSearch = async () => {
38 | setIsError(false);
39 | setIsLoading(true);
40 | setSearchResults(null);
41 |
42 | try {
43 | const response = await axios.get(
44 | `https://www.alphavantage.co/query?function=SYMBOL_SEARCH&keywords=${searchQuery}&apikey=${ALPHA_VANTAGE_API_KEY}`,
45 | );
46 | if (response.data['Error Message']) {
47 | setSearchResults(null);
48 | } else {
49 | setSearchResults(response.data['bestMatches']);
50 | }
51 | } catch (error) {
52 | setIsError(true);
53 | }
54 |
55 | setIsLoading(false);
56 | };
57 |
58 | return (
59 |
60 |
66 |
67 | {isLoading && (
68 |
77 | )}
78 |
79 | {searchResults && (
80 |
81 |
82 | {searchResults.map(result => (
83 | {
85 | navigation.push('Details', {symbol: result['1. symbol']});
86 | }}
87 | key={result['1. symbol']}>
88 | {`\n${result['3. type']}`} }
92 | />
93 |
94 | ))}
95 |
96 |
97 | )}
98 |
99 | );
100 | };
101 |
102 | export default SearchScreen;
103 |
--------------------------------------------------------------------------------
/android/app/src/debug/java/com/stonks/ReactNativeFlipper.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Facebook, Inc. and its affiliates.
3 | *
4 | * This source code is licensed under the MIT license found in the LICENSE file in the root
5 | * directory of this source tree.
6 | */
7 | package com.stonks;
8 |
9 | import android.content.Context;
10 | import com.facebook.flipper.android.AndroidFlipperClient;
11 | import com.facebook.flipper.android.utils.FlipperUtils;
12 | import com.facebook.flipper.core.FlipperClient;
13 | import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
14 | import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
15 | import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
16 | import com.facebook.flipper.plugins.inspector.DescriptorMapping;
17 | import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
18 | import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
19 | import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
20 | import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
21 | import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
22 | import com.facebook.react.ReactInstanceManager;
23 | import com.facebook.react.bridge.ReactContext;
24 | import com.facebook.react.modules.network.NetworkingModule;
25 | import okhttp3.OkHttpClient;
26 |
27 | public class ReactNativeFlipper {
28 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
29 | if (FlipperUtils.shouldEnableFlipper(context)) {
30 | final FlipperClient client = AndroidFlipperClient.getInstance(context);
31 |
32 | client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
33 | client.addPlugin(new ReactFlipperPlugin());
34 | client.addPlugin(new DatabasesFlipperPlugin(context));
35 | client.addPlugin(new SharedPreferencesFlipperPlugin(context));
36 | client.addPlugin(CrashReporterPlugin.getInstance());
37 |
38 | NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
39 | NetworkingModule.setCustomClientBuilder(
40 | new NetworkingModule.CustomClientBuilder() {
41 | @Override
42 | public void apply(OkHttpClient.Builder builder) {
43 | builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
44 | }
45 | });
46 | client.addPlugin(networkFlipperPlugin);
47 | client.start();
48 |
49 | // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
50 | // Hence we run if after all native modules have been initialized
51 | ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
52 | if (reactContext == null) {
53 | reactInstanceManager.addReactInstanceEventListener(
54 | new ReactInstanceManager.ReactInstanceEventListener() {
55 | @Override
56 | public void onReactContextInitialized(ReactContext reactContext) {
57 | reactInstanceManager.removeReactInstanceEventListener(this);
58 | reactContext.runOnNativeModulesQueueThread(
59 | new Runnable() {
60 | @Override
61 | public void run() {
62 | client.addPlugin(new FrescoFlipperPlugin());
63 | }
64 | });
65 | }
66 | });
67 | } else {
68 | client.addPlugin(new FrescoFlipperPlugin());
69 | }
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/ios/Stonks.xcodeproj/xcshareddata/xcschemes/Stonks.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
53 |
55 |
61 |
62 |
63 |
64 |
70 |
72 |
78 |
79 |
80 |
81 |
83 |
84 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/ios/Stonks/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 |
2 | {
3 | "compilerOptions": {
4 | /* Basic Options */
5 | "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
6 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
7 | "lib": ["es2017"], /* Specify library files to be included in the compilation. */
8 | "allowJs": true, /* Allow javascript files to be compiled. */
9 | // "checkJs": true, /* Report errors in .js files. */
10 | "jsx": "react-native", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
11 | // "declaration": true, /* Generates corresponding '.d.ts' file. */
12 | // "sourceMap": true, /* Generates corresponding '.map' file. */
13 | // "outFile": "./", /* Concatenate and emit output to single file. */
14 | // "outDir": "./", /* Redirect output structure to the directory. */
15 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
16 | // "removeComments": true, /* Do not emit comments to output. */
17 | "noEmit": true, /* Do not emit outputs. */
18 | // "incremental": true, /* Enable incremental compilation */
19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */
20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
21 | "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
22 |
23 | /* Strict Type-Checking Options */
24 | "strict": true, /* Enable all strict type-checking options. */
25 | // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
26 | // "strictNullChecks": true, /* Enable strict null checks. */
27 | // "strictFunctionTypes": true, /* Enable strict checking of function types. */
28 | // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
29 | // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
30 | // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
31 |
32 | /* Additional Checks */
33 | // "noUnusedLocals": true, /* Report errors on unused locals. */
34 | // "noUnusedParameters": true, /* Report errors on unused parameters. */
35 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
36 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
37 |
38 | /* Module Resolution Options */
39 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
40 | // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
41 | // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
42 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
43 | // "typeRoots": [], /* List of folders to include type definitions from. */
44 | "typeRoots": ["./src/types"],
45 | // "types": [], /* Type declaration files to be included in compilation. */
46 | "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
47 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
48 | // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
49 | "skipLibCheck": false /* Skip type checking of declaration files. */
50 |
51 | /* Source Map Options */
52 | // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
53 | // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */
54 | // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
55 | // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
56 |
57 | /* Experimental Options */
58 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
59 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
60 | },
61 | "exclude": [
62 | "node_modules", "babel.config.js", "metro.config.js", "jest.config.js"
63 | ]
64 | }
65 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Stonks
2 |
3 | _Stonks_ is a mobile application that enables users to search for financial instruments on various stock exchanges, and add them to their portfolio.
4 |
5 | ## Features
6 |
7 | Here is a planned list of features (ticked ones are completed, unticked ones are under development).
8 |
9 | - [ ] Register and login users via: Phone Number (Account / Username) Password (OTP)
10 | - [ ] Search for financial instruments by ticker, common name, or other terms
11 | - [ ] View information on the financial instrument (Realtime price, Historical price data, related news)
12 | - [ ] Share the financial instrument with external parties
13 | - [ ] Follow the financial instrument in the process adding it to their watchlist (portfolio)
14 | - [ ] Manage their watchlist by adding or removing financial instruments
15 | - [ ] Have an overview of the losses and gains in their portfolio
16 |
17 | ## Choosing the tech stack
18 |
19 | ### Which framework?
20 |
21 | Our requirements are to develop a mobile app that works well on both iOS & Android. The following options come to mind:
22 |
23 | - Ionic
24 | - React Native
25 | - Flutter
26 |
27 | Ionic [scores poorly](https://2020.stateofjs.com/en-US/technologies/mobile-desktop/) in developer satisfaction scores for a variety of reasons, and hence was eliminated.
28 |
29 | Both React Native and Flutter enable creation of native apps that work great on mobile.
30 |
31 | I've had prior experience with React Native, so I went with that.
32 |
33 | ### Which language?
34 |
35 | The next choice would be which language to use:
36 |
37 | - Vanilla JavaScript
38 | - TypeScript
39 |
40 | The benefits of TypeScript are very significant, even in a small project like this. Some of these benefits:
41 |
42 | - Declaring types allows the static type checker to catch bugs/errors quickly
43 | - Makes the code base more self-documenting
44 | - Enhances the dev experience by enabling editors (such as VScode) to provide autocomplete with context-aware suggestions
45 | - Reduces the amount of menial testing needed (i.e. testing not related to business logic)
46 | - No need for tests that TS can catch
47 | - ...and so on
48 |
49 | ### What libraries to use?
50 |
51 | > The standard library saves programmers from having to reinvent the wheel.
52 | >
53 | > — Bjarne Stroustrup
54 |
55 | #### UI
56 |
57 | - Since we don't have a UI designer, we'd benefit from a React Native component library that provides UI components that look good out-of-the-box.
58 | - There's a [few choices](https://blog.logrocket.com/react-native-component-libraries-in-2020/), but I settled on [React Native Paper](https://callstack.github.io/react-native-paper/index.html)
59 |
60 | ### Backend
61 |
62 | For backend functionality, I'm using Firebase as a backend-as-a-service (BaaS) platform
63 |
64 | - [Firebase Authentication](https://firebase.google.com/docs/auth) is used to authenticate users via sending an OTP to their mobile numbers
65 | - [Firebase Realtime Database](https://firebase.google.com/docs/database) is used to persist user data
66 |
67 | ### Testing Strategy
68 |
69 | - React Native docs have a [good overview on testing](https://reactnative.dev/docs/testing-overview)
70 | - Taking inspiration from the [testing pyramid](https://www.codecademy.com/articles/tdd-testing-pyramid), I aim to have high coverage on the unit test level
71 | - As of now, no plans to implement Integration or End-to-End tests
72 | - Avoiding Snapshot tests as it can be hard to tell whether a change in snapshot is intended or whether it's evidence of a bug, which reduces their value (more weaknesses of Snapshot testing highlighted [here](https://reactnative.dev/docs/testing-overview#testing-rendered-output))
73 | - `create-react-native-app` comes with the Jest testing framework
74 | - To assist with writing unit/component tests that resemble the way the app is used by end users, I'm using [`@testing-library/react-native`](https://github.com/callstack/react-native-testing-library)
75 | - Testing Library has [high satisfaction scores](https://2020.stateofjs.com/en-US/technologies/testing/)
76 |
77 | ### Continous Delivery
78 |
79 | - iOS builds can be distributed via [Visual Studio App Center](https://appcenter.ms/)
80 | - Builds can be automated, and releases can distributed by configuring these tasks to run upon a new commit pushed to a particular git branch
81 |
82 | ## Setup Instructions
83 |
84 | ### Build & Run
85 |
86 | Currently, I'm supporting & testing the app on iOS only. Hence, these instructions are for running this app on the iOS Simulator on a development machine.
87 |
88 | 1. This app uses [Alpha Vantage](https://www.alphavantage.co/) API for financial instrument data. Get your free API key, and fill it up in `.env` (see `.env.template` for instructions)
89 | 2. To install dependencies, run: `yarn install`
90 | 3. To launch app on iOS Simulator (assuming your [React Native dev environment has been setup](https://reactnative.dev/docs/environment-setup)), run: `npx pod-install ios && npx react-native run-ios`
91 |
92 | ### Test
93 |
94 | Here's some steps to setup testing in a blank RN project created with React Native CLI.
95 |
96 | - `transformIgnorePatterns`: Used to specify which files shall be transformed by Babel. Many react-native npm modules unfortunately don't pre-compile their source code before publishing. [(Source)](https://jestjs.io/docs/tutorial-react-native#transformignorepatterns-customization)
97 | - A [sample regex](https://stackoverflow.com/a/59964555/8561397) that works for some common RN scenarios
98 | - Mocking native dependencies
99 | - Libraries such as `@react-navigation` and `@react-native-firebase` ahve dependencies that include native code, and hence need to be mocked in order to be tested. Read the docs for such libraries to understand how to mock them properly.
100 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
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 | # https://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 |
86 | # Determine the Java command to use to start the JVM.
87 | if [ -n "$JAVA_HOME" ] ; then
88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
89 | # IBM's JDK on AIX uses strange locations for the executables
90 | JAVACMD="$JAVA_HOME/jre/sh/java"
91 | else
92 | JAVACMD="$JAVA_HOME/bin/java"
93 | fi
94 | if [ ! -x "$JAVACMD" ] ; then
95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
96 |
97 | Please set the JAVA_HOME variable in your environment to match the
98 | location of your Java installation."
99 | fi
100 | else
101 | JAVACMD="java"
102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
103 |
104 | Please set the JAVA_HOME variable in your environment to match the
105 | location of your Java installation."
106 | fi
107 |
108 | # Increase the maximum file descriptors if we can.
109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
110 | MAX_FD_LIMIT=`ulimit -H -n`
111 | if [ $? -eq 0 ] ; then
112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
113 | MAX_FD="$MAX_FD_LIMIT"
114 | fi
115 | ulimit -n $MAX_FD
116 | if [ $? -ne 0 ] ; then
117 | warn "Could not set maximum file descriptor limit: $MAX_FD"
118 | fi
119 | else
120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
121 | fi
122 | fi
123 |
124 | # For Darwin, add options to specify how the application appears in the dock
125 | if $darwin; then
126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
127 | fi
128 |
129 | # For Cygwin or MSYS, switch paths to Windows format before running java
130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
133 |
134 | JAVACMD=`cygpath --unix "$JAVACMD"`
135 |
136 | # We build the pattern for arguments to be converted via cygpath
137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
138 | SEP=""
139 | for dir in $ROOTDIRSRAW ; do
140 | ROOTDIRS="$ROOTDIRS$SEP$dir"
141 | SEP="|"
142 | done
143 | OURCYGPATTERN="(^($ROOTDIRS))"
144 | # Add a user-defined pattern to the cygpath arguments
145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
147 | fi
148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
149 | i=0
150 | for arg in "$@" ; do
151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
153 |
154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
156 | else
157 | eval `echo args$i`="\"$arg\""
158 | fi
159 | i=`expr $i + 1`
160 | done
161 | case $i in
162 | 0) set -- ;;
163 | 1) set -- "$args0" ;;
164 | 2) set -- "$args0" "$args1" ;;
165 | 3) set -- "$args0" "$args1" "$args2" ;;
166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
172 | esac
173 | fi
174 |
175 | # Escape application args
176 | save () {
177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
178 | echo " "
179 | }
180 | APP_ARGS=`save "$@"`
181 |
182 | # Collect all arguments for the java command, following the shell quoting and substitution rules
183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
184 |
185 | exec "$JAVACMD" "$@"
186 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 |
3 | import com.android.build.OutputFile
4 |
5 | /**
6 | * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
7 | * and bundleReleaseJsAndAssets).
8 | * These basically call `react-native bundle` with the correct arguments during the Android build
9 | * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
10 | * bundle directly from the development server. Below you can see all the possible configurations
11 | * and their defaults. If you decide to add a configuration block, make sure to add it before the
12 | * `apply from: "../../node_modules/react-native/react.gradle"` line.
13 | *
14 | * project.ext.react = [
15 | * // the name of the generated asset file containing your JS bundle
16 | * bundleAssetName: "index.android.bundle",
17 | *
18 | * // the entry file for bundle generation. If none specified and
19 | * // "index.android.js" exists, it will be used. Otherwise "index.js" is
20 | * // default. Can be overridden with ENTRY_FILE environment variable.
21 | * entryFile: "index.android.js",
22 | *
23 | * // https://reactnative.dev/docs/performance#enable-the-ram-format
24 | * bundleCommand: "ram-bundle",
25 | *
26 | * // whether to bundle JS and assets in debug mode
27 | * bundleInDebug: false,
28 | *
29 | * // whether to bundle JS and assets in release mode
30 | * bundleInRelease: true,
31 | *
32 | * // whether to bundle JS and assets in another build variant (if configured).
33 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
34 | * // The configuration property can be in the following formats
35 | * // 'bundleIn${productFlavor}${buildType}'
36 | * // 'bundleIn${buildType}'
37 | * // bundleInFreeDebug: true,
38 | * // bundleInPaidRelease: true,
39 | * // bundleInBeta: true,
40 | *
41 | * // whether to disable dev mode in custom build variants (by default only disabled in release)
42 | * // for example: to disable dev mode in the staging build type (if configured)
43 | * devDisabledInStaging: true,
44 | * // The configuration property can be in the following formats
45 | * // 'devDisabledIn${productFlavor}${buildType}'
46 | * // 'devDisabledIn${buildType}'
47 | *
48 | * // the root of your project, i.e. where "package.json" lives
49 | * root: "../../",
50 | *
51 | * // where to put the JS bundle asset in debug mode
52 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
53 | *
54 | * // where to put the JS bundle asset in release mode
55 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release",
56 | *
57 | * // where to put drawable resources / React Native assets, e.g. the ones you use via
58 | * // require('./image.png')), in debug mode
59 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
60 | *
61 | * // where to put drawable resources / React Native assets, e.g. the ones you use via
62 | * // require('./image.png')), in release mode
63 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
64 | *
65 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means
66 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
67 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle
68 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
69 | * // for example, you might want to remove it from here.
70 | * inputExcludes: ["android/**", "ios/**"],
71 | *
72 | * // override which node gets called and with what additional arguments
73 | * nodeExecutableAndArgs: ["node"],
74 | *
75 | * // supply additional arguments to the packager
76 | * extraPackagerArgs: []
77 | * ]
78 | */
79 |
80 | project.ext.react = [
81 | enableHermes: false, // clean and rebuild if changing
82 | ]
83 |
84 | apply from: "../../node_modules/react-native/react.gradle"
85 |
86 | /**
87 | * Set this to true to create two separate APKs instead of one:
88 | * - An APK that only works on ARM devices
89 | * - An APK that only works on x86 devices
90 | * The advantage is the size of the APK is reduced by about 4MB.
91 | * Upload all the APKs to the Play Store and people will download
92 | * the correct one based on the CPU architecture of their device.
93 | */
94 | def enableSeparateBuildPerCPUArchitecture = false
95 |
96 | /**
97 | * Run Proguard to shrink the Java bytecode in release builds.
98 | */
99 | def enableProguardInReleaseBuilds = false
100 |
101 | /**
102 | * The preferred build flavor of JavaScriptCore.
103 | *
104 | * For example, to use the international variant, you can use:
105 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
106 | *
107 | * The international variant includes ICU i18n library and necessary data
108 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
109 | * give correct results when using with locales other than en-US. Note that
110 | * this variant is about 6MiB larger per architecture than default.
111 | */
112 | def jscFlavor = 'org.webkit:android-jsc:+'
113 |
114 | /**
115 | * Whether to enable the Hermes VM.
116 | *
117 | * This should be set on project.ext.react and mirrored here. If it is not set
118 | * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
119 | * and the benefits of using Hermes will therefore be sharply reduced.
120 | */
121 | def enableHermes = project.ext.react.get("enableHermes", false);
122 |
123 | android {
124 | ndkVersion rootProject.ext.ndkVersion
125 |
126 | compileSdkVersion rootProject.ext.compileSdkVersion
127 |
128 | compileOptions {
129 | sourceCompatibility JavaVersion.VERSION_1_8
130 | targetCompatibility JavaVersion.VERSION_1_8
131 | }
132 |
133 | defaultConfig {
134 | applicationId "com.stonks"
135 | minSdkVersion rootProject.ext.minSdkVersion
136 | targetSdkVersion rootProject.ext.targetSdkVersion
137 | versionCode 1
138 | versionName "1.0"
139 | }
140 | splits {
141 | abi {
142 | reset()
143 | enable enableSeparateBuildPerCPUArchitecture
144 | universalApk false // If true, also generate a universal APK
145 | include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
146 | }
147 | }
148 | signingConfigs {
149 | debug {
150 | storeFile file('debug.keystore')
151 | storePassword 'android'
152 | keyAlias 'androiddebugkey'
153 | keyPassword 'android'
154 | }
155 | }
156 | buildTypes {
157 | debug {
158 | signingConfig signingConfigs.debug
159 | }
160 | release {
161 | // Caution! In production, you need to generate your own keystore file.
162 | // see https://reactnative.dev/docs/signed-apk-android.
163 | signingConfig signingConfigs.debug
164 | minifyEnabled enableProguardInReleaseBuilds
165 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
166 | }
167 | }
168 |
169 | // applicationVariants are e.g. debug, release
170 | applicationVariants.all { variant ->
171 | variant.outputs.each { output ->
172 | // For each separate APK per architecture, set a unique version code as described here:
173 | // https://developer.android.com/studio/build/configure-apk-splits.html
174 | // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
175 | def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
176 | def abi = output.getFilter(OutputFile.ABI)
177 | if (abi != null) { // null for the universal-debug, universal-release variants
178 | output.versionCodeOverride =
179 | defaultConfig.versionCode * 1000 + versionCodes.get(abi)
180 | }
181 |
182 | }
183 | }
184 | }
185 |
186 | dependencies {
187 | implementation fileTree(dir: "libs", include: ["*.jar"])
188 | //noinspection GradleDynamicVersion
189 | implementation "com.facebook.react:react-native:+" // From node_modules
190 |
191 | implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
192 |
193 | debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
194 | exclude group:'com.facebook.fbjni'
195 | }
196 |
197 | debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
198 | exclude group:'com.facebook.flipper'
199 | exclude group:'com.squareup.okhttp3', module:'okhttp'
200 | }
201 |
202 | debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
203 | exclude group:'com.facebook.flipper'
204 | }
205 |
206 | if (enableHermes) {
207 | def hermesPath = "../../node_modules/hermes-engine/android/";
208 | debugImplementation files(hermesPath + "hermes-debug.aar")
209 | releaseImplementation files(hermesPath + "hermes-release.aar")
210 | } else {
211 | implementation jscFlavor
212 | }
213 | }
214 |
215 | // Run this once to be able to run the application with BUCK
216 | // puts all compile dependencies into folder libs for BUCK to use
217 | task copyDownloadableDepsToLibs(type: Copy) {
218 | from configurations.compile
219 | into 'libs'
220 | }
221 |
222 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
223 |
--------------------------------------------------------------------------------
/src/screens/DetailsScreen.tsx:
--------------------------------------------------------------------------------
1 | import React, {useState, useEffect} from 'react';
2 |
3 | import {StackScreenProps} from '@react-navigation/stack';
4 | import {SearchStackParamList} from '../navigation/SearchStackNavigator';
5 | import {SafeAreaView, StyleSheet, TextInput as RNTextInput} from 'react-native';
6 | import {
7 | Headline,
8 | Subheading,
9 | Caption,
10 | ActivityIndicator,
11 | DataTable,
12 | Button,
13 | Dialog,
14 | Portal,
15 | Paragraph,
16 | TextInput,
17 | } from 'react-native-paper';
18 | import axios from 'axios';
19 | import {ALPHA_VANTAGE_API_KEY, FIREBASE_REALTIME_DATABASE_URL} from '@env';
20 | import {
21 | Chart,
22 | Line,
23 | Area,
24 | HorizontalAxis,
25 | VerticalAxis,
26 | ChartDataPoint,
27 | Tooltip,
28 | } from 'react-native-responsive-linechart';
29 | import auth from '@react-native-firebase/auth';
30 | import {firebase} from '@react-native-firebase/database';
31 |
32 | type DetailsScreenProps = StackScreenProps;
33 |
34 | const DetailsScreen = ({route}: DetailsScreenProps) => {
35 | const {symbol} = route.params;
36 |
37 | const [timeSeriesDailyAdjusted, setTimeSeriesDailyAdjusted] = useState<
38 | any | null
39 | >(null);
40 | const [quote, setQuote] = useState(null);
41 | const [chartData, setChartData] = useState(null);
42 |
43 | const [isLoading, setIsLoading] = useState(false);
44 | const [isError, setIsError] = useState(false);
45 |
46 | useEffect(() => {
47 | const fetchData = async () => {
48 | setIsError(false);
49 | setIsLoading(true);
50 |
51 | const getTimeSeriesDailyAdjusted = () => {
52 | return axios.get(
53 | `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=${symbol}&apikey=${ALPHA_VANTAGE_API_KEY}`,
54 | );
55 | };
56 |
57 | const getQuote = () => {
58 | return axios.get(
59 | `https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol=${symbol}&apikey=${ALPHA_VANTAGE_API_KEY}`,
60 | );
61 | };
62 |
63 | try {
64 | const responseList = await Promise.all([
65 | getTimeSeriesDailyAdjusted(),
66 | getQuote(),
67 | ]);
68 |
69 | if (
70 | responseList[0].data['Error Message'] ||
71 | responseList[0].data['Note'] ||
72 | responseList[1].data['Error Message'] ||
73 | responseList[1].data['Note']
74 | ) {
75 | // @ts-expect-error
76 | alert('Error Response from Alpha Vantage API');
77 | setTimeSeriesDailyAdjusted(null);
78 | setQuote(null);
79 | setIsError(true);
80 | } else {
81 | setTimeSeriesDailyAdjusted(responseList[0].data);
82 | setQuote(responseList[1].data);
83 |
84 | // todo: extract ChartDataPoint parsing logic to a utility function
85 | const chartData: ChartDataPoint[] = [];
86 | let xValue = 1;
87 | for (const [key, value] of Object.entries(
88 | responseList[0].data['Time Series (Daily)'],
89 | ).reverse()) {
90 | chartData.push({
91 | x: xValue,
92 | // @ts-expect-error
93 | y: Number(value['5. adjusted close']),
94 | });
95 | xValue++;
96 | }
97 | setChartData(chartData);
98 | }
99 | } catch (error) {
100 | // @ts-expect-error
101 | alert(error);
102 | setIsError(true);
103 | }
104 |
105 | setIsLoading(false);
106 | };
107 |
108 | fetchData();
109 | }, []);
110 |
111 | return (
112 |
113 | {isLoading && (
114 |
121 | )}
122 | {isError && (
123 |
127 | Oops, an error has occurred
128 |
129 | )}
130 | {timeSeriesDailyAdjusted && quote && chartData && (
131 | <>
132 | {symbol}
133 |
134 | {timeSeriesDailyAdjusted['Meta Data']['1. Information']}
135 |
136 |
137 | Last Refreshed:{' '}
138 | {timeSeriesDailyAdjusted['Meta Data']['3. Last Refreshed']}
139 |
140 |
141 |
142 |
143 | Open
144 | High
145 | Low
146 | Price
147 | Change (%)
148 |
149 |
150 |
151 |
152 | {Number(quote['Global Quote']['02. open']).toFixed(2)}
153 |
154 |
155 | {Number(quote['Global Quote']['03. high']).toFixed(2)}
156 |
157 |
158 | {Number(quote['Global Quote']['04. low']).toFixed(2)}
159 |
160 |
161 | {Number(quote['Global Quote']['05. price']).toFixed(2)}
162 |
163 |
164 | {quote['Global Quote']['10. change percent']}
165 |
166 |
167 |
168 |
169 | chartDataPoint.x),
176 | ),
177 | // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
178 | max: Math.max(
179 | ...chartData.map(chartDataPoint => chartDataPoint.x),
180 | ),
181 | }}
182 | yDomain={{
183 | min: Math.min(
184 | ...chartData.map(chartDataPoint => chartDataPoint.y),
185 | ),
186 | max: Math.max(
187 | ...chartData.map(chartDataPoint => chartDataPoint.y),
188 | ),
189 | }}>
190 | v.toFixed(0)}}}
193 | />
194 |
195 |
203 | y.toFixed(0)}} />
206 | }
207 | smoothing="cubic-spline"
208 | theme={{
209 | stroke: {color: '#6200ee'},
210 | scatter: {default: {width: 4, height: 4, rx: 2}},
211 | }}
212 | />
213 |
214 |
215 | >
216 | )}
217 |
218 | );
219 | };
220 |
221 | type PortfolioDialogProps = {
222 | quote: any;
223 | };
224 |
225 | const PortfolioDialog = ({quote}: PortfolioDialogProps) => {
226 | const [dialogVisible, setDialogVisible] = React.useState(false);
227 | const showDialog = () => setDialogVisible(true);
228 | const hideDialog = () => setDialogVisible(false);
229 |
230 | const [quantity, setQuantity] = React.useState(0);
231 | // todo: Should quantity be of type `number` or `bigint`? Are fractional share positions allowed?
232 |
233 | const updateQuantity = (quantityString: string) => {
234 | const quantity = Number(quantityString);
235 | setQuantity(quantity);
236 | };
237 |
238 | const symbol = quote['Global Quote']['01. symbol'];
239 | const price = Number(quote['Global Quote']['05. price']);
240 |
241 | const addToPortfolio = async () => {
242 | const user = auth().currentUser;
243 | const userId = user?.uid;
244 |
245 | const database = firebase.app().database(FIREBASE_REALTIME_DATABASE_URL);
246 |
247 | try {
248 | const snapshot = await database.ref(`/users/${userId}`).once('value');
249 |
250 | if (snapshot.exists()) {
251 | // add to the existing portfolio
252 | const portfolio = snapshot.val();
253 | if (portfolio.some((element: any) => element['symbol'] === symbol)) {
254 | // add to existing open position
255 | const position = portfolio.find(
256 | (position: any) => position['symbol'] === symbol,
257 | );
258 | const oldQuantity = Number(position['quantity']);
259 | const updatedQuantity = oldQuantity + quantity;
260 | const oldPrice = Number(position['avgPrice']);
261 |
262 | const newAvgPrice =
263 | (oldQuantity * oldPrice + quantity * price) / updatedQuantity;
264 |
265 | const newPosition = {
266 | symbol,
267 | quantity: updatedQuantity,
268 | avgPrice: newAvgPrice,
269 | };
270 |
271 | const index = portfolio.findIndex(
272 | (element: any) => element['symbol'] === symbol,
273 | );
274 | portfolio[index] = newPosition;
275 | await database.ref(`/users/${userId}`).set(portfolio);
276 | } else {
277 | // open a new position within existing portfolio
278 | portfolio.push({symbol, quantity, avgPrice: price});
279 | await database.ref(`/users/${userId}`).set(portfolio);
280 | }
281 | } else {
282 | // setup a new portfolio
283 | await database
284 | .ref(`/users/${userId}`)
285 | .set([{symbol, quantity, avgPrice: price}]);
286 | }
287 | } catch (error) {
288 | // @ts-expect-error
289 | alert(error);
290 | } finally {
291 | setQuantity(0);
292 | hideDialog();
293 | }
294 | };
295 |
296 | // use it to check if any financial instruments added
297 | // iff not add/append this one
298 | //will render this stuff in portfolio view later
299 |
300 | return (
301 | <>
302 |
303 | Add to Portfolio
304 |
305 |
306 |
307 | Add to Portfolio
308 |
309 |
310 | At the current price of {price}, how many units would you like to
311 | add?
312 |
313 | updateQuantity(quantity)}
317 | render={props => (
318 |
319 | )}
320 | />
321 |
322 |
323 | Cancel
324 | Add
325 |
326 |
327 |
328 | >
329 | );
330 | };
331 |
332 | const styles = StyleSheet.create({
333 | container: {
334 | flex: 1,
335 | padding: 20,
336 | justifyContent: 'center',
337 | alignItems: 'center',
338 | },
339 | });
340 |
341 | export default DetailsScreen;
342 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - boost-for-react-native (1.63.0)
3 | - CocoaAsyncSocket (7.6.5)
4 | - DoubleConversion (1.1.6)
5 | - FBLazyVector (0.64.0)
6 | - FBReactNativeSpec (0.64.0):
7 | - RCT-Folly (= 2020.01.13.00)
8 | - RCTRequired (= 0.64.0)
9 | - RCTTypeSafety (= 0.64.0)
10 | - React-Core (= 0.64.0)
11 | - React-jsi (= 0.64.0)
12 | - ReactCommon/turbomodule/core (= 0.64.0)
13 | - Firebase/Auth (7.8.1):
14 | - Firebase/CoreOnly
15 | - FirebaseAuth (~> 7.8.0)
16 | - Firebase/CoreOnly (7.8.1):
17 | - FirebaseCore (= 7.8.0)
18 | - Firebase/Database (7.8.1):
19 | - Firebase/CoreOnly
20 | - FirebaseDatabase (~> 7.8.0)
21 | - FirebaseAuth (7.8.0):
22 | - FirebaseCore (~> 7.0)
23 | - GoogleUtilities/AppDelegateSwizzler (~> 7.0)
24 | - GoogleUtilities/Environment (~> 7.0)
25 | - GTMSessionFetcher/Core (~> 1.4)
26 | - FirebaseCore (7.8.0):
27 | - FirebaseCoreDiagnostics (~> 7.4)
28 | - GoogleUtilities/Environment (~> 7.0)
29 | - GoogleUtilities/Logger (~> 7.0)
30 | - FirebaseCoreDiagnostics (7.8.0):
31 | - GoogleDataTransport (~> 8.0)
32 | - GoogleUtilities/Environment (~> 7.0)
33 | - GoogleUtilities/Logger (~> 7.0)
34 | - nanopb (~> 2.30907.0)
35 | - FirebaseDatabase (7.8.0):
36 | - FirebaseCore (~> 7.0)
37 | - leveldb-library (~> 1.22)
38 | - Flipper (0.75.1):
39 | - Flipper-Folly (~> 2.5)
40 | - Flipper-RSocket (~> 1.3)
41 | - Flipper-DoubleConversion (1.1.7)
42 | - Flipper-Folly (2.5.1):
43 | - boost-for-react-native
44 | - Flipper-DoubleConversion
45 | - Flipper-Glog
46 | - libevent (~> 2.1.12)
47 | - OpenSSL-Universal (= 1.1.180)
48 | - Flipper-Glog (0.3.6)
49 | - Flipper-PeerTalk (0.0.4)
50 | - Flipper-RSocket (1.3.0):
51 | - Flipper-Folly (~> 2.5)
52 | - FlipperKit (0.75.1):
53 | - FlipperKit/Core (= 0.75.1)
54 | - FlipperKit/Core (0.75.1):
55 | - Flipper (~> 0.75.1)
56 | - FlipperKit/CppBridge
57 | - FlipperKit/FBCxxFollyDynamicConvert
58 | - FlipperKit/FBDefines
59 | - FlipperKit/FKPortForwarding
60 | - FlipperKit/CppBridge (0.75.1):
61 | - Flipper (~> 0.75.1)
62 | - FlipperKit/FBCxxFollyDynamicConvert (0.75.1):
63 | - Flipper-Folly (~> 2.5)
64 | - FlipperKit/FBDefines (0.75.1)
65 | - FlipperKit/FKPortForwarding (0.75.1):
66 | - CocoaAsyncSocket (~> 7.6)
67 | - Flipper-PeerTalk (~> 0.0.4)
68 | - FlipperKit/FlipperKitHighlightOverlay (0.75.1)
69 | - FlipperKit/FlipperKitLayoutPlugin (0.75.1):
70 | - FlipperKit/Core
71 | - FlipperKit/FlipperKitHighlightOverlay
72 | - FlipperKit/FlipperKitLayoutTextSearchable
73 | - YogaKit (~> 1.18)
74 | - FlipperKit/FlipperKitLayoutTextSearchable (0.75.1)
75 | - FlipperKit/FlipperKitNetworkPlugin (0.75.1):
76 | - FlipperKit/Core
77 | - FlipperKit/FlipperKitReactPlugin (0.75.1):
78 | - FlipperKit/Core
79 | - FlipperKit/FlipperKitUserDefaultsPlugin (0.75.1):
80 | - FlipperKit/Core
81 | - FlipperKit/SKIOSNetworkPlugin (0.75.1):
82 | - FlipperKit/Core
83 | - FlipperKit/FlipperKitNetworkPlugin
84 | - glog (0.3.5)
85 | - GoogleDataTransport (8.3.0):
86 | - GoogleUtilities/Environment (~> 7.2)
87 | - nanopb (~> 2.30907.0)
88 | - PromisesObjC (~> 1.2)
89 | - GoogleUtilities/AppDelegateSwizzler (7.3.1):
90 | - GoogleUtilities/Environment
91 | - GoogleUtilities/Logger
92 | - GoogleUtilities/Network
93 | - GoogleUtilities/Environment (7.3.1):
94 | - PromisesObjC (~> 1.2)
95 | - GoogleUtilities/Logger (7.3.1):
96 | - GoogleUtilities/Environment
97 | - GoogleUtilities/Network (7.3.1):
98 | - GoogleUtilities/Logger
99 | - "GoogleUtilities/NSData+zlib"
100 | - GoogleUtilities/Reachability
101 | - "GoogleUtilities/NSData+zlib (7.3.1)"
102 | - GoogleUtilities/Reachability (7.3.1):
103 | - GoogleUtilities/Logger
104 | - GTMSessionFetcher/Core (1.5.0)
105 | - leveldb-library (1.22.1)
106 | - libevent (2.1.12)
107 | - nanopb (2.30907.0):
108 | - nanopb/decode (= 2.30907.0)
109 | - nanopb/encode (= 2.30907.0)
110 | - nanopb/decode (2.30907.0)
111 | - nanopb/encode (2.30907.0)
112 | - OpenSSL-Universal (1.1.180)
113 | - PromisesObjC (1.2.12)
114 | - RCT-Folly (2020.01.13.00):
115 | - boost-for-react-native
116 | - DoubleConversion
117 | - glog
118 | - RCT-Folly/Default (= 2020.01.13.00)
119 | - RCT-Folly/Default (2020.01.13.00):
120 | - boost-for-react-native
121 | - DoubleConversion
122 | - glog
123 | - RCTRequired (0.64.0)
124 | - RCTTypeSafety (0.64.0):
125 | - FBLazyVector (= 0.64.0)
126 | - RCT-Folly (= 2020.01.13.00)
127 | - RCTRequired (= 0.64.0)
128 | - React-Core (= 0.64.0)
129 | - React (0.64.0):
130 | - React-Core (= 0.64.0)
131 | - React-Core/DevSupport (= 0.64.0)
132 | - React-Core/RCTWebSocket (= 0.64.0)
133 | - React-RCTActionSheet (= 0.64.0)
134 | - React-RCTAnimation (= 0.64.0)
135 | - React-RCTBlob (= 0.64.0)
136 | - React-RCTImage (= 0.64.0)
137 | - React-RCTLinking (= 0.64.0)
138 | - React-RCTNetwork (= 0.64.0)
139 | - React-RCTSettings (= 0.64.0)
140 | - React-RCTText (= 0.64.0)
141 | - React-RCTVibration (= 0.64.0)
142 | - React-callinvoker (0.64.0)
143 | - React-Core (0.64.0):
144 | - glog
145 | - RCT-Folly (= 2020.01.13.00)
146 | - React-Core/Default (= 0.64.0)
147 | - React-cxxreact (= 0.64.0)
148 | - React-jsi (= 0.64.0)
149 | - React-jsiexecutor (= 0.64.0)
150 | - React-perflogger (= 0.64.0)
151 | - Yoga
152 | - React-Core/CoreModulesHeaders (0.64.0):
153 | - glog
154 | - RCT-Folly (= 2020.01.13.00)
155 | - React-Core/Default
156 | - React-cxxreact (= 0.64.0)
157 | - React-jsi (= 0.64.0)
158 | - React-jsiexecutor (= 0.64.0)
159 | - React-perflogger (= 0.64.0)
160 | - Yoga
161 | - React-Core/Default (0.64.0):
162 | - glog
163 | - RCT-Folly (= 2020.01.13.00)
164 | - React-cxxreact (= 0.64.0)
165 | - React-jsi (= 0.64.0)
166 | - React-jsiexecutor (= 0.64.0)
167 | - React-perflogger (= 0.64.0)
168 | - Yoga
169 | - React-Core/DevSupport (0.64.0):
170 | - glog
171 | - RCT-Folly (= 2020.01.13.00)
172 | - React-Core/Default (= 0.64.0)
173 | - React-Core/RCTWebSocket (= 0.64.0)
174 | - React-cxxreact (= 0.64.0)
175 | - React-jsi (= 0.64.0)
176 | - React-jsiexecutor (= 0.64.0)
177 | - React-jsinspector (= 0.64.0)
178 | - React-perflogger (= 0.64.0)
179 | - Yoga
180 | - React-Core/RCTActionSheetHeaders (0.64.0):
181 | - glog
182 | - RCT-Folly (= 2020.01.13.00)
183 | - React-Core/Default
184 | - React-cxxreact (= 0.64.0)
185 | - React-jsi (= 0.64.0)
186 | - React-jsiexecutor (= 0.64.0)
187 | - React-perflogger (= 0.64.0)
188 | - Yoga
189 | - React-Core/RCTAnimationHeaders (0.64.0):
190 | - glog
191 | - RCT-Folly (= 2020.01.13.00)
192 | - React-Core/Default
193 | - React-cxxreact (= 0.64.0)
194 | - React-jsi (= 0.64.0)
195 | - React-jsiexecutor (= 0.64.0)
196 | - React-perflogger (= 0.64.0)
197 | - Yoga
198 | - React-Core/RCTBlobHeaders (0.64.0):
199 | - glog
200 | - RCT-Folly (= 2020.01.13.00)
201 | - React-Core/Default
202 | - React-cxxreact (= 0.64.0)
203 | - React-jsi (= 0.64.0)
204 | - React-jsiexecutor (= 0.64.0)
205 | - React-perflogger (= 0.64.0)
206 | - Yoga
207 | - React-Core/RCTImageHeaders (0.64.0):
208 | - glog
209 | - RCT-Folly (= 2020.01.13.00)
210 | - React-Core/Default
211 | - React-cxxreact (= 0.64.0)
212 | - React-jsi (= 0.64.0)
213 | - React-jsiexecutor (= 0.64.0)
214 | - React-perflogger (= 0.64.0)
215 | - Yoga
216 | - React-Core/RCTLinkingHeaders (0.64.0):
217 | - glog
218 | - RCT-Folly (= 2020.01.13.00)
219 | - React-Core/Default
220 | - React-cxxreact (= 0.64.0)
221 | - React-jsi (= 0.64.0)
222 | - React-jsiexecutor (= 0.64.0)
223 | - React-perflogger (= 0.64.0)
224 | - Yoga
225 | - React-Core/RCTNetworkHeaders (0.64.0):
226 | - glog
227 | - RCT-Folly (= 2020.01.13.00)
228 | - React-Core/Default
229 | - React-cxxreact (= 0.64.0)
230 | - React-jsi (= 0.64.0)
231 | - React-jsiexecutor (= 0.64.0)
232 | - React-perflogger (= 0.64.0)
233 | - Yoga
234 | - React-Core/RCTSettingsHeaders (0.64.0):
235 | - glog
236 | - RCT-Folly (= 2020.01.13.00)
237 | - React-Core/Default
238 | - React-cxxreact (= 0.64.0)
239 | - React-jsi (= 0.64.0)
240 | - React-jsiexecutor (= 0.64.0)
241 | - React-perflogger (= 0.64.0)
242 | - Yoga
243 | - React-Core/RCTTextHeaders (0.64.0):
244 | - glog
245 | - RCT-Folly (= 2020.01.13.00)
246 | - React-Core/Default
247 | - React-cxxreact (= 0.64.0)
248 | - React-jsi (= 0.64.0)
249 | - React-jsiexecutor (= 0.64.0)
250 | - React-perflogger (= 0.64.0)
251 | - Yoga
252 | - React-Core/RCTVibrationHeaders (0.64.0):
253 | - glog
254 | - RCT-Folly (= 2020.01.13.00)
255 | - React-Core/Default
256 | - React-cxxreact (= 0.64.0)
257 | - React-jsi (= 0.64.0)
258 | - React-jsiexecutor (= 0.64.0)
259 | - React-perflogger (= 0.64.0)
260 | - Yoga
261 | - React-Core/RCTWebSocket (0.64.0):
262 | - glog
263 | - RCT-Folly (= 2020.01.13.00)
264 | - React-Core/Default (= 0.64.0)
265 | - React-cxxreact (= 0.64.0)
266 | - React-jsi (= 0.64.0)
267 | - React-jsiexecutor (= 0.64.0)
268 | - React-perflogger (= 0.64.0)
269 | - Yoga
270 | - React-CoreModules (0.64.0):
271 | - FBReactNativeSpec (= 0.64.0)
272 | - RCT-Folly (= 2020.01.13.00)
273 | - RCTTypeSafety (= 0.64.0)
274 | - React-Core/CoreModulesHeaders (= 0.64.0)
275 | - React-jsi (= 0.64.0)
276 | - React-RCTImage (= 0.64.0)
277 | - ReactCommon/turbomodule/core (= 0.64.0)
278 | - React-cxxreact (0.64.0):
279 | - boost-for-react-native (= 1.63.0)
280 | - DoubleConversion
281 | - glog
282 | - RCT-Folly (= 2020.01.13.00)
283 | - React-callinvoker (= 0.64.0)
284 | - React-jsi (= 0.64.0)
285 | - React-jsinspector (= 0.64.0)
286 | - React-perflogger (= 0.64.0)
287 | - React-runtimeexecutor (= 0.64.0)
288 | - React-jsi (0.64.0):
289 | - boost-for-react-native (= 1.63.0)
290 | - DoubleConversion
291 | - glog
292 | - RCT-Folly (= 2020.01.13.00)
293 | - React-jsi/Default (= 0.64.0)
294 | - React-jsi/Default (0.64.0):
295 | - boost-for-react-native (= 1.63.0)
296 | - DoubleConversion
297 | - glog
298 | - RCT-Folly (= 2020.01.13.00)
299 | - React-jsiexecutor (0.64.0):
300 | - DoubleConversion
301 | - glog
302 | - RCT-Folly (= 2020.01.13.00)
303 | - React-cxxreact (= 0.64.0)
304 | - React-jsi (= 0.64.0)
305 | - React-perflogger (= 0.64.0)
306 | - React-jsinspector (0.64.0)
307 | - react-native-safe-area-context (3.2.0):
308 | - React-Core
309 | - React-perflogger (0.64.0)
310 | - React-RCTActionSheet (0.64.0):
311 | - React-Core/RCTActionSheetHeaders (= 0.64.0)
312 | - React-RCTAnimation (0.64.0):
313 | - FBReactNativeSpec (= 0.64.0)
314 | - RCT-Folly (= 2020.01.13.00)
315 | - RCTTypeSafety (= 0.64.0)
316 | - React-Core/RCTAnimationHeaders (= 0.64.0)
317 | - React-jsi (= 0.64.0)
318 | - ReactCommon/turbomodule/core (= 0.64.0)
319 | - React-RCTBlob (0.64.0):
320 | - FBReactNativeSpec (= 0.64.0)
321 | - RCT-Folly (= 2020.01.13.00)
322 | - React-Core/RCTBlobHeaders (= 0.64.0)
323 | - React-Core/RCTWebSocket (= 0.64.0)
324 | - React-jsi (= 0.64.0)
325 | - React-RCTNetwork (= 0.64.0)
326 | - ReactCommon/turbomodule/core (= 0.64.0)
327 | - React-RCTImage (0.64.0):
328 | - FBReactNativeSpec (= 0.64.0)
329 | - RCT-Folly (= 2020.01.13.00)
330 | - RCTTypeSafety (= 0.64.0)
331 | - React-Core/RCTImageHeaders (= 0.64.0)
332 | - React-jsi (= 0.64.0)
333 | - React-RCTNetwork (= 0.64.0)
334 | - ReactCommon/turbomodule/core (= 0.64.0)
335 | - React-RCTLinking (0.64.0):
336 | - FBReactNativeSpec (= 0.64.0)
337 | - React-Core/RCTLinkingHeaders (= 0.64.0)
338 | - React-jsi (= 0.64.0)
339 | - ReactCommon/turbomodule/core (= 0.64.0)
340 | - React-RCTNetwork (0.64.0):
341 | - FBReactNativeSpec (= 0.64.0)
342 | - RCT-Folly (= 2020.01.13.00)
343 | - RCTTypeSafety (= 0.64.0)
344 | - React-Core/RCTNetworkHeaders (= 0.64.0)
345 | - React-jsi (= 0.64.0)
346 | - ReactCommon/turbomodule/core (= 0.64.0)
347 | - React-RCTSettings (0.64.0):
348 | - FBReactNativeSpec (= 0.64.0)
349 | - RCT-Folly (= 2020.01.13.00)
350 | - RCTTypeSafety (= 0.64.0)
351 | - React-Core/RCTSettingsHeaders (= 0.64.0)
352 | - React-jsi (= 0.64.0)
353 | - ReactCommon/turbomodule/core (= 0.64.0)
354 | - React-RCTText (0.64.0):
355 | - React-Core/RCTTextHeaders (= 0.64.0)
356 | - React-RCTVibration (0.64.0):
357 | - FBReactNativeSpec (= 0.64.0)
358 | - RCT-Folly (= 2020.01.13.00)
359 | - React-Core/RCTVibrationHeaders (= 0.64.0)
360 | - React-jsi (= 0.64.0)
361 | - ReactCommon/turbomodule/core (= 0.64.0)
362 | - React-runtimeexecutor (0.64.0):
363 | - React-jsi (= 0.64.0)
364 | - ReactCommon/turbomodule/core (0.64.0):
365 | - DoubleConversion
366 | - glog
367 | - RCT-Folly (= 2020.01.13.00)
368 | - React-callinvoker (= 0.64.0)
369 | - React-Core (= 0.64.0)
370 | - React-cxxreact (= 0.64.0)
371 | - React-jsi (= 0.64.0)
372 | - React-perflogger (= 0.64.0)
373 | - RNCMaskedView (0.1.10):
374 | - React
375 | - RNFBApp (11.1.2):
376 | - Firebase/CoreOnly (= 7.8.1)
377 | - React-Core
378 | - RNFBAuth (11.1.2):
379 | - Firebase/Auth (= 7.8.1)
380 | - React-Core
381 | - RNFBApp
382 | - RNFBDatabase (11.2.0):
383 | - Firebase/Database (= 7.8.1)
384 | - React-Core
385 | - RNFBApp
386 | - RNGestureHandler (1.10.3):
387 | - React-Core
388 | - RNReanimated (2.0.0):
389 | - DoubleConversion
390 | - FBLazyVector
391 | - FBReactNativeSpec
392 | - glog
393 | - RCT-Folly
394 | - RCTRequired
395 | - RCTTypeSafety
396 | - React
397 | - React-callinvoker
398 | - React-Core
399 | - React-Core/DevSupport
400 | - React-Core/RCTWebSocket
401 | - React-CoreModules
402 | - React-cxxreact
403 | - React-jsi
404 | - React-jsiexecutor
405 | - React-jsinspector
406 | - React-RCTActionSheet
407 | - React-RCTAnimation
408 | - React-RCTBlob
409 | - React-RCTImage
410 | - React-RCTLinking
411 | - React-RCTNetwork
412 | - React-RCTSettings
413 | - React-RCTText
414 | - React-RCTVibration
415 | - ReactCommon/turbomodule/core
416 | - Yoga
417 | - RNScreens (2.18.1):
418 | - React-Core
419 | - RNSVG (12.1.0):
420 | - React
421 | - RNVectorIcons (8.1.0):
422 | - React-Core
423 | - Yoga (1.14.0)
424 | - YogaKit (1.18.1):
425 | - Yoga (~> 1.14)
426 |
427 | DEPENDENCIES:
428 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
429 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
430 | - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
431 | - Flipper (~> 0.75.1)
432 | - Flipper-DoubleConversion (= 1.1.7)
433 | - Flipper-Folly (~> 2.5)
434 | - Flipper-Glog (= 0.3.6)
435 | - Flipper-PeerTalk (~> 0.0.4)
436 | - Flipper-RSocket (~> 1.3)
437 | - FlipperKit (~> 0.75.1)
438 | - FlipperKit/Core (~> 0.75.1)
439 | - FlipperKit/CppBridge (~> 0.75.1)
440 | - FlipperKit/FBCxxFollyDynamicConvert (~> 0.75.1)
441 | - FlipperKit/FBDefines (~> 0.75.1)
442 | - FlipperKit/FKPortForwarding (~> 0.75.1)
443 | - FlipperKit/FlipperKitHighlightOverlay (~> 0.75.1)
444 | - FlipperKit/FlipperKitLayoutPlugin (~> 0.75.1)
445 | - FlipperKit/FlipperKitLayoutTextSearchable (~> 0.75.1)
446 | - FlipperKit/FlipperKitNetworkPlugin (~> 0.75.1)
447 | - FlipperKit/FlipperKitReactPlugin (~> 0.75.1)
448 | - FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.75.1)
449 | - FlipperKit/SKIOSNetworkPlugin (~> 0.75.1)
450 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
451 | - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
452 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
453 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
454 | - React (from `../node_modules/react-native/`)
455 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
456 | - React-Core (from `../node_modules/react-native/`)
457 | - React-Core/DevSupport (from `../node_modules/react-native/`)
458 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
459 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
460 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
461 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
462 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
463 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
464 | - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
465 | - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
466 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
467 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
468 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
469 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
470 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
471 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
472 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
473 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
474 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
475 | - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
476 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
477 | - "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
478 | - "RNFBApp (from `../node_modules/@react-native-firebase/app`)"
479 | - "RNFBAuth (from `../node_modules/@react-native-firebase/auth`)"
480 | - "RNFBDatabase (from `../node_modules/@react-native-firebase/database`)"
481 | - RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
482 | - RNReanimated (from `../node_modules/react-native-reanimated`)
483 | - RNScreens (from `../node_modules/react-native-screens`)
484 | - RNSVG (from `../node_modules/react-native-svg`)
485 | - RNVectorIcons (from `../node_modules/react-native-vector-icons`)
486 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
487 |
488 | SPEC REPOS:
489 | trunk:
490 | - boost-for-react-native
491 | - CocoaAsyncSocket
492 | - Firebase
493 | - FirebaseAuth
494 | - FirebaseCore
495 | - FirebaseCoreDiagnostics
496 | - FirebaseDatabase
497 | - Flipper
498 | - Flipper-DoubleConversion
499 | - Flipper-Folly
500 | - Flipper-Glog
501 | - Flipper-PeerTalk
502 | - Flipper-RSocket
503 | - FlipperKit
504 | - GoogleDataTransport
505 | - GoogleUtilities
506 | - GTMSessionFetcher
507 | - leveldb-library
508 | - libevent
509 | - nanopb
510 | - OpenSSL-Universal
511 | - PromisesObjC
512 | - YogaKit
513 |
514 | EXTERNAL SOURCES:
515 | DoubleConversion:
516 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
517 | FBLazyVector:
518 | :path: "../node_modules/react-native/Libraries/FBLazyVector"
519 | FBReactNativeSpec:
520 | :path: "../node_modules/react-native/React/FBReactNativeSpec"
521 | glog:
522 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
523 | RCT-Folly:
524 | :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
525 | RCTRequired:
526 | :path: "../node_modules/react-native/Libraries/RCTRequired"
527 | RCTTypeSafety:
528 | :path: "../node_modules/react-native/Libraries/TypeSafety"
529 | React:
530 | :path: "../node_modules/react-native/"
531 | React-callinvoker:
532 | :path: "../node_modules/react-native/ReactCommon/callinvoker"
533 | React-Core:
534 | :path: "../node_modules/react-native/"
535 | React-CoreModules:
536 | :path: "../node_modules/react-native/React/CoreModules"
537 | React-cxxreact:
538 | :path: "../node_modules/react-native/ReactCommon/cxxreact"
539 | React-jsi:
540 | :path: "../node_modules/react-native/ReactCommon/jsi"
541 | React-jsiexecutor:
542 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
543 | React-jsinspector:
544 | :path: "../node_modules/react-native/ReactCommon/jsinspector"
545 | react-native-safe-area-context:
546 | :path: "../node_modules/react-native-safe-area-context"
547 | React-perflogger:
548 | :path: "../node_modules/react-native/ReactCommon/reactperflogger"
549 | React-RCTActionSheet:
550 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
551 | React-RCTAnimation:
552 | :path: "../node_modules/react-native/Libraries/NativeAnimation"
553 | React-RCTBlob:
554 | :path: "../node_modules/react-native/Libraries/Blob"
555 | React-RCTImage:
556 | :path: "../node_modules/react-native/Libraries/Image"
557 | React-RCTLinking:
558 | :path: "../node_modules/react-native/Libraries/LinkingIOS"
559 | React-RCTNetwork:
560 | :path: "../node_modules/react-native/Libraries/Network"
561 | React-RCTSettings:
562 | :path: "../node_modules/react-native/Libraries/Settings"
563 | React-RCTText:
564 | :path: "../node_modules/react-native/Libraries/Text"
565 | React-RCTVibration:
566 | :path: "../node_modules/react-native/Libraries/Vibration"
567 | React-runtimeexecutor:
568 | :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
569 | ReactCommon:
570 | :path: "../node_modules/react-native/ReactCommon"
571 | RNCMaskedView:
572 | :path: "../node_modules/@react-native-community/masked-view"
573 | RNFBApp:
574 | :path: "../node_modules/@react-native-firebase/app"
575 | RNFBAuth:
576 | :path: "../node_modules/@react-native-firebase/auth"
577 | RNFBDatabase:
578 | :path: "../node_modules/@react-native-firebase/database"
579 | RNGestureHandler:
580 | :path: "../node_modules/react-native-gesture-handler"
581 | RNReanimated:
582 | :path: "../node_modules/react-native-reanimated"
583 | RNScreens:
584 | :path: "../node_modules/react-native-screens"
585 | RNSVG:
586 | :path: "../node_modules/react-native-svg"
587 | RNVectorIcons:
588 | :path: "../node_modules/react-native-vector-icons"
589 | Yoga:
590 | :path: "../node_modules/react-native/ReactCommon/yoga"
591 |
592 | SPEC CHECKSUMS:
593 | boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
594 | CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
595 | DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
596 | FBLazyVector: 49cbe4b43e445b06bf29199b6ad2057649e4c8f5
597 | FBReactNativeSpec: b9221928fe54d0af5ff66b4e4b5f0fa60493d458
598 | Firebase: d59ad4129167f9f0d2a4f6c1f0c462254b6002c8
599 | FirebaseAuth: 667e576a716f6f9fe31687791406f61135002d47
600 | FirebaseCore: 049029df3096e5c118917029be7da75ee16f3b1b
601 | FirebaseCoreDiagnostics: 066f996579cf097bdad3d7dc9a918d6b9e129c50
602 | FirebaseDatabase: f909d1448d4e7c4f5ef5acd1b8095f4bea9813ca
603 | Flipper: d3da1aa199aad94455ae725e9f3aa43f3ec17021
604 | Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
605 | Flipper-Folly: f7a3caafbd74bda4827954fd7a6e000e36355489
606 | Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
607 | Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
608 | Flipper-RSocket: 602921fee03edacf18f5d6f3d3594ba477f456e5
609 | FlipperKit: 8a20b5c5fcf9436cac58551dc049867247f64b00
610 | glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
611 | GoogleDataTransport: b006084b73915a42c28a3466961a4edda3065da6
612 | GoogleUtilities: e1d9ed4e544fc32a93e00e721400cbc3f377200d
613 | GTMSessionFetcher: b3503b20a988c4e20cc189aa798fd18220133f52
614 | leveldb-library: 50c7b45cbd7bf543c81a468fe557a16ae3db8729
615 | libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
616 | nanopb: 59221d7f958fb711001e6a449489542d92ae113e
617 | OpenSSL-Universal: 1aa4f6a6ee7256b83db99ec1ccdaa80d10f9af9b
618 | PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
619 | RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c
620 | RCTRequired: 2f8cb5b7533219bf4218a045f92768129cf7050a
621 | RCTTypeSafety: 512728b73549e72ad7330b92f3d42936f2a4de5b
622 | React: 98eac01574128a790f0bbbafe2d1a8607291ac24
623 | React-callinvoker: def3f7fae16192df68d9b69fd4bbb59092ee36bc
624 | React-Core: 70a52aa5dbe9b83befae82038451a7df9fd54c5a
625 | React-CoreModules: 052edef46117862e2570eb3a0f06d81c61d2c4b8
626 | React-cxxreact: c1dc71b30653cfb4770efdafcbdc0ad6d388baab
627 | React-jsi: 74341196d9547cbcbcfa4b3bbbf03af56431d5a1
628 | React-jsiexecutor: 06a9c77b56902ae7ffcdd7a4905f664adc5d237b
629 | React-jsinspector: 0ae35a37b20d5e031eb020a69cc5afdbd6406301
630 | react-native-safe-area-context: f0906bf8bc9835ac9a9d3f97e8bde2a997d8da79
631 | React-perflogger: 9c547d8f06b9bf00cb447f2b75e8d7f19b7e02af
632 | React-RCTActionSheet: 3080b6e12e0e1a5b313c8c0050699b5c794a1b11
633 | React-RCTAnimation: 3f96f21a497ae7dabf4d2f150ee43f906aaf516f
634 | React-RCTBlob: 283b8e5025e7f954176bc48164f846909002f3ed
635 | React-RCTImage: 5088a484faac78f2d877e1b79125d3bb1ea94a16
636 | React-RCTLinking: 5e8fbb3e9a8bc2e4e3eb15b1eb8bda5fcac27b8c
637 | React-RCTNetwork: 38ec277217b1e841d5e6a1fa78da65b9212ccb28
638 | React-RCTSettings: 242d6e692108c3de4f3bb74b7586a8799e9ab070
639 | React-RCTText: 8746736ac8eb5a4a74719aa695b7a236a93a83d2
640 | React-RCTVibration: 0fd6b21751a33cb72fce1a4a33ab9678416d307a
641 | React-runtimeexecutor: cad74a1eaa53ee6e7a3620231939d8fe2c6afcf0
642 | ReactCommon: cfe2b7fd20e0dbd2d1185cd7d8f99633fbc5ff05
643 | RNCMaskedView: 5a8ec07677aa885546a0d98da336457e2bea557f
644 | RNFBApp: bb830cc7f7598e46437b833adc841df345e19e2f
645 | RNFBAuth: d011f1b1a066a8bceba63c42369de9c5ce68de5e
646 | RNFBDatabase: 9bf0fe64439bb9eaf22e7d2e565d670b3a32f1e3
647 | RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
648 | RNReanimated: 64f6c5789f82818c07ba3c71864b73619cb23c76
649 | RNScreens: f7ad633b2e0190b77b6a7aab7f914fad6f198d8d
650 | RNSVG: ce9d996113475209013317e48b05c21ee988d42e
651 | RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
652 | Yoga: 8c8436d4171c87504c648ae23b1d81242bdf3bbf
653 | YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
654 |
655 | PODFILE CHECKSUM: 734200ab463f825ff562b555b1ebc2d423a4c171
656 |
657 | COCOAPODS: 1.10.1
658 |
--------------------------------------------------------------------------------
/src/constants/daily.ts:
--------------------------------------------------------------------------------
1 | export const dailySample = JSON.parse(`{
2 | "Meta Data": {
3 | "1. Information": "Daily Time Series with Splits and Dividend Events",
4 | "2. Symbol": "IBM",
5 | "3. Last Refreshed": "2021-03-23",
6 | "4. Output Size": "Compact",
7 | "5. Time Zone": "US/Eastern"
8 | },
9 | "Time Series (Daily)": {
10 | "2021-03-23": {
11 | "1. open": "130.44",
12 | "2. high": "131.56",
13 | "3. low": "129.8",
14 | "4. close": "130.46",
15 | "5. adjusted close": "130.46",
16 | "6. volume": "4343836",
17 | "7. dividend amount": "0.0000",
18 | "8. split coefficient": "1.0"
19 | },
20 | "2021-03-22": {
21 | "1. open": "128.5",
22 | "2. high": "130.72",
23 | "3. low": "127.89",
24 | "4. close": "130.55",
25 | "5. adjusted close": "130.55",
26 | "6. volume": "4164914",
27 | "7. dividend amount": "0.0000",
28 | "8. split coefficient": "1.0"
29 | },
30 | "2021-03-19": {
31 | "1. open": "130.02",
32 | "2. high": "130.44",
33 | "3. low": "128.53",
34 | "4. close": "128.9",
35 | "5. adjusted close": "128.9",
36 | "6. volume": "9844983",
37 | "7. dividend amount": "0.0000",
38 | "8. split coefficient": "1.0"
39 | },
40 | "2021-03-18": {
41 | "1. open": "128.94",
42 | "2. high": "130.995",
43 | "3. low": "127.79",
44 | "4. close": "130.06",
45 | "5. adjusted close": "130.06",
46 | "6. volume": "5835669",
47 | "7. dividend amount": "0.0000",
48 | "8. split coefficient": "1.0"
49 | },
50 | "2021-03-17": {
51 | "1. open": "128.46",
52 | "2. high": "129.49",
53 | "3. low": "127.49",
54 | "4. close": "129.03",
55 | "5. adjusted close": "129.03",
56 | "6. volume": "4291351",
57 | "7. dividend amount": "0.0000",
58 | "8. split coefficient": "1.0"
59 | },
60 | "2021-03-16": {
61 | "1. open": "128.28",
62 | "2. high": "128.52",
63 | "3. low": "127.34",
64 | "4. close": "128.24",
65 | "5. adjusted close": "128.24",
66 | "6. volume": "4653178",
67 | "7. dividend amount": "0.0000",
68 | "8. split coefficient": "1.0"
69 | },
70 | "2021-03-15": {
71 | "1. open": "127.77",
72 | "2. high": "128.75",
73 | "3. low": "127.5401",
74 | "4. close": "128.58",
75 | "5. adjusted close": "128.58",
76 | "6. volume": "3421281",
77 | "7. dividend amount": "0.0000",
78 | "8. split coefficient": "1.0"
79 | },
80 | "2021-03-12": {
81 | "1. open": "127.19",
82 | "2. high": "127.68",
83 | "3. low": "126.61",
84 | "4. close": "127.61",
85 | "5. adjusted close": "127.61",
86 | "6. volume": "4010100",
87 | "7. dividend amount": "0.0000",
88 | "8. split coefficient": "1.0"
89 | },
90 | "2021-03-11": {
91 | "1. open": "128.09",
92 | "2. high": "128.64",
93 | "3. low": "126.78",
94 | "4. close": "127.14",
95 | "5. adjusted close": "127.14",
96 | "6. volume": "5146937",
97 | "7. dividend amount": "0.0000",
98 | "8. split coefficient": "1.0"
99 | },
100 | "2021-03-10": {
101 | "1. open": "125.05",
102 | "2. high": "128.24",
103 | "3. low": "124.61",
104 | "4. close": "127.87",
105 | "5. adjusted close": "127.87",
106 | "6. volume": "7247807",
107 | "7. dividend amount": "0.0000",
108 | "8. split coefficient": "1.0"
109 | },
110 | "2021-03-09": {
111 | "1. open": "125.4",
112 | "2. high": "126.43",
113 | "3. low": "124.16",
114 | "4. close": "124.18",
115 | "5. adjusted close": "124.18",
116 | "6. volume": "5609029",
117 | "7. dividend amount": "0.0000",
118 | "8. split coefficient": "1.0"
119 | },
120 | "2021-03-08": {
121 | "1. open": "122.99",
122 | "2. high": "126.85",
123 | "3. low": "122.88",
124 | "4. close": "124.81",
125 | "5. adjusted close": "124.81",
126 | "6. volume": "7239191",
127 | "7. dividend amount": "0.0000",
128 | "8. split coefficient": "1.0"
129 | },
130 | "2021-03-05": {
131 | "1. open": "120.64",
132 | "2. high": "123.75",
133 | "3. low": "120.25",
134 | "4. close": "122.83",
135 | "5. adjusted close": "122.83",
136 | "6. volume": "6949265",
137 | "7. dividend amount": "0.0000",
138 | "8. split coefficient": "1.0"
139 | },
140 | "2021-03-04": {
141 | "1. open": "122.0",
142 | "2. high": "123.22",
143 | "3. low": "118.755",
144 | "4. close": "120.11",
145 | "5. adjusted close": "120.11",
146 | "6. volume": "8068492",
147 | "7. dividend amount": "0.0000",
148 | "8. split coefficient": "1.0"
149 | },
150 | "2021-03-03": {
151 | "1. open": "120.5",
152 | "2. high": "122.634",
153 | "3. low": "119.98",
154 | "4. close": "122.36",
155 | "5. adjusted close": "122.36",
156 | "6. volume": "7404269",
157 | "7. dividend amount": "0.0000",
158 | "8. split coefficient": "1.0"
159 | },
160 | "2021-03-02": {
161 | "1. open": "120.74",
162 | "2. high": "121.9",
163 | "3. low": "120.26",
164 | "4. close": "120.33",
165 | "5. adjusted close": "120.33",
166 | "6. volume": "4524299",
167 | "7. dividend amount": "0.0000",
168 | "8. split coefficient": "1.0"
169 | },
170 | "2021-03-01": {
171 | "1. open": "120.35",
172 | "2. high": "122.32",
173 | "3. low": "119.8649",
174 | "4. close": "120.74",
175 | "5. adjusted close": "120.74",
176 | "6. volume": "5715767",
177 | "7. dividend amount": "0.0000",
178 | "8. split coefficient": "1.0"
179 | },
180 | "2021-02-26": {
181 | "1. open": "122.25",
182 | "2. high": "122.25",
183 | "3. low": "118.88",
184 | "4. close": "118.93",
185 | "5. adjusted close": "118.93",
186 | "6. volume": "8868848",
187 | "7. dividend amount": "0.0000",
188 | "8. split coefficient": "1.0"
189 | },
190 | "2021-02-25": {
191 | "1. open": "123.37",
192 | "2. high": "124.35",
193 | "3. low": "122.335",
194 | "4. close": "122.47",
195 | "5. adjusted close": "122.47",
196 | "6. volume": "5672671",
197 | "7. dividend amount": "0.0000",
198 | "8. split coefficient": "1.0"
199 | },
200 | "2021-02-24": {
201 | "1. open": "120.8",
202 | "2. high": "123.49",
203 | "3. low": "120.52",
204 | "4. close": "123.21",
205 | "5. adjusted close": "123.21",
206 | "6. volume": "5819983",
207 | "7. dividend amount": "0.0000",
208 | "8. split coefficient": "1.0"
209 | },
210 | "2021-02-23": {
211 | "1. open": "120.92",
212 | "2. high": "121.35",
213 | "3. low": "119.8",
214 | "4. close": "120.71",
215 | "5. adjusted close": "120.71",
216 | "6. volume": "4531464",
217 | "7. dividend amount": "0.0000",
218 | "8. split coefficient": "1.0"
219 | },
220 | "2021-02-22": {
221 | "1. open": "118.5",
222 | "2. high": "121.125",
223 | "3. low": "118.44",
224 | "4. close": "120.86",
225 | "5. adjusted close": "120.86",
226 | "6. volume": "5838841",
227 | "7. dividend amount": "0.0000",
228 | "8. split coefficient": "1.0"
229 | },
230 | "2021-02-19": {
231 | "1. open": "120.75",
232 | "2. high": "120.76",
233 | "3. low": "118.38",
234 | "4. close": "118.99",
235 | "5. adjusted close": "118.99",
236 | "6. volume": "6578741",
237 | "7. dividend amount": "0.0000",
238 | "8. split coefficient": "1.0"
239 | },
240 | "2021-02-18": {
241 | "1. open": "120.5",
242 | "2. high": "120.94",
243 | "3. low": "119.7",
244 | "4. close": "120.73",
245 | "5. adjusted close": "120.73",
246 | "6. volume": "5399145",
247 | "7. dividend amount": "0.0000",
248 | "8. split coefficient": "1.0"
249 | },
250 | "2021-02-17": {
251 | "1. open": "119.27",
252 | "2. high": "120.56",
253 | "3. low": "119.02",
254 | "4. close": "119.97",
255 | "5. adjusted close": "119.97",
256 | "6. volume": "3949876",
257 | "7. dividend amount": "0.0000",
258 | "8. split coefficient": "1.0"
259 | },
260 | "2021-02-16": {
261 | "1. open": "120.15",
262 | "2. high": "120.6",
263 | "3. low": "119.36",
264 | "4. close": "120.07",
265 | "5. adjusted close": "120.07",
266 | "6. volume": "6639790",
267 | "7. dividend amount": "0.0000",
268 | "8. split coefficient": "1.0"
269 | },
270 | "2021-02-12": {
271 | "1. open": "121.0",
272 | "2. high": "121.36",
273 | "3. low": "120.09",
274 | "4. close": "120.8",
275 | "5. adjusted close": "120.8",
276 | "6. volume": "3871195",
277 | "7. dividend amount": "0.0000",
278 | "8. split coefficient": "1.0"
279 | },
280 | "2021-02-11": {
281 | "1. open": "122.0",
282 | "2. high": "122.205",
283 | "3. low": "120.63",
284 | "4. close": "120.91",
285 | "5. adjusted close": "120.91",
286 | "6. volume": "5381556",
287 | "7. dividend amount": "0.0000",
288 | "8. split coefficient": "1.0"
289 | },
290 | "2021-02-10": {
291 | "1. open": "123.03",
292 | "2. high": "123.41",
293 | "3. low": "121.2138",
294 | "4. close": "122.24",
295 | "5. adjusted close": "122.24",
296 | "6. volume": "4831858",
297 | "7. dividend amount": "0.0000",
298 | "8. split coefficient": "1.0"
299 | },
300 | "2021-02-09": {
301 | "1. open": "121.9",
302 | "2. high": "122.5953",
303 | "3. low": "121.05",
304 | "4. close": "122.1",
305 | "5. adjusted close": "122.1",
306 | "6. volume": "4661655",
307 | "7. dividend amount": "1.6300",
308 | "8. split coefficient": "1.0"
309 | },
310 | "2021-02-08": {
311 | "1. open": "122.62",
312 | "2. high": "123.9767",
313 | "3. low": "122.4",
314 | "4. close": "123.61",
315 | "5. adjusted close": "121.981580862",
316 | "6. volume": "5887999",
317 | "7. dividend amount": "0.0000",
318 | "8. split coefficient": "1.0"
319 | },
320 | "2021-02-05": {
321 | "1. open": "121.0",
322 | "2. high": "121.81",
323 | "3. low": "120.52",
324 | "4. close": "121.79",
325 | "5. adjusted close": "120.185557262",
326 | "6. volume": "4565727",
327 | "7. dividend amount": "0.0000",
328 | "8. split coefficient": "1.0"
329 | },
330 | "2021-02-04": {
331 | "1. open": "119.91",
332 | "2. high": "121.1",
333 | "3. low": "118.87",
334 | "4. close": "121.02",
335 | "5. adjusted close": "119.425701123",
336 | "6. volume": "4562124",
337 | "7. dividend amount": "0.0000",
338 | "8. split coefficient": "1.0"
339 | },
340 | "2021-02-03": {
341 | "1. open": "119.04",
342 | "2. high": "119.8",
343 | "3. low": "118.12",
344 | "4. close": "119.12",
345 | "5. adjusted close": "117.550731431",
346 | "6. volume": "6715366",
347 | "7. dividend amount": "0.0000",
348 | "8. split coefficient": "1.0"
349 | },
350 | "2021-02-02": {
351 | "1. open": "119.36",
352 | "2. high": "121.0",
353 | "3. low": "119.28",
354 | "4. close": "119.44",
355 | "5. adjusted close": "117.866515801",
356 | "6. volume": "6311881",
357 | "7. dividend amount": "0.0000",
358 | "8. split coefficient": "1.0"
359 | },
360 | "2021-02-01": {
361 | "1. open": "119.9",
362 | "2. high": "120.95",
363 | "3. low": "118.73",
364 | "4. close": "120.54",
365 | "5. adjusted close": "118.95202457",
366 | "6. volume": "6250508",
367 | "7. dividend amount": "0.0000",
368 | "8. split coefficient": "1.0"
369 | },
370 | "2021-01-29": {
371 | "1. open": "120.22",
372 | "2. high": "121.3",
373 | "3. low": "118.9",
374 | "4. close": "119.11",
375 | "5. adjusted close": "117.54086317",
376 | "6. volume": "11825496",
377 | "7. dividend amount": "0.0000",
378 | "8. split coefficient": "1.0"
379 | },
380 | "2021-01-28": {
381 | "1. open": "122.8",
382 | "2. high": "123.2",
383 | "3. low": "120.07",
384 | "4. close": "120.08",
385 | "5. adjusted close": "118.498084539",
386 | "6. volume": "8084051",
387 | "7. dividend amount": "0.0000",
388 | "8. split coefficient": "1.0"
389 | },
390 | "2021-01-27": {
391 | "1. open": "122.08",
392 | "2. high": "124.79",
393 | "3. low": "121.6214",
394 | "4. close": "122.47",
395 | "5. adjusted close": "120.856599046",
396 | "6. volume": "12146541",
397 | "7. dividend amount": "0.0000",
398 | "8. split coefficient": "1.0"
399 | },
400 | "2021-01-26": {
401 | "1. open": "119.18",
402 | "2. high": "122.59",
403 | "3. low": "118.42",
404 | "4. close": "122.49",
405 | "5. adjusted close": "120.876335569",
406 | "6. volume": "10694708",
407 | "7. dividend amount": "0.0000",
408 | "8. split coefficient": "1.0"
409 | },
410 | "2021-01-25": {
411 | "1. open": "118.7624",
412 | "2. high": "119.538",
413 | "3. low": "117.45",
414 | "4. close": "118.58",
415 | "5. adjusted close": "117.017845308",
416 | "6. volume": "13686391",
417 | "7. dividend amount": "0.0000",
418 | "8. split coefficient": "1.0"
419 | },
420 | "2021-01-22": {
421 | "1. open": "120.7",
422 | "2. high": "120.7",
423 | "3. low": "117.36",
424 | "4. close": "118.61",
425 | "5. adjusted close": "117.047450093",
426 | "6. volume": "38063533",
427 | "7. dividend amount": "0.0000",
428 | "8. split coefficient": "1.0"
429 | },
430 | "2021-01-21": {
431 | "1. open": "130.12",
432 | "2. high": "132.24",
433 | "3. low": "130.05",
434 | "4. close": "131.65",
435 | "5. adjusted close": "129.915663137",
436 | "6. volume": "12819233",
437 | "7. dividend amount": "0.0000",
438 | "8. split coefficient": "1.0"
439 | },
440 | "2021-01-20": {
441 | "1. open": "129.7",
442 | "2. high": "131.06",
443 | "3. low": "128.56",
444 | "4. close": "130.08",
445 | "5. adjusted close": "128.366346076",
446 | "6. volume": "5598705",
447 | "7. dividend amount": "0.0000",
448 | "8. split coefficient": "1.0"
449 | },
450 | "2021-01-19": {
451 | "1. open": "129.28",
452 | "2. high": "129.59",
453 | "3. low": "128.0885",
454 | "4. close": "129.02",
455 | "5. adjusted close": "127.320310353",
456 | "6. volume": "5397956",
457 | "7. dividend amount": "0.0000",
458 | "8. split coefficient": "1.0"
459 | },
460 | "2021-01-15": {
461 | "1. open": "128.28",
462 | "2. high": "129.24",
463 | "3. low": "127.67",
464 | "4. close": "128.39",
465 | "5. adjusted close": "126.698609876",
466 | "6. volume": "4905506",
467 | "7. dividend amount": "0.0000",
468 | "8. split coefficient": "1.0"
469 | },
470 | "2021-01-14": {
471 | "1. open": "128.02",
472 | "2. high": "130.16",
473 | "3. low": "127.55",
474 | "4. close": "128.97",
475 | "5. adjusted close": "127.270969046",
476 | "6. volume": "7503180",
477 | "7. dividend amount": "0.0000",
478 | "8. split coefficient": "1.0"
479 | },
480 | "2021-01-13": {
481 | "1. open": "129.15",
482 | "2. high": "129.75",
483 | "3. low": "126.455",
484 | "4. close": "126.92",
485 | "5. adjusted close": "125.24797543",
486 | "6. volume": "7677739",
487 | "7. dividend amount": "0.0000",
488 | "8. split coefficient": "1.0"
489 | },
490 | "2021-01-12": {
491 | "1. open": "129.09",
492 | "2. high": "129.85",
493 | "3. low": "127.94",
494 | "4. close": "129.21",
495 | "5. adjusted close": "127.507807322",
496 | "6. volume": "3729068",
497 | "7. dividend amount": "0.0000",
498 | "8. split coefficient": "1.0"
499 | },
500 | "2021-01-11": {
501 | "1. open": "127.95",
502 | "2. high": "129.675",
503 | "3. low": "127.66",
504 | "4. close": "128.58",
505 | "5. adjusted close": "126.886106846",
506 | "6. volume": "5602466",
507 | "7. dividend amount": "0.0000",
508 | "8. split coefficient": "1.0"
509 | },
510 | "2021-01-08": {
511 | "1. open": "128.57",
512 | "2. high": "129.32",
513 | "3. low": "126.98",
514 | "4. close": "128.53",
515 | "5. adjusted close": "126.836765538",
516 | "6. volume": "4676487",
517 | "7. dividend amount": "0.0000",
518 | "8. split coefficient": "1.0"
519 | },
520 | "2021-01-07": {
521 | "1. open": "130.04",
522 | "2. high": "130.46",
523 | "3. low": "128.26",
524 | "4. close": "128.99",
525 | "5. adjusted close": "127.290705569",
526 | "6. volume": "4507382",
527 | "7. dividend amount": "0.0000",
528 | "8. split coefficient": "1.0"
529 | },
530 | "2021-01-06": {
531 | "1. open": "126.9",
532 | "2. high": "131.88",
533 | "3. low": "126.72",
534 | "4. close": "129.29",
535 | "5. adjusted close": "127.586753415",
536 | "6. volume": "7956740",
537 | "7. dividend amount": "0.0000",
538 | "8. split coefficient": "1.0"
539 | },
540 | "2021-01-05": {
541 | "1. open": "125.01",
542 | "2. high": "126.68",
543 | "3. low": "124.61",
544 | "4. close": "126.14",
545 | "5. adjusted close": "124.47825103",
546 | "6. volume": "6114619",
547 | "7. dividend amount": "0.0000",
548 | "8. split coefficient": "1.0"
549 | },
550 | "2021-01-04": {
551 | "1. open": "125.85",
552 | "2. high": "125.9174",
553 | "3. low": "123.04",
554 | "4. close": "123.94",
555 | "5. adjusted close": "122.307233492",
556 | "6. volume": "5179161",
557 | "7. dividend amount": "0.0000",
558 | "8. split coefficient": "1.0"
559 | },
560 | "2020-12-31": {
561 | "1. open": "124.22",
562 | "2. high": "126.03",
563 | "3. low": "123.99",
564 | "4. close": "125.88",
565 | "5. adjusted close": "124.221676231",
566 | "6. volume": "3574696",
567 | "7. dividend amount": "0.0000",
568 | "8. split coefficient": "1.0"
569 | },
570 | "2020-12-30": {
571 | "1. open": "123.8",
572 | "2. high": "124.85",
573 | "3. low": "123.63",
574 | "4. close": "124.34",
575 | "5. adjusted close": "122.701963954",
576 | "6. volume": "3380494",
577 | "7. dividend amount": "0.0000",
578 | "8. split coefficient": "1.0"
579 | },
580 | "2020-12-29": {
581 | "1. open": "125.35",
582 | "2. high": "125.48",
583 | "3. low": "123.24",
584 | "4. close": "123.8",
585 | "5. adjusted close": "122.169077831",
586 | "6. volume": "3487007",
587 | "7. dividend amount": "0.0000",
588 | "8. split coefficient": "1.0"
589 | },
590 | "2020-12-28": {
591 | "1. open": "125.1",
592 | "2. high": "126.6",
593 | "3. low": "124.46",
594 | "4. close": "124.82",
595 | "5. adjusted close": "123.175640508",
596 | "6. volume": "3583222",
597 | "7. dividend amount": "0.0000",
598 | "8. split coefficient": "1.0"
599 | },
600 | "2020-12-24": {
601 | "1. open": "125.0",
602 | "2. high": "125.1",
603 | "3. low": "124.21",
604 | "4. close": "124.69",
605 | "5. adjusted close": "123.047353108",
606 | "6. volume": "1761122",
607 | "7. dividend amount": "0.0000",
608 | "8. split coefficient": "1.0"
609 | },
610 | "2020-12-23": {
611 | "1. open": "123.88",
612 | "2. high": "125.21",
613 | "3. low": "123.74",
614 | "4. close": "123.9",
615 | "5. adjusted close": "122.267760446",
616 | "6. volume": "2693889",
617 | "7. dividend amount": "0.0000",
618 | "8. split coefficient": "1.0"
619 | },
620 | "2020-12-22": {
621 | "1. open": "123.31",
622 | "2. high": "124.22",
623 | "3. low": "122.41",
624 | "4. close": "123.61",
625 | "5. adjusted close": "121.981580862",
626 | "6. volume": "4337757",
627 | "7. dividend amount": "0.0000",
628 | "8. split coefficient": "1.0"
629 | },
630 | "2020-12-21": {
631 | "1. open": "123.97",
632 | "2. high": "124.18",
633 | "3. low": "121.72",
634 | "4. close": "123.39",
635 | "5. adjusted close": "121.764479108",
636 | "6. volume": "6115671",
637 | "7. dividend amount": "0.0000",
638 | "8. split coefficient": "1.0"
639 | },
640 | "2020-12-18": {
641 | "1. open": "125.59",
642 | "2. high": "126.4",
643 | "3. low": "124.97",
644 | "4. close": "125.85",
645 | "5. adjusted close": "124.192071446",
646 | "6. volume": "7552845",
647 | "7. dividend amount": "0.0000",
648 | "8. split coefficient": "1.0"
649 | },
650 | "2020-12-17": {
651 | "1. open": "126.08",
652 | "2. high": "126.09",
653 | "3. low": "124.91",
654 | "4. close": "125.55",
655 | "5. adjusted close": "123.8960236",
656 | "6. volume": "3787962",
657 | "7. dividend amount": "0.0000",
658 | "8. split coefficient": "1.0"
659 | },
660 | "2020-12-16": {
661 | "1. open": "125.93",
662 | "2. high": "126.5728",
663 | "3. low": "125.286",
664 | "4. close": "125.55",
665 | "5. adjusted close": "123.8960236",
666 | "6. volume": "4530096",
667 | "7. dividend amount": "0.0000",
668 | "8. split coefficient": "1.0"
669 | },
670 | "2020-12-15": {
671 | "1. open": "124.39",
672 | "2. high": "125.93",
673 | "3. low": "123.44",
674 | "4. close": "125.93",
675 | "5. adjusted close": "124.271017538",
676 | "6. volume": "4359601",
677 | "7. dividend amount": "0.0000",
678 | "8. split coefficient": "1.0"
679 | },
680 | "2020-12-14": {
681 | "1. open": "125.32",
682 | "2. high": "126.2435",
683 | "3. low": "123.47",
684 | "4. close": "123.53",
685 | "5. adjusted close": "121.902634769",
686 | "6. volume": "5050023",
687 | "7. dividend amount": "0.0000",
688 | "8. split coefficient": "1.0"
689 | },
690 | "2020-12-11": {
691 | "1. open": "124.08",
692 | "2. high": "125.51",
693 | "3. low": "123.61",
694 | "4. close": "124.27",
695 | "5. adjusted close": "122.632886123",
696 | "6. volume": "4481416",
697 | "7. dividend amount": "0.0000",
698 | "8. split coefficient": "1.0"
699 | },
700 | "2020-12-10": {
701 | "1. open": "126.35",
702 | "2. high": "126.93",
703 | "3. low": "124.94",
704 | "4. close": "124.96",
705 | "5. adjusted close": "123.313796169",
706 | "6. volume": "4803172",
707 | "7. dividend amount": "0.0000",
708 | "8. split coefficient": "1.0"
709 | },
710 | "2020-12-09": {
711 | "1. open": "125.8",
712 | "2. high": "127.69",
713 | "3. low": "125.7",
714 | "4. close": "126.79",
715 | "5. adjusted close": "125.11968803",
716 | "6. volume": "6513517",
717 | "7. dividend amount": "0.0000",
718 | "8. split coefficient": "1.0"
719 | },
720 | "2020-12-08": {
721 | "1. open": "125.32",
722 | "2. high": "126.33",
723 | "3. low": "124.64",
724 | "4. close": "125.71",
725 | "5. adjusted close": "124.053915784",
726 | "6. volume": "5395024",
727 | "7. dividend amount": "0.0000",
728 | "8. split coefficient": "1.0"
729 | },
730 | "2020-12-07": {
731 | "1. open": "126.49",
732 | "2. high": "126.97",
733 | "3. low": "124.57",
734 | "4. close": "124.7",
735 | "5. adjusted close": "123.057221369",
736 | "6. volume": "8318500",
737 | "7. dividend amount": "0.0000",
738 | "8. split coefficient": "1.0"
739 | },
740 | "2020-12-04": {
741 | "1. open": "123.97",
742 | "2. high": "127.38",
743 | "3. low": "123.64",
744 | "4. close": "127.2",
745 | "5. adjusted close": "125.524286753",
746 | "6. volume": "5522760",
747 | "7. dividend amount": "0.0000",
748 | "8. split coefficient": "1.0"
749 | },
750 | "2020-12-03": {
751 | "1. open": "124.16",
752 | "2. high": "124.86",
753 | "3. low": "123.29",
754 | "4. close": "123.61",
755 | "5. adjusted close": "121.981580862",
756 | "6. volume": "4548161",
757 | "7. dividend amount": "0.0000",
758 | "8. split coefficient": "1.0"
759 | },
760 | "2020-12-02": {
761 | "1. open": "122.85",
762 | "2. high": "124.64",
763 | "3. low": "122.41",
764 | "4. close": "124.62",
765 | "5. adjusted close": "122.978275277",
766 | "6. volume": "3690737",
767 | "7. dividend amount": "0.0000",
768 | "8. split coefficient": "1.0"
769 | },
770 | "2020-12-01": {
771 | "1. open": "123.9",
772 | "2. high": "125.83",
773 | "3. low": "123.08",
774 | "4. close": "123.16",
775 | "5. adjusted close": "121.537509092",
776 | "6. volume": "5099334",
777 | "7. dividend amount": "0.0000",
778 | "8. split coefficient": "1.0"
779 | },
780 | "2020-11-30": {
781 | "1. open": "124.1",
782 | "2. high": "125.0",
783 | "3. low": "123.09",
784 | "4. close": "123.52",
785 | "5. adjusted close": "121.892766508",
786 | "6. volume": "5987991",
787 | "7. dividend amount": "0.0000",
788 | "8. split coefficient": "1.0"
789 | },
790 | "2020-11-27": {
791 | "1. open": "124.2",
792 | "2. high": "125.313",
793 | "3. low": "123.91",
794 | "4. close": "124.35",
795 | "5. adjusted close": "122.711832215",
796 | "6. volume": "2091186",
797 | "7. dividend amount": "0.0000",
798 | "8. split coefficient": "1.0"
799 | },
800 | "2020-11-25": {
801 | "1. open": "122.93",
802 | "2. high": "124.33",
803 | "3. low": "122.11",
804 | "4. close": "124.2",
805 | "5. adjusted close": "122.563808292",
806 | "6. volume": "4135894",
807 | "7. dividend amount": "0.0000",
808 | "8. split coefficient": "1.0"
809 | },
810 | "2020-11-24": {
811 | "1. open": "120.86",
812 | "2. high": "124.73",
813 | "3. low": "120.805",
814 | "4. close": "124.42",
815 | "5. adjusted close": "122.780910046",
816 | "6. volume": "7535949",
817 | "7. dividend amount": "0.0000",
818 | "8. split coefficient": "1.0"
819 | },
820 | "2020-11-23": {
821 | "1. open": "117.43",
822 | "2. high": "120.515",
823 | "3. low": "117.27",
824 | "4. close": "120.09",
825 | "5. adjusted close": "118.5079528",
826 | "6. volume": "5655119",
827 | "7. dividend amount": "0.0000",
828 | "8. split coefficient": "1.0"
829 | },
830 | "2020-11-20": {
831 | "1. open": "117.6",
832 | "2. high": "118.04",
833 | "3. low": "116.69",
834 | "4. close": "116.94",
835 | "5. adjusted close": "115.399450416",
836 | "6. volume": "5024593",
837 | "7. dividend amount": "0.0000",
838 | "8. split coefficient": "1.0"
839 | },
840 | "2020-11-19": {
841 | "1. open": "116.54",
842 | "2. high": "117.45",
843 | "3. low": "115.89",
844 | "4. close": "117.18",
845 | "5. adjusted close": "115.636288693",
846 | "6. volume": "3439648",
847 | "7. dividend amount": "0.0000",
848 | "8. split coefficient": "1.0"
849 | },
850 | "2020-11-18": {
851 | "1. open": "117.72",
852 | "2. high": "118.88",
853 | "3. low": "116.75",
854 | "4. close": "116.77",
855 | "5. adjusted close": "115.23168997",
856 | "6. volume": "4606828",
857 | "7. dividend amount": "0.0000",
858 | "8. split coefficient": "1.0"
859 | },
860 | "2020-11-17": {
861 | "1. open": "117.6",
862 | "2. high": "118.54",
863 | "3. low": "117.07",
864 | "4. close": "117.7",
865 | "5. adjusted close": "116.149438293",
866 | "6. volume": "4134455",
867 | "7. dividend amount": "0.0000",
868 | "8. split coefficient": "1.0"
869 | },
870 | "2020-11-16": {
871 | "1. open": "118.3",
872 | "2. high": "118.55",
873 | "3. low": "117.12",
874 | "4. close": "118.36",
875 | "5. adjusted close": "116.800743555",
876 | "6. volume": "5293385",
877 | "7. dividend amount": "0.0000",
878 | "8. split coefficient": "1.0"
879 | },
880 | "2020-11-13": {
881 | "1. open": "115.19",
882 | "2. high": "117.37",
883 | "3. low": "115.01",
884 | "4. close": "116.85",
885 | "5. adjusted close": "115.310636062",
886 | "6. volume": "4683512",
887 | "7. dividend amount": "0.0000",
888 | "8. split coefficient": "1.0"
889 | },
890 | "2020-11-12": {
891 | "1. open": "115.63",
892 | "2. high": "116.37",
893 | "3. low": "113.48",
894 | "4. close": "114.5",
895 | "5. adjusted close": "112.991594601",
896 | "6. volume": "6500799",
897 | "7. dividend amount": "0.0000",
898 | "8. split coefficient": "1.0"
899 | },
900 | "2020-11-11": {
901 | "1. open": "118.12",
902 | "2. high": "118.35",
903 | "3. low": "116.22",
904 | "4. close": "117.2",
905 | "5. adjusted close": "115.656025216",
906 | "6. volume": "4289601",
907 | "7. dividend amount": "0.0000",
908 | "8. split coefficient": "1.0"
909 | },
910 | "2020-11-10": {
911 | "1. open": "116.69",
912 | "2. high": "118.17",
913 | "3. low": "116.25",
914 | "4. close": "117.91",
915 | "5. adjusted close": "116.356671785",
916 | "6. volume": "5622756",
917 | "7. dividend amount": "0.0000",
918 | "8. split coefficient": "1.0"
919 | },
920 | "2020-11-09": {
921 | "1. open": "117.88",
922 | "2. high": "119.74",
923 | "3. low": "115.27",
924 | "4. close": "115.53",
925 | "5. adjusted close": "114.008025539",
926 | "6. volume": "8992152",
927 | "7. dividend amount": "1.6300",
928 | "8. split coefficient": "1.0"
929 | },
930 | "2020-11-06": {
931 | "1. open": "115.08",
932 | "2. high": "115.1",
933 | "3. low": "113.39",
934 | "4. close": "114.04",
935 | "5. adjusted close": "110.971963405",
936 | "6. volume": "5249171",
937 | "7. dividend amount": "0.0000",
938 | "8. split coefficient": "1.0"
939 | },
940 | "2020-11-05": {
941 | "1. open": "113.3",
942 | "2. high": "115.29",
943 | "3. low": "113.01",
944 | "4. close": "114.77",
945 | "5. adjusted close": "111.682324097",
946 | "6. volume": "4902206",
947 | "7. dividend amount": "0.0000",
948 | "8. split coefficient": "1.0"
949 | },
950 | "2020-11-04": {
951 | "1. open": "112.33",
952 | "2. high": "113.91",
953 | "3. low": "111.16",
954 | "4. close": "111.9",
955 | "5. adjusted close": "108.889536172",
956 | "6. volume": "5800071",
957 | "7. dividend amount": "0.0000",
958 | "8. split coefficient": "1.0"
959 | },
960 | "2020-11-03": {
961 | "1. open": "114.0",
962 | "2. high": "115.65",
963 | "3. low": "113.63",
964 | "4. close": "114.16",
965 | "5. adjusted close": "111.088735025",
966 | "6. volume": "4204287",
967 | "7. dividend amount": "0.0000",
968 | "8. split coefficient": "1.0"
969 | },
970 | "2020-11-02": {
971 | "1. open": "112.65",
972 | "2. high": "113.8265",
973 | "3. low": "112.25",
974 | "4. close": "112.91",
975 | "5. adjusted close": "109.872363978",
976 | "6. volume": "5311497",
977 | "7. dividend amount": "0.0000",
978 | "8. split coefficient": "1.0"
979 | },
980 | "2020-10-30": {
981 | "1. open": "107.9",
982 | "2. high": "111.8",
983 | "3. low": "107.75",
984 | "4. close": "111.66",
985 | "5. adjusted close": "108.655992931",
986 | "6. volume": "7923882",
987 | "7. dividend amount": "0.0000",
988 | "8. split coefficient": "1.0"
989 | },
990 | "2020-10-29": {
991 | "1. open": "107.25",
992 | "2. high": "109.64",
993 | "3. low": "106.55",
994 | "4. close": "108.91",
995 | "5. adjusted close": "105.979976626",
996 | "6. volume": "6760241",
997 | "7. dividend amount": "0.0000",
998 | "8. split coefficient": "1.0"
999 | },
1000 | "2020-10-28": {
1001 | "1. open": "108.66",
1002 | "2. high": "109.73",
1003 | "3. low": "105.92",
1004 | "4. close": "106.65",
1005 | "5. adjusted close": "103.780777772",
1006 | "6. volume": "9427321",
1007 | "7. dividend amount": "0.0000",
1008 | "8. split coefficient": "1.0"
1009 | }
1010 | }
1011 | }`)
--------------------------------------------------------------------------------
/ios/Stonks.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 00E356F31AD99517003FC87E /* StonksTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* StonksTests.m */; };
11 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
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 | 20BE60DAABC34EB49B1BFB7F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3F4D9394EB3F42A9BE1AB71D /* EvilIcons.ttf */; };
15 | 2A4CDA7506784DD08DEDF4DE /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0533EFE5E6124D72BD19415F /* FontAwesome.ttf */; };
16 | 2C9123882606F7F400CD6F72 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2C9123872606F7F400CD6F72 /* GoogleService-Info.plist */; };
17 | 3EFE5BCC0DFD41DF85DDEDFB /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = E17AD4B79748411F8B7BAF28 /* FontAwesome5_Solid.ttf */; };
18 | 40D1A64802E2E1E3C42D7252 /* libPods-Stonks.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E169F14F02DA64D4D6F7CBEB /* libPods-Stonks.a */; };
19 | 40ED623E95894B6B9495D341 /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = AC17169559B445259814EFCC /* Feather.ttf */; };
20 | 528432E9165945BD89A77FD2 /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7C11A6F547E44AB082B65E60 /* FontAwesome5_Brands.ttf */; };
21 | 540008F2E57B42AFA4B617FC /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 98AA70A81C4F4B4CB5DDE9C4 /* Fontisto.ttf */; };
22 | 55D692E7B8AB4BA49EE6D309 /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4239F7F87A0745E59382ED99 /* MaterialCommunityIcons.ttf */; };
23 | 63AE85BD36854E30A934489A /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 420CA63A52FB4827A435ECE0 /* AntDesign.ttf */; };
24 | 73EBE5B78AA44DEAA5FA4D2F /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EE9B0FBF0E2B40128EB351E4 /* Ionicons.ttf */; };
25 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
26 | 9308A92CE3044922A3C3B89E /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A84458D30E6E46E5A265F3FF /* Entypo.ttf */; };
27 | 99C812F2CB3E471FB8B3CF02 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4DEB364F2B4C4D6FB8EB7502 /* SimpleLineIcons.ttf */; };
28 | A644E4BA4B469B65289E5BFF /* libPods-Stonks-StonksTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A25A8B2457FFBF37210AADD /* libPods-Stonks-StonksTests.a */; };
29 | ACA5547B3D0049F6ACE55A39 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7FA10D19C8154E318647A89A /* Foundation.ttf */; };
30 | D69D823F14F143A8BEC3AC0F /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CA5C2F6200E442ACA9E84662 /* FontAwesome5_Regular.ttf */; };
31 | DC71731E1CBA4C5BA1470A2C /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3E1B07ED76574E76947673FA /* Octicons.ttf */; };
32 | E71F9FF8094543A19A9894F8 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5E807742A7644CB5A5E85BEE /* Zocial.ttf */; };
33 | F62BF98EDC6B4C80846D20FB /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4A0F70F9D9FA4ABAAEEDCD02 /* MaterialIcons.ttf */; };
34 | /* End PBXBuildFile section */
35 |
36 | /* Begin PBXContainerItemProxy section */
37 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
38 | isa = PBXContainerItemProxy;
39 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
40 | proxyType = 1;
41 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
42 | remoteInfo = Stonks;
43 | };
44 | /* End PBXContainerItemProxy section */
45 |
46 | /* Begin PBXFileReference section */
47 | 00E356EE1AD99517003FC87E /* StonksTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StonksTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
48 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
49 | 00E356F21AD99517003FC87E /* StonksTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StonksTests.m; sourceTree = ""; };
50 | 0533EFE5E6124D72BD19415F /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; };
51 | 13B07F961A680F5B00A75B9A /* Stonks.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Stonks.app; sourceTree = BUILT_PRODUCTS_DIR; };
52 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Stonks/AppDelegate.h; sourceTree = ""; };
53 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Stonks/AppDelegate.m; sourceTree = ""; };
54 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Stonks/Images.xcassets; sourceTree = ""; };
55 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Stonks/Info.plist; sourceTree = ""; };
56 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Stonks/main.m; sourceTree = ""; };
57 | 2C9123872606F7F400CD6F72 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; };
58 | 3E1B07ED76574E76947673FA /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; };
59 | 3F4D9394EB3F42A9BE1AB71D /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; };
60 | 420CA63A52FB4827A435ECE0 /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; };
61 | 4239F7F87A0745E59382ED99 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; };
62 | 4A0F70F9D9FA4ABAAEEDCD02 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; };
63 | 4DEB364F2B4C4D6FB8EB7502 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; };
64 | 5A25A8B2457FFBF37210AADD /* libPods-Stonks-StonksTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Stonks-StonksTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
65 | 5E807742A7644CB5A5E85BEE /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; };
66 | 6157E2D43133F15312C53429 /* Pods-Stonks.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Stonks.release.xcconfig"; path = "Target Support Files/Pods-Stonks/Pods-Stonks.release.xcconfig"; sourceTree = ""; };
67 | 7434A833441AA4E02F6C2E61 /* Pods-Stonks-StonksTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Stonks-StonksTests.debug.xcconfig"; path = "Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests.debug.xcconfig"; sourceTree = ""; };
68 | 7A810958503B11731DC49E2A /* Pods-Stonks-StonksTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Stonks-StonksTests.release.xcconfig"; path = "Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests.release.xcconfig"; sourceTree = ""; };
69 | 7C11A6F547E44AB082B65E60 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; };
70 | 7FA10D19C8154E318647A89A /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; };
71 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = Stonks/LaunchScreen.storyboard; sourceTree = ""; };
72 | 98AA70A81C4F4B4CB5DDE9C4 /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; };
73 | A84458D30E6E46E5A265F3FF /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; };
74 | AC17169559B445259814EFCC /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; };
75 | B7EE22998FB2954C00F47109 /* Pods-Stonks.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Stonks.debug.xcconfig"; path = "Target Support Files/Pods-Stonks/Pods-Stonks.debug.xcconfig"; sourceTree = ""; };
76 | CA5C2F6200E442ACA9E84662 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; };
77 | E169F14F02DA64D4D6F7CBEB /* libPods-Stonks.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Stonks.a"; sourceTree = BUILT_PRODUCTS_DIR; };
78 | E17AD4B79748411F8B7BAF28 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; };
79 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
80 | EE9B0FBF0E2B40128EB351E4 /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; };
81 | /* End PBXFileReference section */
82 |
83 | /* Begin PBXFrameworksBuildPhase section */
84 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
85 | isa = PBXFrameworksBuildPhase;
86 | buildActionMask = 2147483647;
87 | files = (
88 | A644E4BA4B469B65289E5BFF /* libPods-Stonks-StonksTests.a in Frameworks */,
89 | );
90 | runOnlyForDeploymentPostprocessing = 0;
91 | };
92 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
93 | isa = PBXFrameworksBuildPhase;
94 | buildActionMask = 2147483647;
95 | files = (
96 | 40D1A64802E2E1E3C42D7252 /* libPods-Stonks.a in Frameworks */,
97 | );
98 | runOnlyForDeploymentPostprocessing = 0;
99 | };
100 | /* End PBXFrameworksBuildPhase section */
101 |
102 | /* Begin PBXGroup section */
103 | 00E356EF1AD99517003FC87E /* StonksTests */ = {
104 | isa = PBXGroup;
105 | children = (
106 | 00E356F21AD99517003FC87E /* StonksTests.m */,
107 | 00E356F01AD99517003FC87E /* Supporting Files */,
108 | );
109 | path = StonksTests;
110 | sourceTree = "";
111 | };
112 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
113 | isa = PBXGroup;
114 | children = (
115 | 00E356F11AD99517003FC87E /* Info.plist */,
116 | );
117 | name = "Supporting Files";
118 | sourceTree = "";
119 | };
120 | 13B07FAE1A68108700A75B9A /* Stonks */ = {
121 | isa = PBXGroup;
122 | children = (
123 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
124 | 13B07FB01A68108700A75B9A /* AppDelegate.m */,
125 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
126 | 13B07FB61A68108700A75B9A /* Info.plist */,
127 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
128 | 13B07FB71A68108700A75B9A /* main.m */,
129 | );
130 | name = Stonks;
131 | sourceTree = "";
132 | };
133 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
134 | isa = PBXGroup;
135 | children = (
136 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
137 | E169F14F02DA64D4D6F7CBEB /* libPods-Stonks.a */,
138 | 5A25A8B2457FFBF37210AADD /* libPods-Stonks-StonksTests.a */,
139 | );
140 | name = Frameworks;
141 | sourceTree = "";
142 | };
143 | 6886B71C6587BAFBF35880B2 /* Pods */ = {
144 | isa = PBXGroup;
145 | children = (
146 | B7EE22998FB2954C00F47109 /* Pods-Stonks.debug.xcconfig */,
147 | 6157E2D43133F15312C53429 /* Pods-Stonks.release.xcconfig */,
148 | 7434A833441AA4E02F6C2E61 /* Pods-Stonks-StonksTests.debug.xcconfig */,
149 | 7A810958503B11731DC49E2A /* Pods-Stonks-StonksTests.release.xcconfig */,
150 | );
151 | path = Pods;
152 | sourceTree = "";
153 | };
154 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
155 | isa = PBXGroup;
156 | children = (
157 | );
158 | name = Libraries;
159 | sourceTree = "";
160 | };
161 | 83CBB9F61A601CBA00E9B192 = {
162 | isa = PBXGroup;
163 | children = (
164 | 2C9123872606F7F400CD6F72 /* GoogleService-Info.plist */,
165 | 13B07FAE1A68108700A75B9A /* Stonks */,
166 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
167 | 00E356EF1AD99517003FC87E /* StonksTests */,
168 | 83CBBA001A601CBA00E9B192 /* Products */,
169 | 2D16E6871FA4F8E400B85C8A /* Frameworks */,
170 | 6886B71C6587BAFBF35880B2 /* Pods */,
171 | C84A83D2C37C4D5397E69E10 /* Resources */,
172 | );
173 | indentWidth = 2;
174 | sourceTree = "";
175 | tabWidth = 2;
176 | usesTabs = 0;
177 | };
178 | 83CBBA001A601CBA00E9B192 /* Products */ = {
179 | isa = PBXGroup;
180 | children = (
181 | 13B07F961A680F5B00A75B9A /* Stonks.app */,
182 | 00E356EE1AD99517003FC87E /* StonksTests.xctest */,
183 | );
184 | name = Products;
185 | sourceTree = "";
186 | };
187 | C84A83D2C37C4D5397E69E10 /* Resources */ = {
188 | isa = PBXGroup;
189 | children = (
190 | 420CA63A52FB4827A435ECE0 /* AntDesign.ttf */,
191 | A84458D30E6E46E5A265F3FF /* Entypo.ttf */,
192 | 3F4D9394EB3F42A9BE1AB71D /* EvilIcons.ttf */,
193 | AC17169559B445259814EFCC /* Feather.ttf */,
194 | 0533EFE5E6124D72BD19415F /* FontAwesome.ttf */,
195 | 7C11A6F547E44AB082B65E60 /* FontAwesome5_Brands.ttf */,
196 | CA5C2F6200E442ACA9E84662 /* FontAwesome5_Regular.ttf */,
197 | E17AD4B79748411F8B7BAF28 /* FontAwesome5_Solid.ttf */,
198 | 98AA70A81C4F4B4CB5DDE9C4 /* Fontisto.ttf */,
199 | 7FA10D19C8154E318647A89A /* Foundation.ttf */,
200 | EE9B0FBF0E2B40128EB351E4 /* Ionicons.ttf */,
201 | 4239F7F87A0745E59382ED99 /* MaterialCommunityIcons.ttf */,
202 | 4A0F70F9D9FA4ABAAEEDCD02 /* MaterialIcons.ttf */,
203 | 3E1B07ED76574E76947673FA /* Octicons.ttf */,
204 | 4DEB364F2B4C4D6FB8EB7502 /* SimpleLineIcons.ttf */,
205 | 5E807742A7644CB5A5E85BEE /* Zocial.ttf */,
206 | );
207 | name = Resources;
208 | sourceTree = "";
209 | };
210 | /* End PBXGroup section */
211 |
212 | /* Begin PBXNativeTarget section */
213 | 00E356ED1AD99517003FC87E /* StonksTests */ = {
214 | isa = PBXNativeTarget;
215 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "StonksTests" */;
216 | buildPhases = (
217 | 25FDC96962D4CA2D530D0FFB /* [CP] Check Pods Manifest.lock */,
218 | 00E356EA1AD99517003FC87E /* Sources */,
219 | 00E356EB1AD99517003FC87E /* Frameworks */,
220 | 00E356EC1AD99517003FC87E /* Resources */,
221 | EF02194D5E856789190E7378 /* [CP] Embed Pods Frameworks */,
222 | EA6313F655A0F505047847BE /* [CP] Copy Pods Resources */,
223 | );
224 | buildRules = (
225 | );
226 | dependencies = (
227 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
228 | );
229 | name = StonksTests;
230 | productName = StonksTests;
231 | productReference = 00E356EE1AD99517003FC87E /* StonksTests.xctest */;
232 | productType = "com.apple.product-type.bundle.unit-test";
233 | };
234 | 13B07F861A680F5B00A75B9A /* Stonks */ = {
235 | isa = PBXNativeTarget;
236 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Stonks" */;
237 | buildPhases = (
238 | 79837D2B1754EA50A190F9DC /* [CP] Check Pods Manifest.lock */,
239 | FD10A7F022414F080027D42C /* Start Packager */,
240 | 13B07F871A680F5B00A75B9A /* Sources */,
241 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
242 | 13B07F8E1A680F5B00A75B9A /* Resources */,
243 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
244 | B261A67F8F47A5EE1986DD78 /* [CP] Embed Pods Frameworks */,
245 | D476E382FB2F749E4CF3B2F3 /* [CP] Copy Pods Resources */,
246 | D1C7CBEEE98663CF8C451026 /* [CP-User] [RNFB] Core Configuration */,
247 | );
248 | buildRules = (
249 | );
250 | dependencies = (
251 | );
252 | name = Stonks;
253 | productName = Stonks;
254 | productReference = 13B07F961A680F5B00A75B9A /* Stonks.app */;
255 | productType = "com.apple.product-type.application";
256 | };
257 | /* End PBXNativeTarget section */
258 |
259 | /* Begin PBXProject section */
260 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
261 | isa = PBXProject;
262 | attributes = {
263 | LastUpgradeCheck = 1210;
264 | TargetAttributes = {
265 | 00E356ED1AD99517003FC87E = {
266 | CreatedOnToolsVersion = 6.2;
267 | TestTargetID = 13B07F861A680F5B00A75B9A;
268 | };
269 | 13B07F861A680F5B00A75B9A = {
270 | LastSwiftMigration = 1120;
271 | };
272 | };
273 | };
274 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Stonks" */;
275 | compatibilityVersion = "Xcode 12.0";
276 | developmentRegion = en;
277 | hasScannedForEncodings = 0;
278 | knownRegions = (
279 | en,
280 | Base,
281 | );
282 | mainGroup = 83CBB9F61A601CBA00E9B192;
283 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
284 | projectDirPath = "";
285 | projectRoot = "";
286 | targets = (
287 | 13B07F861A680F5B00A75B9A /* Stonks */,
288 | 00E356ED1AD99517003FC87E /* StonksTests */,
289 | );
290 | };
291 | /* End PBXProject section */
292 |
293 | /* Begin PBXResourcesBuildPhase section */
294 | 00E356EC1AD99517003FC87E /* Resources */ = {
295 | isa = PBXResourcesBuildPhase;
296 | buildActionMask = 2147483647;
297 | files = (
298 | );
299 | runOnlyForDeploymentPostprocessing = 0;
300 | };
301 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
302 | isa = PBXResourcesBuildPhase;
303 | buildActionMask = 2147483647;
304 | files = (
305 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
306 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
307 | 2C9123882606F7F400CD6F72 /* GoogleService-Info.plist in Resources */,
308 | 63AE85BD36854E30A934489A /* AntDesign.ttf in Resources */,
309 | 9308A92CE3044922A3C3B89E /* Entypo.ttf in Resources */,
310 | 20BE60DAABC34EB49B1BFB7F /* EvilIcons.ttf in Resources */,
311 | 40ED623E95894B6B9495D341 /* Feather.ttf in Resources */,
312 | 2A4CDA7506784DD08DEDF4DE /* FontAwesome.ttf in Resources */,
313 | 528432E9165945BD89A77FD2 /* FontAwesome5_Brands.ttf in Resources */,
314 | D69D823F14F143A8BEC3AC0F /* FontAwesome5_Regular.ttf in Resources */,
315 | 3EFE5BCC0DFD41DF85DDEDFB /* FontAwesome5_Solid.ttf in Resources */,
316 | 540008F2E57B42AFA4B617FC /* Fontisto.ttf in Resources */,
317 | ACA5547B3D0049F6ACE55A39 /* Foundation.ttf in Resources */,
318 | 73EBE5B78AA44DEAA5FA4D2F /* Ionicons.ttf in Resources */,
319 | 55D692E7B8AB4BA49EE6D309 /* MaterialCommunityIcons.ttf in Resources */,
320 | F62BF98EDC6B4C80846D20FB /* MaterialIcons.ttf in Resources */,
321 | DC71731E1CBA4C5BA1470A2C /* Octicons.ttf in Resources */,
322 | 99C812F2CB3E471FB8B3CF02 /* SimpleLineIcons.ttf in Resources */,
323 | E71F9FF8094543A19A9894F8 /* Zocial.ttf in Resources */,
324 | );
325 | runOnlyForDeploymentPostprocessing = 0;
326 | };
327 | /* End PBXResourcesBuildPhase section */
328 |
329 | /* Begin PBXShellScriptBuildPhase section */
330 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
331 | isa = PBXShellScriptBuildPhase;
332 | buildActionMask = 2147483647;
333 | files = (
334 | );
335 | inputPaths = (
336 | );
337 | name = "Bundle React Native code and images";
338 | outputPaths = (
339 | );
340 | runOnlyForDeploymentPostprocessing = 0;
341 | shellPath = /bin/sh;
342 | shellScript = "set -e\n\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh\n";
343 | };
344 | 25FDC96962D4CA2D530D0FFB /* [CP] Check Pods Manifest.lock */ = {
345 | isa = PBXShellScriptBuildPhase;
346 | buildActionMask = 2147483647;
347 | files = (
348 | );
349 | inputFileListPaths = (
350 | );
351 | inputPaths = (
352 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
353 | "${PODS_ROOT}/Manifest.lock",
354 | );
355 | name = "[CP] Check Pods Manifest.lock";
356 | outputFileListPaths = (
357 | );
358 | outputPaths = (
359 | "$(DERIVED_FILE_DIR)/Pods-Stonks-StonksTests-checkManifestLockResult.txt",
360 | );
361 | runOnlyForDeploymentPostprocessing = 0;
362 | shellPath = /bin/sh;
363 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
364 | showEnvVarsInLog = 0;
365 | };
366 | 79837D2B1754EA50A190F9DC /* [CP] Check Pods Manifest.lock */ = {
367 | isa = PBXShellScriptBuildPhase;
368 | buildActionMask = 2147483647;
369 | files = (
370 | );
371 | inputFileListPaths = (
372 | );
373 | inputPaths = (
374 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
375 | "${PODS_ROOT}/Manifest.lock",
376 | );
377 | name = "[CP] Check Pods Manifest.lock";
378 | outputFileListPaths = (
379 | );
380 | outputPaths = (
381 | "$(DERIVED_FILE_DIR)/Pods-Stonks-checkManifestLockResult.txt",
382 | );
383 | runOnlyForDeploymentPostprocessing = 0;
384 | shellPath = /bin/sh;
385 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
386 | showEnvVarsInLog = 0;
387 | };
388 | B261A67F8F47A5EE1986DD78 /* [CP] Embed Pods Frameworks */ = {
389 | isa = PBXShellScriptBuildPhase;
390 | buildActionMask = 2147483647;
391 | files = (
392 | );
393 | inputFileListPaths = (
394 | "${PODS_ROOT}/Target Support Files/Pods-Stonks/Pods-Stonks-frameworks-${CONFIGURATION}-input-files.xcfilelist",
395 | );
396 | name = "[CP] Embed Pods Frameworks";
397 | outputFileListPaths = (
398 | "${PODS_ROOT}/Target Support Files/Pods-Stonks/Pods-Stonks-frameworks-${CONFIGURATION}-output-files.xcfilelist",
399 | );
400 | runOnlyForDeploymentPostprocessing = 0;
401 | shellPath = /bin/sh;
402 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Stonks/Pods-Stonks-frameworks.sh\"\n";
403 | showEnvVarsInLog = 0;
404 | };
405 | D1C7CBEEE98663CF8C451026 /* [CP-User] [RNFB] Core Configuration */ = {
406 | isa = PBXShellScriptBuildPhase;
407 | buildActionMask = 2147483647;
408 | files = (
409 | );
410 | name = "[CP-User] [RNFB] Core Configuration";
411 | runOnlyForDeploymentPostprocessing = 0;
412 | shellPath = /bin/sh;
413 | shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n _JSON_OUTPUT_BASE64=$(python -c 'import json,sys,base64;print(base64.b64encode(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"').read())['${_JSON_ROOT}'])))' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\n\n # config.admob_delay_app_measurement_init\n _ADMOB_DELAY_APP_MEASUREMENT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_delay_app_measurement_init\")\n if [[ $_ADMOB_DELAY_APP_MEASUREMENT == \"true\" ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADDelayAppMeasurementInit\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"YES\")\n fi\n\n # config.admob_ios_app_id\n _ADMOB_IOS_APP_ID=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"admob_ios_app_id\")\n if [[ $_ADMOB_IOS_APP_ID ]]; then\n _PLIST_ENTRY_KEYS+=(\"GADApplicationIdentifier\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_ADMOB_IOS_APP_ID\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n";
414 | };
415 | D476E382FB2F749E4CF3B2F3 /* [CP] Copy Pods Resources */ = {
416 | isa = PBXShellScriptBuildPhase;
417 | buildActionMask = 8;
418 | files = (
419 | );
420 | inputFileListPaths = (
421 | "${PODS_ROOT}/Target Support Files/Pods-Stonks/Pods-Stonks-resources-${CONFIGURATION}-input-files.xcfilelist",
422 | );
423 | name = "[CP] Copy Pods Resources";
424 | outputFileListPaths = (
425 | "${PODS_ROOT}/Target Support Files/Pods-Stonks/Pods-Stonks-resources-${CONFIGURATION}-output-files.xcfilelist",
426 | );
427 | runOnlyForDeploymentPostprocessing = 1;
428 | shellPath = /bin/sh;
429 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Stonks/Pods-Stonks-resources.sh\"\n";
430 | showEnvVarsInLog = 0;
431 | };
432 | EA6313F655A0F505047847BE /* [CP] Copy Pods Resources */ = {
433 | isa = PBXShellScriptBuildPhase;
434 | buildActionMask = 2147483647;
435 | files = (
436 | );
437 | inputFileListPaths = (
438 | "${PODS_ROOT}/Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests-resources-${CONFIGURATION}-input-files.xcfilelist",
439 | );
440 | name = "[CP] Copy Pods Resources";
441 | outputFileListPaths = (
442 | "${PODS_ROOT}/Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests-resources-${CONFIGURATION}-output-files.xcfilelist",
443 | );
444 | runOnlyForDeploymentPostprocessing = 0;
445 | shellPath = /bin/sh;
446 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests-resources.sh\"\n";
447 | showEnvVarsInLog = 0;
448 | };
449 | EF02194D5E856789190E7378 /* [CP] Embed Pods Frameworks */ = {
450 | isa = PBXShellScriptBuildPhase;
451 | buildActionMask = 2147483647;
452 | files = (
453 | );
454 | inputFileListPaths = (
455 | "${PODS_ROOT}/Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
456 | );
457 | name = "[CP] Embed Pods Frameworks";
458 | outputFileListPaths = (
459 | "${PODS_ROOT}/Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
460 | );
461 | runOnlyForDeploymentPostprocessing = 0;
462 | shellPath = /bin/sh;
463 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Stonks-StonksTests/Pods-Stonks-StonksTests-frameworks.sh\"\n";
464 | showEnvVarsInLog = 0;
465 | };
466 | FD10A7F022414F080027D42C /* Start Packager */ = {
467 | isa = PBXShellScriptBuildPhase;
468 | buildActionMask = 2147483647;
469 | files = (
470 | );
471 | inputFileListPaths = (
472 | );
473 | inputPaths = (
474 | );
475 | name = "Start Packager";
476 | outputFileListPaths = (
477 | );
478 | outputPaths = (
479 | );
480 | runOnlyForDeploymentPostprocessing = 0;
481 | shellPath = /bin/sh;
482 | 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";
483 | showEnvVarsInLog = 0;
484 | };
485 | /* End PBXShellScriptBuildPhase section */
486 |
487 | /* Begin PBXSourcesBuildPhase section */
488 | 00E356EA1AD99517003FC87E /* Sources */ = {
489 | isa = PBXSourcesBuildPhase;
490 | buildActionMask = 2147483647;
491 | files = (
492 | 00E356F31AD99517003FC87E /* StonksTests.m in Sources */,
493 | );
494 | runOnlyForDeploymentPostprocessing = 0;
495 | };
496 | 13B07F871A680F5B00A75B9A /* Sources */ = {
497 | isa = PBXSourcesBuildPhase;
498 | buildActionMask = 2147483647;
499 | files = (
500 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
501 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
502 | );
503 | runOnlyForDeploymentPostprocessing = 0;
504 | };
505 | /* End PBXSourcesBuildPhase section */
506 |
507 | /* Begin PBXTargetDependency section */
508 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
509 | isa = PBXTargetDependency;
510 | target = 13B07F861A680F5B00A75B9A /* Stonks */;
511 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
512 | };
513 | /* End PBXTargetDependency section */
514 |
515 | /* Begin XCBuildConfiguration section */
516 | 00E356F61AD99517003FC87E /* Debug */ = {
517 | isa = XCBuildConfiguration;
518 | baseConfigurationReference = 7434A833441AA4E02F6C2E61 /* Pods-Stonks-StonksTests.debug.xcconfig */;
519 | buildSettings = {
520 | BUNDLE_LOADER = "$(TEST_HOST)";
521 | GCC_PREPROCESSOR_DEFINITIONS = (
522 | "DEBUG=1",
523 | "$(inherited)",
524 | );
525 | INFOPLIST_FILE = StonksTests/Info.plist;
526 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
527 | LD_RUNPATH_SEARCH_PATHS = (
528 | "$(inherited)",
529 | "@executable_path/Frameworks",
530 | "@loader_path/Frameworks",
531 | );
532 | OTHER_LDFLAGS = (
533 | "-ObjC",
534 | "-lc++",
535 | "$(inherited)",
536 | );
537 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
538 | PRODUCT_NAME = "$(TARGET_NAME)";
539 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Stonks.app/Stonks";
540 | };
541 | name = Debug;
542 | };
543 | 00E356F71AD99517003FC87E /* Release */ = {
544 | isa = XCBuildConfiguration;
545 | baseConfigurationReference = 7A810958503B11731DC49E2A /* Pods-Stonks-StonksTests.release.xcconfig */;
546 | buildSettings = {
547 | BUNDLE_LOADER = "$(TEST_HOST)";
548 | COPY_PHASE_STRIP = NO;
549 | INFOPLIST_FILE = StonksTests/Info.plist;
550 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
551 | LD_RUNPATH_SEARCH_PATHS = (
552 | "$(inherited)",
553 | "@executable_path/Frameworks",
554 | "@loader_path/Frameworks",
555 | );
556 | OTHER_LDFLAGS = (
557 | "-ObjC",
558 | "-lc++",
559 | "$(inherited)",
560 | );
561 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
562 | PRODUCT_NAME = "$(TARGET_NAME)";
563 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Stonks.app/Stonks";
564 | };
565 | name = Release;
566 | };
567 | 13B07F941A680F5B00A75B9A /* Debug */ = {
568 | isa = XCBuildConfiguration;
569 | baseConfigurationReference = B7EE22998FB2954C00F47109 /* Pods-Stonks.debug.xcconfig */;
570 | buildSettings = {
571 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
572 | CLANG_ENABLE_MODULES = YES;
573 | CURRENT_PROJECT_VERSION = 1;
574 | ENABLE_BITCODE = NO;
575 | INFOPLIST_FILE = Stonks/Info.plist;
576 | LD_RUNPATH_SEARCH_PATHS = (
577 | "$(inherited)",
578 | "@executable_path/Frameworks",
579 | );
580 | OTHER_LDFLAGS = (
581 | "$(inherited)",
582 | "-ObjC",
583 | "-lc++",
584 | );
585 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
586 | PRODUCT_NAME = Stonks;
587 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
588 | SWIFT_VERSION = 5.0;
589 | VERSIONING_SYSTEM = "apple-generic";
590 | };
591 | name = Debug;
592 | };
593 | 13B07F951A680F5B00A75B9A /* Release */ = {
594 | isa = XCBuildConfiguration;
595 | baseConfigurationReference = 6157E2D43133F15312C53429 /* Pods-Stonks.release.xcconfig */;
596 | buildSettings = {
597 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
598 | CLANG_ENABLE_MODULES = YES;
599 | CURRENT_PROJECT_VERSION = 1;
600 | INFOPLIST_FILE = Stonks/Info.plist;
601 | LD_RUNPATH_SEARCH_PATHS = (
602 | "$(inherited)",
603 | "@executable_path/Frameworks",
604 | );
605 | OTHER_LDFLAGS = (
606 | "$(inherited)",
607 | "-ObjC",
608 | "-lc++",
609 | );
610 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
611 | PRODUCT_NAME = Stonks;
612 | SWIFT_VERSION = 5.0;
613 | VERSIONING_SYSTEM = "apple-generic";
614 | };
615 | name = Release;
616 | };
617 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
618 | isa = XCBuildConfiguration;
619 | buildSettings = {
620 | ALWAYS_SEARCH_USER_PATHS = NO;
621 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
622 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
623 | CLANG_CXX_LIBRARY = "libc++";
624 | CLANG_ENABLE_MODULES = YES;
625 | CLANG_ENABLE_OBJC_ARC = YES;
626 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
627 | CLANG_WARN_BOOL_CONVERSION = YES;
628 | CLANG_WARN_COMMA = YES;
629 | CLANG_WARN_CONSTANT_CONVERSION = YES;
630 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
631 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
632 | CLANG_WARN_EMPTY_BODY = YES;
633 | CLANG_WARN_ENUM_CONVERSION = YES;
634 | CLANG_WARN_INFINITE_RECURSION = YES;
635 | CLANG_WARN_INT_CONVERSION = YES;
636 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
637 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
638 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
639 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
640 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
641 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
642 | CLANG_WARN_STRICT_PROTOTYPES = YES;
643 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
644 | CLANG_WARN_UNREACHABLE_CODE = YES;
645 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
646 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
647 | COPY_PHASE_STRIP = NO;
648 | ENABLE_STRICT_OBJC_MSGSEND = YES;
649 | ENABLE_TESTABILITY = YES;
650 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
651 | GCC_C_LANGUAGE_STANDARD = gnu99;
652 | GCC_DYNAMIC_NO_PIC = NO;
653 | GCC_NO_COMMON_BLOCKS = YES;
654 | GCC_OPTIMIZATION_LEVEL = 0;
655 | GCC_PREPROCESSOR_DEFINITIONS = (
656 | "DEBUG=1",
657 | "$(inherited)",
658 | );
659 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
660 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
661 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
662 | GCC_WARN_UNDECLARED_SELECTOR = YES;
663 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
664 | GCC_WARN_UNUSED_FUNCTION = YES;
665 | GCC_WARN_UNUSED_VARIABLE = YES;
666 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
667 | LD_RUNPATH_SEARCH_PATHS = (
668 | /usr/lib/swift,
669 | "$(inherited)",
670 | );
671 | LIBRARY_SEARCH_PATHS = (
672 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
673 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
674 | "\"$(inherited)\"",
675 | );
676 | MTL_ENABLE_DEBUG_INFO = YES;
677 | ONLY_ACTIVE_ARCH = YES;
678 | SDKROOT = iphoneos;
679 | };
680 | name = Debug;
681 | };
682 | 83CBBA211A601CBA00E9B192 /* Release */ = {
683 | isa = XCBuildConfiguration;
684 | buildSettings = {
685 | ALWAYS_SEARCH_USER_PATHS = NO;
686 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
687 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
688 | CLANG_CXX_LIBRARY = "libc++";
689 | CLANG_ENABLE_MODULES = YES;
690 | CLANG_ENABLE_OBJC_ARC = YES;
691 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
692 | CLANG_WARN_BOOL_CONVERSION = YES;
693 | CLANG_WARN_COMMA = YES;
694 | CLANG_WARN_CONSTANT_CONVERSION = YES;
695 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
696 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
697 | CLANG_WARN_EMPTY_BODY = YES;
698 | CLANG_WARN_ENUM_CONVERSION = YES;
699 | CLANG_WARN_INFINITE_RECURSION = YES;
700 | CLANG_WARN_INT_CONVERSION = YES;
701 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
702 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
703 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
704 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
705 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
706 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
707 | CLANG_WARN_STRICT_PROTOTYPES = YES;
708 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
709 | CLANG_WARN_UNREACHABLE_CODE = YES;
710 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
711 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
712 | COPY_PHASE_STRIP = YES;
713 | ENABLE_NS_ASSERTIONS = NO;
714 | ENABLE_STRICT_OBJC_MSGSEND = YES;
715 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "arm64 ";
716 | GCC_C_LANGUAGE_STANDARD = gnu99;
717 | GCC_NO_COMMON_BLOCKS = YES;
718 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
719 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
720 | GCC_WARN_UNDECLARED_SELECTOR = YES;
721 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
722 | GCC_WARN_UNUSED_FUNCTION = YES;
723 | GCC_WARN_UNUSED_VARIABLE = YES;
724 | IPHONEOS_DEPLOYMENT_TARGET = 10.0;
725 | LD_RUNPATH_SEARCH_PATHS = (
726 | /usr/lib/swift,
727 | "$(inherited)",
728 | );
729 | LIBRARY_SEARCH_PATHS = (
730 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
731 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
732 | "\"$(inherited)\"",
733 | );
734 | MTL_ENABLE_DEBUG_INFO = NO;
735 | SDKROOT = iphoneos;
736 | VALIDATE_PRODUCT = YES;
737 | };
738 | name = Release;
739 | };
740 | /* End XCBuildConfiguration section */
741 |
742 | /* Begin XCConfigurationList section */
743 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "StonksTests" */ = {
744 | isa = XCConfigurationList;
745 | buildConfigurations = (
746 | 00E356F61AD99517003FC87E /* Debug */,
747 | 00E356F71AD99517003FC87E /* Release */,
748 | );
749 | defaultConfigurationIsVisible = 0;
750 | defaultConfigurationName = Release;
751 | };
752 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Stonks" */ = {
753 | isa = XCConfigurationList;
754 | buildConfigurations = (
755 | 13B07F941A680F5B00A75B9A /* Debug */,
756 | 13B07F951A680F5B00A75B9A /* Release */,
757 | );
758 | defaultConfigurationIsVisible = 0;
759 | defaultConfigurationName = Release;
760 | };
761 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Stonks" */ = {
762 | isa = XCConfigurationList;
763 | buildConfigurations = (
764 | 83CBBA201A601CBA00E9B192 /* Debug */,
765 | 83CBBA211A601CBA00E9B192 /* Release */,
766 | );
767 | defaultConfigurationIsVisible = 0;
768 | defaultConfigurationName = Release;
769 | };
770 | /* End XCConfigurationList section */
771 | };
772 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
773 | }
774 |
--------------------------------------------------------------------------------