;
9 | }
10 |
11 | const CardComponent = (props: Props) => {
12 | const {children, bgColor, styles} = props;
13 |
14 | return (
15 |
16 | {children}
17 |
18 | );
19 | };
20 |
21 | export default CardComponent;
22 |
--------------------------------------------------------------------------------
/App.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {SafeAreaView, StatusBar} from 'react-native';
3 | import {colors} from './src/constants/colors';
4 | import HomeScreen from './src/screens/homes/HomeScreen';
5 | import {NavigationContainer} from '@react-navigation/native';
6 | import Router from './src/routers/Router';
7 |
8 | const App = () => {
9 | return (
10 | <>
11 |
12 |
13 |
14 |
15 |
16 |
17 | >
18 | );
19 | };
20 |
21 | export default App;
22 |
--------------------------------------------------------------------------------
/src/components/TitleComponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text} from 'react-native';
2 | import React from 'react';
3 | import TextComponent from './TextComponent';
4 | import {fontFamilies} from '../constants/fontFamilies';
5 |
6 | interface Props {
7 | text: string;
8 | font?: string;
9 | size?: number;
10 | color?: string;
11 | flex?: number;
12 | }
13 |
14 | const TitleComponent = (props: Props) => {
15 | const {text, font, size, color, flex} = props;
16 |
17 | return (
18 |
25 | );
26 | };
27 |
28 | export default TitleComponent;
29 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | ext {
5 | buildToolsVersion = "33.0.0"
6 | minSdkVersion = 21
7 | compileSdkVersion = 33
8 | targetSdkVersion = 33
9 |
10 | // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
11 | ndkVersion = "23.1.7779620"
12 | }
13 | repositories {
14 | google()
15 | mavenCentral()
16 | }
17 | dependencies {
18 | classpath("com.android.tools.build:gradle")
19 | classpath("com.facebook.react:react-native-gradle-plugin")
20 | classpath 'com.google.gms:google-services:4.4.0'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/android/app/google-services.json:
--------------------------------------------------------------------------------
1 | {
2 | "project_info": {
3 | "project_number": "729975885940",
4 | "project_id": "todolistapp-6e5c6",
5 | "storage_bucket": "todolistapp-6e5c6.appspot.com"
6 | },
7 | "client": [
8 | {
9 | "client_info": {
10 | "mobilesdk_app_id": "1:729975885940:android:fdecb099e835d84e4cc121",
11 | "android_client_info": {
12 | "package_name": "com.todolist"
13 | }
14 | },
15 | "oauth_client": [],
16 | "api_key": [
17 | {
18 | "current_key": "AIzaSyDvnaNW3bfT4sztieh2vittZQsHk1kQJoA"
19 | }
20 | ],
21 | "services": {
22 | "appinvite_service": {
23 | "other_platform_oauth_client": []
24 | }
25 | }
26 | }
27 | ],
28 | "configuration_version": "1"
29 | }
--------------------------------------------------------------------------------
/android/app/src/release/java/com/todolist/ReactNativeFlipper.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Meta Platforms, Inc. and 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.todolist;
8 |
9 | import android.content.Context;
10 | import com.facebook.react.ReactInstanceManager;
11 |
12 | /**
13 | * Class responsible of loading Flipper inside your React Native application. This is the release
14 | * flavor of it so it's empty as we don't want to load Flipper.
15 | */
16 | public class ReactNativeFlipper {
17 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
18 | // Do nothing as we don't want to initialize Flipper on Release.
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/ios/todolistTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/components/CardImageConponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text, ImageBackground} from 'react-native';
2 | import React, {ReactNode} from 'react';
3 | import {globalStyles} from '../styles/globalStyles';
4 | interface Props {
5 | children: ReactNode;
6 | color?: string;
7 | }
8 |
9 | const CardImageConponent = (props: Props) => {
10 | const {children, color} = props;
11 |
12 | return (
13 |
17 |
26 | {children}
27 |
28 |
29 | );
30 | };
31 |
32 | export default CardImageConponent;
33 |
--------------------------------------------------------------------------------
/ios/todolist/AppDelegate.mm:
--------------------------------------------------------------------------------
1 | #import "AppDelegate.h"
2 | #import
3 | #import
4 |
5 | @implementation AppDelegate
6 |
7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
8 | {
9 |
10 | [FIRApp configure];
11 |
12 | self.moduleName = @"todolist";
13 | // You can add your custom initial props in the dictionary below.
14 | // They will be passed down to the ViewController used by React Native.
15 | self.initialProps = @{};
16 |
17 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
18 | }
19 |
20 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
21 | {
22 | #if DEBUG
23 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
24 | #else
25 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
26 | #endif
27 | }
28 |
29 | @end
30 |
--------------------------------------------------------------------------------
/src/components/TagComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {StyleProp, TextStyle, TouchableOpacity, ViewStyle} from 'react-native';
3 | import {globalStyles} from '../styles/globalStyles';
4 | import TextComponent from './TextComponent';
5 | import {colors} from '../constants/colors';
6 |
7 | interface Props {
8 | text: string;
9 | color?: string;
10 | tagStyles?: StyleProp;
11 | textStyles?: StyleProp;
12 | onPress?: () => void;
13 | }
14 |
15 | const TagComponent = (props: Props) => {
16 | const {text, textStyles, color, tagStyles, onPress} = props;
17 |
18 | return (
19 |
27 |
28 |
29 | );
30 | };
31 |
32 | export default TagComponent;
33 |
--------------------------------------------------------------------------------
/src/components/TextComponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text, StyleProp, TextStyle} from 'react-native';
2 | import React from 'react';
3 | import {globalStyles} from '../styles/globalStyles';
4 | import {fontFamilies} from '../constants/fontFamilies';
5 | import {colors} from '../constants/colors';
6 |
7 | interface Props {
8 | text: string;
9 | size?: number;
10 | font?: string;
11 | color?: string;
12 | flex?: number;
13 | styles?: StyleProp;
14 | }
15 |
16 | const TextComponent = (props: Props) => {
17 | const {text, font, size, color, flex, styles} = props;
18 |
19 | return (
20 |
31 | {text}
32 |
33 | );
34 | };
35 |
36 | export default TextComponent;
37 |
--------------------------------------------------------------------------------
/src/components/CicularComponent.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import CircularProgress from 'react-native-circular-progress-indicator';
3 | import {colors} from '../constants/colors';
4 | import {fontFamilies} from '../constants/fontFamilies';
5 |
6 | interface Props {
7 | color?: string;
8 | value: number;
9 | maxValue?: number;
10 | radius?: number;
11 | }
12 |
13 | const CicularComponent = (props: Props) => {
14 | const {color, value, maxValue, radius} = props;
15 | return (
16 |
31 | );
32 | };
33 |
34 | export default CicularComponent;
35 |
--------------------------------------------------------------------------------
/ios/todolist/GoogleService-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | API_KEY
6 | AIzaSyC2UlX6pQqDi_ojuAjMrAPN6kiGjCflE5A
7 | GCM_SENDER_ID
8 | 729975885940
9 | PLIST_VERSION
10 | 1
11 | BUNDLE_ID
12 | org.reactjs.native.example.todolist
13 | PROJECT_ID
14 | todolistapp-6e5c6
15 | STORAGE_BUCKET
16 | todolistapp-6e5c6.appspot.com
17 | IS_ADS_ENABLED
18 |
19 | IS_ANALYTICS_ENABLED
20 |
21 | IS_APPINVITE_ENABLED
22 |
23 | IS_GCM_ENABLED
24 |
25 | IS_SIGNIN_ENABLED
26 |
27 | GOOGLE_APP_ID
28 | 1:729975885940:ios:82db0dc67e8ec8214cc121
29 |
30 |
--------------------------------------------------------------------------------
/src/components/RowComponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text, TouchableOpacity, StyleProp, ViewStyle} from 'react-native';
2 | import React, {ReactNode} from 'react';
3 | import {globalStyles} from '../styles/globalStyles';
4 |
5 | interface Props {
6 | children: ReactNode;
7 | justify?:
8 | | 'center'
9 | | 'flex-start'
10 | | 'flex-end'
11 | | 'space-between'
12 | | 'space-around'
13 | | 'space-evenly'
14 | | undefined;
15 | onPress?: () => void;
16 | styles?: StyleProp;
17 | }
18 |
19 | const RowComponent = (props: Props) => {
20 | const {children, justify, onPress, styles} = props;
21 |
22 | const localStyle = [
23 | globalStyles.row,
24 | {
25 | justifyContent: justify ?? 'center',
26 | },
27 | styles,
28 | ];
29 |
30 | return onPress ? (
31 | onPress() : undefined}>
34 | {children}
35 |
36 | ) : (
37 | {children}
38 | );
39 | };
40 |
41 | export default RowComponent;
42 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/ios/todolist/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ios-marketing",
45 | "scale" : "1x",
46 | "size" : "1024x1024"
47 | }
48 | ],
49 | "info" : {
50 | "author" : "xcode",
51 | "version" : 1
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/components/ButtonComponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text, TouchableOpacity, ActivityIndicator} from 'react-native';
2 | import React, {ReactNode} from 'react';
3 | import TextComponent from './TextComponent';
4 | import {colors} from '../constants/colors';
5 |
6 | interface Props {
7 | text: string;
8 | icon?: ReactNode;
9 | onPress: () => void;
10 | color?: string;
11 | isLoading?: boolean;
12 | }
13 |
14 | const ButtonComponent = (props: Props) => {
15 | const {text, icon, onPress, color, isLoading} = props;
16 |
17 | return (
18 |
29 | {isLoading ? (
30 |
31 | ) : (
32 |
38 | )}
39 |
40 | );
41 | };
42 |
43 | export default ButtonComponent;
44 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/todolist/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.todolist;
2 |
3 | import com.facebook.react.ReactActivity;
4 | import com.facebook.react.ReactActivityDelegate;
5 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
6 | import com.facebook.react.defaults.DefaultReactActivityDelegate;
7 |
8 | public class MainActivity extends ReactActivity {
9 |
10 | /**
11 | * Returns the name of the main component registered from JavaScript. This is used to schedule
12 | * rendering of the component.
13 | */
14 | @Override
15 | protected String getMainComponentName() {
16 | return "todolist";
17 | }
18 |
19 | /**
20 | * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
21 | * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
22 | * (aka React 18) with two boolean flags.
23 | */
24 | @Override
25 | protected ReactActivityDelegate createReactActivityDelegate() {
26 | return new DefaultReactActivityDelegate(
27 | this,
28 | getMainComponentName(),
29 | // If you opted-in for the New Architecture, we enable the Fabric Renderer.
30 | DefaultNewArchitectureEntryPoint.getFabricEnabled());
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Xcode
6 | #
7 | build/
8 | *.pbxuser
9 | !default.pbxuser
10 | *.mode1v3
11 | !default.mode1v3
12 | *.mode2v3
13 | !default.mode2v3
14 | *.perspectivev3
15 | !default.perspectivev3
16 | xcuserdata
17 | *.xccheckout
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 | *.xcuserstate
23 | ios/.xcode.env.local
24 |
25 | # Android/IntelliJ
26 | #
27 | build/
28 | .idea
29 | .gradle
30 | local.properties
31 | *.iml
32 | *.hprof
33 | .cxx/
34 | *.keystore
35 | !debug.keystore
36 |
37 | # node.js
38 | #
39 | node_modules/
40 | npm-debug.log
41 | yarn-error.log
42 |
43 | # fastlane
44 | #
45 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
46 | # screenshots whenever they are needed.
47 | # For more information about the recommended setup visit:
48 | # https://docs.fastlane.tools/best-practices/source-control/
49 |
50 | **/fastlane/report.xml
51 | **/fastlane/Preview.html
52 | **/fastlane/screenshots
53 | **/fastlane/test_output
54 |
55 | # Bundle artifact
56 | *.jsbundle
57 |
58 | # Ruby / CocoaPods
59 | /ios/Pods/
60 | /vendor/bundle/
61 |
62 | # Temporary files created by Metro to check the health of the file watcher
63 | .metro-health-check*
64 |
65 | # testing
66 | /coverage
67 |
--------------------------------------------------------------------------------
/src/styles/globalStyles.ts:
--------------------------------------------------------------------------------
1 | import {Platform, StyleSheet} from 'react-native';
2 | import {colors} from '../constants/colors';
3 | import {fontFamilies} from '../constants/fontFamilies';
4 |
5 | export const globalStyles = StyleSheet.create({
6 | container: {
7 | flex: 1,
8 | backgroundColor: colors.bgColor,
9 | paddingTop: 20,
10 | },
11 |
12 | row: {
13 | flexDirection: 'row',
14 | justifyContent: 'center',
15 | alignItems: 'center',
16 | },
17 |
18 | text: {
19 | fontSize: 14,
20 | fontFamily: fontFamilies.regular,
21 | color: colors.text,
22 | },
23 |
24 | inputContainer: {
25 | backgroundColor: colors.gray,
26 | borderRadius: 12,
27 | paddingHorizontal: Platform.OS === 'ios' ? 12 : 10,
28 | paddingVertical: 12,
29 | },
30 |
31 | section: {
32 | marginBottom: 16,
33 | paddingHorizontal: 20,
34 | },
35 |
36 | tag: {
37 | paddingHorizontal: 20,
38 | paddingVertical: Platform.OS === 'ios' ? 6 : 4,
39 | borderRadius: 100,
40 | backgroundColor: colors.blue,
41 | },
42 |
43 | card: {
44 | borderRadius: 12,
45 | },
46 |
47 | iconContainer: {
48 | width: 40,
49 | height: 40,
50 | borderRadius: 100,
51 | backgroundColor: 'rgba(0,0,0,0.2)',
52 | justifyContent: 'center',
53 | alignItems: 'center',
54 | marginBottom: 16,
55 | },
56 | });
57 |
--------------------------------------------------------------------------------
/src/components/ProgressBarComponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text, DimensionValue} from 'react-native';
2 | import React from 'react';
3 | import {colors} from '../constants/colors';
4 | import RowComponent from './RowComponent';
5 | import TextComponent from './TextComponent';
6 | import {fontFamilies} from '../constants/fontFamilies';
7 |
8 | interface Props {
9 | size?: 'small' | 'default' | 'large';
10 | color?: string;
11 | percent: DimensionValue;
12 | }
13 |
14 | const ProgressBarComponent = (props: Props) => {
15 | const {size, color, percent} = props;
16 |
17 | const heightContent = size === 'small' ? 6 : size === 'large' ? 10 : 8;
18 |
19 | return (
20 |
21 |
28 |
36 |
37 |
38 |
39 |
45 |
46 |
47 | );
48 | };
49 |
50 | export default ProgressBarComponent;
51 |
--------------------------------------------------------------------------------
/src/routers/Router.tsx:
--------------------------------------------------------------------------------
1 | import {createNativeStackNavigator} from '@react-navigation/native-stack';
2 | import React, {useEffect, useState} from 'react';
3 | import HomeScreen from '../screens/homes/HomeScreen';
4 | import AddNewTask from '../screens/tasks/AddNewTask';
5 | import SearchScreen from '../screens/SearchScreen';
6 | import LoginScreen from '../auth/LoginScreen';
7 | import auth from '@react-native-firebase/auth';
8 | import RegisterScreen from '../auth/RegisterScreen';
9 |
10 | const Router = () => {
11 | const [isLogin, setIsLogin] = useState(false);
12 |
13 | const Stack = createNativeStackNavigator();
14 | const MainNavigator = (
15 |
19 |
20 |
21 |
22 |
23 | );
24 | const AuthNavigator = (
25 |
29 |
30 |
31 |
32 | );
33 |
34 | useEffect(() => {
35 | auth().onAuthStateChanged(user => {
36 | if (user) {
37 | setIsLogin(true);
38 | } else {
39 | setIsLogin(false);
40 | }
41 | });
42 | }, []);
43 |
44 | return isLogin ? MainNavigator : AuthNavigator;
45 | };
46 |
47 | export default Router;
48 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "todolist",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "android": "react-native run-android",
7 | "ios": "react-native run-ios",
8 | "lint": "eslint .",
9 | "start": "react-native start",
10 | "test": "jest"
11 | },
12 | "dependencies": {
13 | "@react-native-firebase/app": "^18.7.3",
14 | "@react-native-firebase/auth": "^18.7.3",
15 | "@react-native-firebase/firestore": "^18.7.3",
16 | "@react-native-firebase/storage": "^18.7.3",
17 | "@react-navigation/native": "^6.1.9",
18 | "@react-navigation/native-stack": "^6.9.17",
19 | "iconsax-react-native": "^0.0.8",
20 | "react": "18.2.0",
21 | "react-native": "0.72.7",
22 | "react-native-circular-progress-indicator": "^4.4.2",
23 | "react-native-date-picker": "^4.3.4",
24 | "react-native-reanimated": "^3.6.1",
25 | "react-native-redash": "^18.1.1",
26 | "react-native-safe-area-context": "^4.8.1",
27 | "react-native-screens": "^3.29.0",
28 | "react-native-svg": "^14.1.0",
29 | "react-native-vector-icons": "^10.0.2"
30 | },
31 | "devDependencies": {
32 | "@babel/core": "^7.20.0",
33 | "@babel/preset-env": "^7.20.0",
34 | "@babel/runtime": "^7.20.0",
35 | "@react-native/eslint-config": "^0.72.2",
36 | "@react-native/metro-config": "^0.72.11",
37 | "@tsconfig/react-native": "^3.0.0",
38 | "@types/react": "^18.0.24",
39 | "@types/react-native-vector-icons": "^6.4.18",
40 | "@types/react-test-renderer": "^18.0.0",
41 | "babel-jest": "^29.2.1",
42 | "eslint": "^8.19.0",
43 | "jest": "^29.2.1",
44 | "metro-react-native-babel-preset": "0.76.8",
45 | "prettier": "^2.4.1",
46 | "react-test-renderer": "18.2.0",
47 | "typescript": "4.8.4"
48 | },
49 | "engines": {
50 | "node": ">=16"
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/components/AvatarGroup.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import RowComponent from './RowComponent';
3 | import {Image, View} from 'react-native';
4 | import TextComponent from './TextComponent';
5 | import {colors} from '../constants/colors';
6 | import {globalStyles} from '../styles/globalStyles';
7 | import {fontFamilies} from '../constants/fontFamilies';
8 |
9 | const AvatarGroup = () => {
10 | const uidsLength = 10;
11 | const imageUrl = `https://gamek.mediacdn.vn/133514250583805952/2022/5/18/photo-1-16528608926331302726659.jpg`;
12 | const imageStyle = {
13 | width: 32,
14 | height: 32,
15 | borderRadius: 100,
16 | borderWidth: 2,
17 | borderColor: colors.white,
18 | };
19 | return (
20 |
21 | {Array.from({length: uidsLength}).map(
22 | (item, index) =>
23 | index < 3 && (
24 | 0 ? -10 : 0}]}
28 | />
29 | ),
30 | )}
31 |
32 | {uidsLength > 5 && (
33 |
44 | 9 ? 9 : uidsLength - 3}`}
51 | />
52 |
53 | )}
54 |
55 | );
56 | };
57 |
58 | export default AvatarGroup;
59 |
--------------------------------------------------------------------------------
/src/components/Container.tsx:
--------------------------------------------------------------------------------
1 | import {ArrowLeft2} from 'iconsax-react-native';
2 | import React, {ReactNode} from 'react';
3 | import {ScrollView, TouchableOpacity, View} from 'react-native';
4 | import {colors} from '../constants/colors';
5 | import {fontFamilies} from '../constants/fontFamilies';
6 | import {globalStyles} from '../styles/globalStyles';
7 | import RowComponent from './RowComponent';
8 | import TextComponent from './TextComponent';
9 | import {useNavigation} from '@react-navigation/native';
10 |
11 | interface Props {
12 | title?: string;
13 | back?: boolean;
14 | right?: ReactNode;
15 | children: ReactNode;
16 | isScroll?: boolean;
17 | }
18 |
19 | const Container = (props: Props) => {
20 | const {title, back, right, children, isScroll} = props;
21 |
22 | const navigation: any = useNavigation();
23 |
24 | return (
25 |
26 | {/* Header container */}
27 |
28 |
35 | {back && (
36 | navigation.goBack()}>
37 |
38 |
39 | )}
40 |
41 | {title && (
42 |
49 | )}
50 |
51 |
52 | {isScroll ? (
53 | {children}
54 | ) : (
55 | {children}
56 | )}
57 |
58 | );
59 | };
60 |
61 | export default Container;
62 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
13 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 | # AndroidX package structure to make it clearer which packages are bundled with the
21 | # Android operating system, and which are packaged with your app's APK
22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
23 | android.useAndroidX=true
24 | # Automatically convert third-party libraries to use AndroidX
25 | android.enableJetifier=true
26 |
27 | # Version of flipper SDK to use with React Native
28 | FLIPPER_VERSION=0.182.0
29 |
30 | # Use this property to specify which architecture you want to build.
31 | # You can also override it from the CLI using
32 | # ./gradlew -PreactNativeArchitectures=x86_64
33 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
34 |
35 | # Use this property to enable support to the new architecture.
36 | # This will allow you to use TurboModules and the Fabric render in
37 | # your application. You should enable this flag either if you want
38 | # to write custom TurboModules/Fabric components OR use libraries that
39 | # are providing them.
40 | newArchEnabled=false
41 |
42 | # Use this property to enable or disable the Hermes JS engine.
43 | # If set to false, you will be using JSC instead.
44 | hermesEnabled=true
45 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/rn_edit_text_material.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
21 |
22 |
23 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/todolist/MainApplication.java:
--------------------------------------------------------------------------------
1 | package com.todolist;
2 |
3 | import android.app.Application;
4 | import com.facebook.react.PackageList;
5 | import com.facebook.react.ReactApplication;
6 | import com.facebook.react.ReactNativeHost;
7 | import com.facebook.react.ReactPackage;
8 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
9 | import com.facebook.react.defaults.DefaultReactNativeHost;
10 | import com.facebook.soloader.SoLoader;
11 | import java.util.List;
12 |
13 | public class MainApplication extends Application implements ReactApplication {
14 |
15 | private final ReactNativeHost mReactNativeHost =
16 | new DefaultReactNativeHost(this) {
17 | @Override
18 | public boolean getUseDeveloperSupport() {
19 | return BuildConfig.DEBUG;
20 | }
21 |
22 | @Override
23 | protected List getPackages() {
24 | @SuppressWarnings("UnnecessaryLocalVariable")
25 | List packages = new PackageList(this).getPackages();
26 | // Packages that cannot be autolinked yet can be added manually here, for example:
27 | // packages.add(new MyReactNativePackage());
28 | return packages;
29 | }
30 |
31 | @Override
32 | protected String getJSMainModuleName() {
33 | return "index";
34 | }
35 |
36 | @Override
37 | protected boolean isNewArchEnabled() {
38 | return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
39 | }
40 |
41 | @Override
42 | protected Boolean isHermesEnabled() {
43 | return BuildConfig.IS_HERMES_ENABLED;
44 | }
45 | };
46 |
47 | @Override
48 | public ReactNativeHost getReactNativeHost() {
49 | return mReactNativeHost;
50 | }
51 |
52 | @Override
53 | public void onCreate() {
54 | super.onCreate();
55 | SoLoader.init(this, /* native exopackage */ false);
56 | if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
57 | // If you opted-in for the New Architecture, we load the native entry point for this app.
58 | DefaultNewArchitectureEntryPoint.load();
59 | }
60 | ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/ios/todolistTests/todolistTests.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | #import
5 | #import
6 |
7 | #define TIMEOUT_SECONDS 600
8 | #define TEXT_TO_LOOK_FOR @"Welcome to React"
9 |
10 | @interface todolistTests : XCTestCase
11 |
12 | @end
13 |
14 | @implementation todolistTests
15 |
16 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
17 | {
18 | if (test(view)) {
19 | return YES;
20 | }
21 | for (UIView *subview in [view subviews]) {
22 | if ([self findSubviewInView:subview matching:test]) {
23 | return YES;
24 | }
25 | }
26 | return NO;
27 | }
28 |
29 | - (void)testRendersWelcomeScreen
30 | {
31 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
32 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
33 | BOOL foundElement = NO;
34 |
35 | __block NSString *redboxError = nil;
36 | #ifdef DEBUG
37 | RCTSetLogFunction(
38 | ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
39 | if (level >= RCTLogLevelError) {
40 | redboxError = message;
41 | }
42 | });
43 | #endif
44 |
45 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
46 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
47 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
48 |
49 | foundElement = [self findSubviewInView:vc.view
50 | matching:^BOOL(UIView *view) {
51 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
52 | return YES;
53 | }
54 | return NO;
55 | }];
56 | }
57 |
58 | #ifdef DEBUG
59 | RCTSetLogFunction(RCTDefaultLogFunction);
60 | #endif
61 |
62 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
63 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
64 | }
65 |
66 | @end
67 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Resolve react_native_pods.rb with node to allow for hoisting
2 | require Pod::Executable.execute_command('node', ['-p',
3 | 'require.resolve(
4 | "react-native/scripts/react_native_pods.rb",
5 | {paths: [process.argv[1]]},
6 | )', __dir__]).strip
7 |
8 | platform :ios, min_ios_version_supported
9 | prepare_react_native_project!
10 |
11 | use_frameworks! :linkage => :static
12 | $RNFirebaseAsStaticFramework = true
13 |
14 | # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
15 | # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
16 | #
17 | # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
18 | # ```js
19 | # module.exports = {
20 | # dependencies: {
21 | # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
22 | # ```
23 | flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
24 |
25 | linkage = ENV['USE_FRAMEWORKS']
26 | if linkage != nil
27 | Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
28 | use_frameworks! :linkage => linkage.to_sym
29 | end
30 |
31 | target 'todolist' do
32 | config = use_native_modules!
33 |
34 | # Flags change depending on the env values.
35 | flags = get_default_flags()
36 |
37 | use_react_native!(
38 | :path => config[:reactNativePath],
39 | # Hermes is now enabled by default. Disable by setting this flag to false.
40 | :hermes_enabled => false,
41 | :fabric_enabled => flags[:fabric_enabled],
42 | # Enables Flipper.
43 | #
44 | # Note that if you have use_frameworks! enabled, Flipper will not work and
45 | # you should disable the next line.
46 | # :flipper_configuration => flipper_config,
47 | # An absolute path to your application root.
48 | :app_path => "#{Pod::Config.instance.installation_root}/.."
49 | )
50 |
51 | target 'todolistTests' do
52 | inherit! :complete
53 | # Pods for testing
54 | end
55 |
56 | post_install do |installer|
57 | # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
58 | react_native_post_install(
59 | installer,
60 | config[:reactNativePath],
61 | :mac_catalyst_enabled => false
62 | )
63 | __apply_Xcode_12_5_M1_post_install_workaround(installer)
64 | end
65 | end
66 |
--------------------------------------------------------------------------------
/ios/todolist/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | todolist
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(MARKETING_VERSION)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(CURRENT_PROJECT_VERSION)
25 | LSRequiresIPhoneOS
26 |
27 | NSAppTransportSecurity
28 |
29 | NSExceptionDomains
30 |
31 | localhost
32 |
33 | NSExceptionAllowsInsecureHTTPLoads
34 |
35 |
36 |
37 |
38 | NSLocationWhenInUseUsageDescription
39 |
40 | UILaunchStoryboardName
41 | LaunchScreen
42 | UIRequiredDeviceCapabilities
43 |
44 | armv7
45 |
46 | UISupportedInterfaceOrientations
47 |
48 | UIInterfaceOrientationPortrait
49 | UIInterfaceOrientationLandscapeLeft
50 | UIInterfaceOrientationLandscapeRight
51 |
52 | UIViewControllerBasedStatusBarAppearance
53 |
54 | UIAppFonts
55 |
56 | AntDesign.ttf
57 | Entypo.ttf
58 | EvilIcons.ttf
59 | Feather.ttf
60 | FontAwesome.ttf
61 | FontAwesome5_Brands.ttf
62 | FontAwesome5_Regular.ttf
63 | FontAwesome5_Solid.ttf
64 | FontAwesome6_Brands.ttf
65 | FontAwesome6_Regular.ttf
66 | FontAwesome6_Solid.ttf
67 | Fontisto.ttf
68 | Foundation.ttf
69 | Ionicons.ttf
70 | MaterialCommunityIcons.ttf
71 | MaterialIcons.ttf
72 | Octicons.ttf
73 | SimpleLineIcons.ttf
74 | Zocial.ttf
75 | NunitoSans_10pt-Bold.ttf
76 | NunitoSans_10pt-Light.ttf
77 | NunitoSans_10pt-Medium.ttf
78 | NunitoSans_10pt-Regular.ttf
79 | NunitoSans_10pt-SemiBold.ttf
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | CFPropertyList (3.0.6)
5 | rexml
6 | activesupport (7.0.8)
7 | concurrent-ruby (~> 1.0, >= 1.0.2)
8 | i18n (>= 1.6, < 2)
9 | minitest (>= 5.1)
10 | tzinfo (~> 2.0)
11 | addressable (2.8.5)
12 | public_suffix (>= 2.0.2, < 6.0)
13 | algoliasearch (1.27.5)
14 | httpclient (~> 2.8, >= 2.8.3)
15 | json (>= 1.5.1)
16 | atomos (0.1.3)
17 | claide (1.1.0)
18 | cocoapods (1.14.3)
19 | addressable (~> 2.8)
20 | claide (>= 1.0.2, < 2.0)
21 | cocoapods-core (= 1.14.3)
22 | cocoapods-deintegrate (>= 1.0.3, < 2.0)
23 | cocoapods-downloader (>= 2.1, < 3.0)
24 | cocoapods-plugins (>= 1.0.0, < 2.0)
25 | cocoapods-search (>= 1.0.0, < 2.0)
26 | cocoapods-trunk (>= 1.6.0, < 2.0)
27 | cocoapods-try (>= 1.1.0, < 2.0)
28 | colored2 (~> 3.1)
29 | escape (~> 0.0.4)
30 | fourflusher (>= 2.3.0, < 3.0)
31 | gh_inspector (~> 1.0)
32 | molinillo (~> 0.8.0)
33 | nap (~> 1.0)
34 | ruby-macho (>= 2.3.0, < 3.0)
35 | xcodeproj (>= 1.23.0, < 2.0)
36 | cocoapods-core (1.14.3)
37 | activesupport (>= 5.0, < 8)
38 | addressable (~> 2.8)
39 | algoliasearch (~> 1.0)
40 | concurrent-ruby (~> 1.1)
41 | fuzzy_match (~> 2.0.4)
42 | nap (~> 1.0)
43 | netrc (~> 0.11)
44 | public_suffix (~> 4.0)
45 | typhoeus (~> 1.0)
46 | cocoapods-deintegrate (1.0.5)
47 | cocoapods-downloader (2.1)
48 | cocoapods-plugins (1.0.0)
49 | nap
50 | cocoapods-search (1.0.1)
51 | cocoapods-trunk (1.6.0)
52 | nap (>= 0.8, < 2.0)
53 | netrc (~> 0.11)
54 | cocoapods-try (1.2.0)
55 | colored2 (3.1.2)
56 | concurrent-ruby (1.2.2)
57 | escape (0.0.4)
58 | ethon (0.16.0)
59 | ffi (>= 1.15.0)
60 | ffi (1.16.3)
61 | fourflusher (2.3.1)
62 | fuzzy_match (2.0.4)
63 | gh_inspector (1.1.3)
64 | httpclient (2.8.3)
65 | i18n (1.14.1)
66 | concurrent-ruby (~> 1.0)
67 | json (2.6.3)
68 | minitest (5.20.0)
69 | molinillo (0.8.0)
70 | nanaimo (0.3.0)
71 | nap (1.1.0)
72 | netrc (0.11.0)
73 | public_suffix (4.0.7)
74 | rexml (3.2.6)
75 | ruby-macho (2.5.1)
76 | typhoeus (1.4.1)
77 | ethon (>= 0.9.0)
78 | tzinfo (2.0.6)
79 | concurrent-ruby (~> 1.0)
80 | xcodeproj (1.23.0)
81 | CFPropertyList (>= 2.3.3, < 4.0)
82 | atomos (~> 0.1.3)
83 | claide (>= 1.0.2, < 2.0)
84 | colored2 (~> 3.1)
85 | nanaimo (~> 0.3.0)
86 | rexml (~> 3.2.4)
87 |
88 | PLATFORMS
89 | ruby
90 |
91 | DEPENDENCIES
92 | activesupport (>= 6.1.7.3, < 7.1.0)
93 | cocoapods (~> 1.13)
94 |
95 | RUBY VERSION
96 | ruby 3.2.2p53
97 |
98 | BUNDLED WITH
99 | 2.4.10
100 |
--------------------------------------------------------------------------------
/src/screens/tasks/AddNewTask.tsx:
--------------------------------------------------------------------------------
1 | import React, {useState} from 'react';
2 | import {Button, View} from 'react-native';
3 | import Container from '../../components/Container';
4 | import DateTimePickerComponent from '../../components/DateTimePickerComponent';
5 | import InputComponent from '../../components/InputComponent';
6 | import RowComponent from '../../components/RowComponent';
7 | import SectionComponent from '../../components/SectionComponent';
8 | import SpaceComponent from '../../components/SpaceComponent';
9 | import {TaskModel} from '../../models/TaskModel';
10 |
11 | const initValue: TaskModel = {
12 | title: '',
13 | desctiption: '',
14 | dueDate: new Date(),
15 | start: new Date(),
16 | end: new Date(),
17 | uids: [],
18 | fileUrls: [],
19 | };
20 |
21 | const AddNewTask = ({navigation}: any) => {
22 | const [taskDetail, setTaskDetail] = useState(initValue);
23 |
24 | const handleChangeValue = (id: string, value: string | Date) => {
25 | const item: any = {...taskDetail};
26 |
27 | item[`${id}`] = value;
28 |
29 | setTaskDetail(item);
30 | };
31 |
32 | const handleAddNewTask = async () => {
33 | console.log(taskDetail);
34 | };
35 |
36 | return (
37 |
38 |
39 | handleChangeValue('title', val)}
42 | title="Title"
43 | allowClear
44 | placeholder="Title of task"
45 | />
46 | handleChangeValue('desctiption', val)}
49 | title="Description"
50 | allowClear
51 | placeholder="Content"
52 | multible
53 | numberOfLine={3}
54 | />
55 |
56 | handleChangeValue('dueDate', val)}
59 | placeholder="Choice"
60 | type="date"
61 | title="Due date"
62 | />
63 |
64 |
65 |
66 | handleChangeValue('start', val)}
70 | title="Start"
71 | />
72 |
73 |
74 |
75 | handleChangeValue('end', val)}
78 | title="End"
79 | type="time"
80 | />
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | );
89 | };
90 |
91 | export default AddNewTask;
92 |
--------------------------------------------------------------------------------
/src/auth/LoginScreen.tsx:
--------------------------------------------------------------------------------
1 | import React, {useState} from 'react';
2 | import Container from '../components/Container';
3 | import TextComponent from '../components/TextComponent';
4 | import SectionComponent from '../components/SectionComponent';
5 | import TitleComponent from '../components/TitleComponent';
6 | import RowComponent from '../components/RowComponent';
7 | import InputComponent from '../components/InputComponent';
8 | import {Lock, Sms} from 'iconsax-react-native';
9 | import {colors} from '../constants/colors';
10 | import {Text, View} from 'react-native';
11 | import ButtonComponent from '../components/ButtonComponent';
12 | import {globalStyles} from '../styles/globalStyles';
13 | import auth from '@react-native-firebase/auth';
14 |
15 | const LoginScreen = ({navigation}: any) => {
16 | const [email, setEmail] = useState('');
17 | const [password, setPassword] = useState('');
18 | const [isLoading, setIsLoading] = useState(false);
19 | const [errorText, setErrorText] = useState('');
20 |
21 | const handleLogin = async () => {
22 | if (!email || !password) {
23 | setErrorText('Please enter your email and password!!!');
24 | } else {
25 | setErrorText('');
26 | setIsLoading(true);
27 | await auth()
28 | .signInWithEmailAndPassword(email, password)
29 | .then(userCredential => {
30 | const user = userCredential.user;
31 |
32 | if (user) {
33 | console.log(user);
34 | setIsLoading(false);
35 | }
36 | })
37 | .catch(error => {
38 | setErrorText(error.message);
39 | setIsLoading(false);
40 | });
41 | }
42 | };
43 | return (
44 |
45 |
50 |
51 |
52 |
53 | setEmail(val)}
57 | placeholder="Email"
58 | prefix={}
59 | allowClear
60 | type="email-address"
61 | />
62 | setPassword(val)}
67 | placeholder="Password"
68 | prefix={}
69 | />
70 |
75 |
76 |
77 |
78 | You don't have an account?{' '}
79 | navigation.navigate('RegisterScreen')}>
82 | Create an account
83 |
84 |
85 |
86 |
87 |
88 | );
89 | };
90 |
91 | export default LoginScreen;
92 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%"=="" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%"=="" set DIRNAME=.
29 | @rem This is normally unused
30 | set APP_BASE_NAME=%~n0
31 | set APP_HOME=%DIRNAME%
32 |
33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
35 |
36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
38 |
39 | @rem Find java.exe
40 | if defined JAVA_HOME goto findJavaFromJavaHome
41 |
42 | set JAVA_EXE=java.exe
43 | %JAVA_EXE% -version >NUL 2>&1
44 | if %ERRORLEVEL% equ 0 goto execute
45 |
46 | echo.
47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48 | echo.
49 | echo Please set the JAVA_HOME variable in your environment to match the
50 | echo location of your Java installation.
51 |
52 | goto fail
53 |
54 | :findJavaFromJavaHome
55 | set JAVA_HOME=%JAVA_HOME:"=%
56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
57 |
58 | if exist "%JAVA_EXE%" goto execute
59 |
60 | echo.
61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62 | echo.
63 | echo Please set the JAVA_HOME variable in your environment to match the
64 | echo location of your Java installation.
65 |
66 | goto fail
67 |
68 | :execute
69 | @rem Setup the command line
70 |
71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
72 |
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if %ERRORLEVEL% equ 0 goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | set EXIT_CODE=%ERRORLEVEL%
85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
87 | exit /b %EXIT_CODE%
88 |
89 | :mainEnd
90 | if "%OS%"=="Windows_NT" endlocal
91 |
92 | :omega
93 |
--------------------------------------------------------------------------------
/src/components/InputComponent.tsx:
--------------------------------------------------------------------------------
1 | import React, {ReactNode, useState} from 'react';
2 | import {
3 | KeyboardTypeOptions,
4 | TextInput,
5 | TouchableOpacity,
6 | View,
7 | } from 'react-native';
8 | import AntDesign from 'react-native-vector-icons/AntDesign';
9 | import {colors} from '../constants/colors';
10 | import {globalStyles} from '../styles/globalStyles';
11 | import RowComponent from './RowComponent';
12 | import TitleComponent from './TitleComponent';
13 | import {Eye, EyeSlash} from 'iconsax-react-native';
14 |
15 | interface Props {
16 | value: string;
17 | onChange: (val: string) => void;
18 | placeholder?: string;
19 | title?: string;
20 | prefix?: ReactNode;
21 | affix?: ReactNode;
22 | allowClear?: boolean;
23 | multible?: boolean;
24 | numberOfLine?: number;
25 | type?: KeyboardTypeOptions;
26 | isPassword?: boolean;
27 | }
28 |
29 | const InputComponent = (props: Props) => {
30 | const {
31 | value,
32 | onChange,
33 | placeholder,
34 | title,
35 | prefix,
36 | affix,
37 | allowClear,
38 | multible,
39 | numberOfLine,
40 | type,
41 | isPassword,
42 | } = props;
43 |
44 | const [showPass, setShowPass] = useState(false);
45 |
46 | return (
47 |
48 | {title && }
49 |
60 | {prefix && prefix}
61 |
67 | onChange(val)}
76 | multiline={multible}
77 | numberOfLines={numberOfLine}
78 | keyboardType={type}
79 | secureTextEntry={isPassword ? !showPass : false}
80 | autoCapitalize="none"
81 | />
82 |
83 | {affix && affix}
84 |
85 | {allowClear && value && (
86 | onChange('')}>
87 |
88 |
89 | )}
90 |
91 | {isPassword && (
92 | setShowPass(!showPass)}>
93 | {showPass ? (
94 |
95 | ) : (
96 |
97 | )}
98 |
99 | )}
100 |
101 |
102 | );
103 | };
104 |
105 | export default InputComponent;
106 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli).
2 |
3 | # Getting Started
4 |
5 | >**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding.
6 |
7 | ## Step 1: Start the Metro Server
8 |
9 | First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native.
10 |
11 | To start Metro, run the following command from the _root_ of your React Native project:
12 |
13 | ```bash
14 | # using npm
15 | npm start
16 |
17 | # OR using Yarn
18 | yarn start
19 | ```
20 |
21 | ## Step 2: Start your Application
22 |
23 | Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app:
24 |
25 | ### For Android
26 |
27 | ```bash
28 | # using npm
29 | npm run android
30 |
31 | # OR using Yarn
32 | yarn android
33 | ```
34 |
35 | ### For iOS
36 |
37 | ```bash
38 | # using npm
39 | npm run ios
40 |
41 | # OR using Yarn
42 | yarn ios
43 | ```
44 |
45 | If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly.
46 |
47 | This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.
48 |
49 | ## Step 3: Modifying your App
50 |
51 | Now that you have successfully run the app, let's modify it.
52 |
53 | 1. Open `App.tsx` in your text editor of choice and edit some lines.
54 | 2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes!
55 |
56 | For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes!
57 |
58 | ## Congratulations! :tada:
59 |
60 | You've successfully run and modified your React Native App. :partying_face:
61 |
62 | ### Now what?
63 |
64 | - If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps).
65 | - If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started).
66 |
67 | # Troubleshooting
68 |
69 | If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page.
70 |
71 | # Learn More
72 |
73 | To learn more about React Native, take a look at the following resources:
74 |
75 | - [React Native Website](https://reactnative.dev) - learn more about React Native.
76 | - [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment.
77 | - [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**.
78 | - [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts.
79 | - [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native.
80 |
--------------------------------------------------------------------------------
/android/link-assets-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "migIndex": 1,
3 | "data": [
4 | {
5 | "path": "assets/fonts/AntDesign.ttf",
6 | "sha1": "4e77868439280fb434d4697c7b911271406c81f3"
7 | },
8 | {
9 | "path": "assets/fonts/Entypo.ttf",
10 | "sha1": "12b5670eb178138f77285d5f2c246d3cc5fa67d6"
11 | },
12 | {
13 | "path": "assets/fonts/EvilIcons.ttf",
14 | "sha1": "91d377ea3cf47490b256c2ed081704a7dabdae0c"
15 | },
16 | {
17 | "path": "assets/fonts/Feather.ttf",
18 | "sha1": "e6604258b1ced5efd51360875d782fca65381d47"
19 | },
20 | {
21 | "path": "assets/fonts/FontAwesome.ttf",
22 | "sha1": "13b1eab65a983c7a73bc7997c479d66943f7c6cb"
23 | },
24 | {
25 | "path": "assets/fonts/FontAwesome5_Brands.ttf",
26 | "sha1": "3fa2d67cef22da5c3f3eb5730c6afbd6fecf0372"
27 | },
28 | {
29 | "path": "assets/fonts/FontAwesome5_Regular.ttf",
30 | "sha1": "7d849a3981a716e2ba4a84634bc57d0b8054a6a3"
31 | },
32 | {
33 | "path": "assets/fonts/FontAwesome5_Solid.ttf",
34 | "sha1": "c1b9fae262f42868c075ac865a8ab34920e20a2c"
35 | },
36 | {
37 | "path": "assets/fonts/FontAwesome6_Brands.ttf",
38 | "sha1": "d8b3568e9d8a1d3c01c85520eb9ca0b49b72815d"
39 | },
40 | {
41 | "path": "assets/fonts/FontAwesome6_Regular.ttf",
42 | "sha1": "2d7890e12afb77490112ec57fe47ca0688aebda2"
43 | },
44 | {
45 | "path": "assets/fonts/FontAwesome6_Solid.ttf",
46 | "sha1": "e9ace557c3aa403307f1e7a2cef1c035d522b94b"
47 | },
48 | {
49 | "path": "assets/fonts/Fontisto.ttf",
50 | "sha1": "c090a3ec96a3f1bb9b615c2f3f204ce0dcdcdbc3"
51 | },
52 | {
53 | "path": "assets/fonts/Foundation.ttf",
54 | "sha1": "4b2bce6c792493a4a5716b6fec2dbefe89492c3f"
55 | },
56 | {
57 | "path": "assets/fonts/Ionicons.ttf",
58 | "sha1": "86e07c3d974eb09099e6e5a9b3b8310303cf0feb"
59 | },
60 | {
61 | "path": "assets/fonts/MaterialCommunityIcons.ttf",
62 | "sha1": "4c2a838b00dbb5e8bb1b368fce0de534e8eb241c"
63 | },
64 | {
65 | "path": "assets/fonts/MaterialIcons.ttf",
66 | "sha1": "7e02c3f005532ff4d24148567c84089756a7848a"
67 | },
68 | {
69 | "path": "assets/fonts/NunitoSans_10pt-Bold.ttf",
70 | "sha1": "1a43f6ab652eb0c71cd0d748bd8d4bf360903fe1"
71 | },
72 | {
73 | "path": "assets/fonts/NunitoSans_10pt-Light.ttf",
74 | "sha1": "32f3cecd9b6c0f67c1a6bec6886e2b8f160617f1"
75 | },
76 | {
77 | "path": "assets/fonts/NunitoSans_10pt-Medium.ttf",
78 | "sha1": "947e59a8d3586d17a5f8698ae2f371e580411cdb"
79 | },
80 | {
81 | "path": "assets/fonts/NunitoSans_10pt-Regular.ttf",
82 | "sha1": "c4bc36919dfa9ee086b71d7b2796fafc22249b97"
83 | },
84 | {
85 | "path": "assets/fonts/NunitoSans_10pt-SemiBold.ttf",
86 | "sha1": "0ec94b38226fe45cb85bad4cb5f884512bae6eb7"
87 | },
88 | {
89 | "path": "assets/fonts/Octicons.ttf",
90 | "sha1": "56acefc0731f35ee23b195b1c8cb5fa94a0db97b"
91 | },
92 | {
93 | "path": "assets/fonts/SimpleLineIcons.ttf",
94 | "sha1": "9ffb81a5a11112e292f2cc323e98486bad597599"
95 | },
96 | {
97 | "path": "assets/fonts/Zocial.ttf",
98 | "sha1": "6a48a962b06cc3acbdfd61df0d9a34744eea5e8d"
99 | }
100 | ]
101 | }
102 |
--------------------------------------------------------------------------------
/ios/link-assets-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "migIndex": 1,
3 | "data": [
4 | {
5 | "path": "assets/fonts/AntDesign.ttf",
6 | "sha1": "4e77868439280fb434d4697c7b911271406c81f3"
7 | },
8 | {
9 | "path": "assets/fonts/Entypo.ttf",
10 | "sha1": "12b5670eb178138f77285d5f2c246d3cc5fa67d6"
11 | },
12 | {
13 | "path": "assets/fonts/EvilIcons.ttf",
14 | "sha1": "91d377ea3cf47490b256c2ed081704a7dabdae0c"
15 | },
16 | {
17 | "path": "assets/fonts/Feather.ttf",
18 | "sha1": "e6604258b1ced5efd51360875d782fca65381d47"
19 | },
20 | {
21 | "path": "assets/fonts/FontAwesome.ttf",
22 | "sha1": "13b1eab65a983c7a73bc7997c479d66943f7c6cb"
23 | },
24 | {
25 | "path": "assets/fonts/FontAwesome5_Brands.ttf",
26 | "sha1": "3fa2d67cef22da5c3f3eb5730c6afbd6fecf0372"
27 | },
28 | {
29 | "path": "assets/fonts/FontAwesome5_Regular.ttf",
30 | "sha1": "7d849a3981a716e2ba4a84634bc57d0b8054a6a3"
31 | },
32 | {
33 | "path": "assets/fonts/FontAwesome5_Solid.ttf",
34 | "sha1": "c1b9fae262f42868c075ac865a8ab34920e20a2c"
35 | },
36 | {
37 | "path": "assets/fonts/FontAwesome6_Brands.ttf",
38 | "sha1": "d8b3568e9d8a1d3c01c85520eb9ca0b49b72815d"
39 | },
40 | {
41 | "path": "assets/fonts/FontAwesome6_Regular.ttf",
42 | "sha1": "2d7890e12afb77490112ec57fe47ca0688aebda2"
43 | },
44 | {
45 | "path": "assets/fonts/FontAwesome6_Solid.ttf",
46 | "sha1": "e9ace557c3aa403307f1e7a2cef1c035d522b94b"
47 | },
48 | {
49 | "path": "assets/fonts/Fontisto.ttf",
50 | "sha1": "c090a3ec96a3f1bb9b615c2f3f204ce0dcdcdbc3"
51 | },
52 | {
53 | "path": "assets/fonts/Foundation.ttf",
54 | "sha1": "4b2bce6c792493a4a5716b6fec2dbefe89492c3f"
55 | },
56 | {
57 | "path": "assets/fonts/Ionicons.ttf",
58 | "sha1": "86e07c3d974eb09099e6e5a9b3b8310303cf0feb"
59 | },
60 | {
61 | "path": "assets/fonts/MaterialCommunityIcons.ttf",
62 | "sha1": "4c2a838b00dbb5e8bb1b368fce0de534e8eb241c"
63 | },
64 | {
65 | "path": "assets/fonts/MaterialIcons.ttf",
66 | "sha1": "7e02c3f005532ff4d24148567c84089756a7848a"
67 | },
68 | {
69 | "path": "assets/fonts/NunitoSans_10pt-Bold.ttf",
70 | "sha1": "1a43f6ab652eb0c71cd0d748bd8d4bf360903fe1"
71 | },
72 | {
73 | "path": "assets/fonts/NunitoSans_10pt-Light.ttf",
74 | "sha1": "32f3cecd9b6c0f67c1a6bec6886e2b8f160617f1"
75 | },
76 | {
77 | "path": "assets/fonts/NunitoSans_10pt-Medium.ttf",
78 | "sha1": "947e59a8d3586d17a5f8698ae2f371e580411cdb"
79 | },
80 | {
81 | "path": "assets/fonts/NunitoSans_10pt-Regular.ttf",
82 | "sha1": "c4bc36919dfa9ee086b71d7b2796fafc22249b97"
83 | },
84 | {
85 | "path": "assets/fonts/NunitoSans_10pt-SemiBold.ttf",
86 | "sha1": "0ec94b38226fe45cb85bad4cb5f884512bae6eb7"
87 | },
88 | {
89 | "path": "assets/fonts/Octicons.ttf",
90 | "sha1": "56acefc0731f35ee23b195b1c8cb5fa94a0db97b"
91 | },
92 | {
93 | "path": "assets/fonts/SimpleLineIcons.ttf",
94 | "sha1": "9ffb81a5a11112e292f2cc323e98486bad597599"
95 | },
96 | {
97 | "path": "assets/fonts/Zocial.ttf",
98 | "sha1": "6a48a962b06cc3acbdfd61df0d9a34744eea5e8d"
99 | }
100 | ]
101 | }
102 |
--------------------------------------------------------------------------------
/src/components/DateTimePickerComponent.tsx:
--------------------------------------------------------------------------------
1 | import {View, Text, Modal, Button, Dimensions} from 'react-native';
2 | import React, {useState} from 'react';
3 | import TitleComponent from './TitleComponent';
4 | import RowComponent from './RowComponent';
5 | import TextComponent from './TextComponent';
6 | import {colors} from '../constants/colors';
7 | import {ArrowDown2} from 'iconsax-react-native';
8 | import {globalStyles} from '../styles/globalStyles';
9 | import SpaceComponent from './SpaceComponent';
10 | import DatePicker from 'react-native-date-picker';
11 |
12 | interface Props {
13 | type?: 'date' | 'time' | 'datetime';
14 | title?: string;
15 | placeholder?: string;
16 | selected?: Date;
17 | onSelect: (val: Date) => void;
18 | }
19 |
20 | const DateTimePickerComponent = (props: Props) => {
21 | const {selected, onSelect, placeholder, title, type} = props;
22 |
23 | const [isVisibleModalDateTime, setIsVisibleModalDateTime] = useState(false);
24 | const [date, setDate] = useState(selected ?? new Date());
25 | return (
26 | <>
27 |
28 | {title && }
29 | setIsVisibleModalDateTime(true)}
31 | styles={[
32 | globalStyles.inputContainer,
33 | {marginTop: title ? 8 : 0, paddingVertical: 16},
34 | ]}>
35 |
50 |
51 |
52 |
53 |
54 |
55 |
62 |
70 |
71 |
72 | setDate(val)}
76 | locale="vi"
77 | />
78 |
79 |
80 |
92 |
93 |
94 | >
95 | );
96 | };
97 |
98 | export default DateTimePickerComponent;
99 |
--------------------------------------------------------------------------------
/ios/todolist.xcodeproj/xcshareddata/xcschemes/todolist.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 |
--------------------------------------------------------------------------------
/android/app/src/debug/java/com/todolist/ReactNativeFlipper.java:
--------------------------------------------------------------------------------
1 | /**
2 | * Copyright (c) Meta Platforms, Inc. and 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.todolist;
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.sharedpreferences.SharedPreferencesFlipperPlugin;
21 | import com.facebook.react.ReactInstanceEventListener;
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 | /**
28 | * Class responsible of loading Flipper inside your React Native application. This is the debug
29 | * flavor of it. Here you can add your own plugins and customize the Flipper setup.
30 | */
31 | public class ReactNativeFlipper {
32 | public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
33 | if (FlipperUtils.shouldEnableFlipper(context)) {
34 | final FlipperClient client = AndroidFlipperClient.getInstance(context);
35 |
36 | client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
37 | client.addPlugin(new DatabasesFlipperPlugin(context));
38 | client.addPlugin(new SharedPreferencesFlipperPlugin(context));
39 | client.addPlugin(CrashReporterPlugin.getInstance());
40 |
41 | NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
42 | NetworkingModule.setCustomClientBuilder(
43 | new NetworkingModule.CustomClientBuilder() {
44 | @Override
45 | public void apply(OkHttpClient.Builder builder) {
46 | builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
47 | }
48 | });
49 | client.addPlugin(networkFlipperPlugin);
50 | client.start();
51 |
52 | // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
53 | // Hence we run if after all native modules have been initialized
54 | ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
55 | if (reactContext == null) {
56 | reactInstanceManager.addReactInstanceEventListener(
57 | new ReactInstanceEventListener() {
58 | @Override
59 | public void onReactContextInitialized(ReactContext reactContext) {
60 | reactInstanceManager.removeReactInstanceEventListener(this);
61 | reactContext.runOnNativeModulesQueueThread(
62 | new Runnable() {
63 | @Override
64 | public void run() {
65 | client.addPlugin(new FrescoFlipperPlugin());
66 | }
67 | });
68 | }
69 | });
70 | } else {
71 | client.addPlugin(new FrescoFlipperPlugin());
72 | }
73 | }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/src/auth/RegisterScreen.tsx:
--------------------------------------------------------------------------------
1 | import React, {useEffect, useState} from 'react';
2 | import Container from '../components/Container';
3 | import TextComponent from '../components/TextComponent';
4 | import SectionComponent from '../components/SectionComponent';
5 | import TitleComponent from '../components/TitleComponent';
6 | import RowComponent from '../components/RowComponent';
7 | import InputComponent from '../components/InputComponent';
8 | import {Lock, Sms} from 'iconsax-react-native';
9 | import {colors} from '../constants/colors';
10 | import {Text, View} from 'react-native';
11 | import ButtonComponent from '../components/ButtonComponent';
12 | import {globalStyles} from '../styles/globalStyles';
13 | import SpaceComponent from '../components/SpaceComponent';
14 | import auth from '@react-native-firebase/auth';
15 |
16 | const RegisterScreen = ({navigation}: any) => {
17 | const [email, setEmail] = useState('');
18 | const [password, setPassword] = useState('');
19 | const [confirmPassword, setConfirmPassword] = useState('');
20 | const [errorText, setErrorText] = useState('');
21 | const [isLoading, setIsLoading] = useState(false);
22 |
23 | useEffect(() => {
24 | if (email) {
25 | setErrorText('');
26 | }
27 | }, [email]);
28 |
29 | const handleCreateAccount = async () => {
30 | if (!email) {
31 | setErrorText('Please enter your email!!!');
32 | } else if (!password || !confirmPassword) {
33 | setErrorText('Please enter your password!!!');
34 | } else if (password !== confirmPassword) {
35 | setErrorText('Password is not match!!!');
36 | } else if (password.length < 6) {
37 | setErrorText('Password must be to 6 characters');
38 | } else {
39 | setIsLoading(true);
40 | await auth()
41 | .createUserWithEmailAndPassword(email, password)
42 | .then(userCredential => {
43 | const user = userCredential.user;
44 |
45 | if (user) {
46 | console.log(user);
47 | setIsLoading(false);
48 | }
49 | })
50 | .catch(error => {
51 | setIsLoading(false);
52 | setErrorText(error.message);
53 | });
54 | }
55 | };
56 | return (
57 |
58 |
63 |
64 |
65 |
66 | setEmail(val)}
70 | placeholder="Email"
71 | prefix={}
72 | allowClear
73 | type="email-address"
74 | />
75 | setPassword(val)}
80 | placeholder="Password"
81 | prefix={}
82 | />
83 | setConfirmPassword(val)}
88 | placeholder="Comfirm password"
89 | prefix={}
90 | />
91 |
92 | {errorText && }
93 |
94 |
95 |
100 |
101 |
102 |
103 | You have an account?{' '}
104 | navigation.navigate('LoginScreen')}>
107 | Login
108 |
109 |
110 |
111 |
112 |
113 | );
114 | };
115 |
116 | export default RegisterScreen;
117 |
--------------------------------------------------------------------------------
/ios/todolist/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
24 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 | apply plugin: "com.facebook.react"
3 | apply plugin: 'com.google.gms.google-services'
4 |
5 | /**
6 | * This is the configuration block to customize your React Native Android app.
7 | * By default you don't need to apply any configuration, just uncomment the lines you need.
8 | */
9 | react {
10 | /* Folders */
11 | // The root of your project, i.e. where "package.json" lives. Default is '..'
12 | // root = file("../")
13 | // The folder where the react-native NPM package is. Default is ../node_modules/react-native
14 | // reactNativeDir = file("../node_modules/react-native")
15 | // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
16 | // codegenDir = file("../node_modules/@react-native/codegen")
17 | // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
18 | // cliFile = file("../node_modules/react-native/cli.js")
19 |
20 | /* Variants */
21 | // The list of variants to that are debuggable. For those we're going to
22 | // skip the bundling of the JS bundle and the assets. By default is just 'debug'.
23 | // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
24 | // debuggableVariants = ["liteDebug", "prodDebug"]
25 |
26 | /* Bundling */
27 | // A list containing the node command and its flags. Default is just 'node'.
28 | // nodeExecutableAndArgs = ["node"]
29 | //
30 | // The command to run when bundling. By default is 'bundle'
31 | // bundleCommand = "ram-bundle"
32 | //
33 | // The path to the CLI configuration file. Default is empty.
34 | // bundleConfig = file(../rn-cli.config.js)
35 | //
36 | // The name of the generated asset file containing your JS bundle
37 | // bundleAssetName = "MyApplication.android.bundle"
38 | //
39 | // The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
40 | // entryFile = file("../js/MyApplication.android.js")
41 | //
42 | // A list of extra flags to pass to the 'bundle' commands.
43 | // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
44 | // extraPackagerArgs = []
45 |
46 | /* Hermes Commands */
47 | // The hermes compiler command to run. By default it is 'hermesc'
48 | // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
49 | //
50 | // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
51 | // hermesFlags = ["-O", "-output-source-map"]
52 | }
53 |
54 | /**
55 | * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
56 | */
57 | def enableProguardInReleaseBuilds = false
58 |
59 | /**
60 | * The preferred build flavor of JavaScriptCore (JSC)
61 | *
62 | * For example, to use the international variant, you can use:
63 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
64 | *
65 | * The international variant includes ICU i18n library and necessary data
66 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
67 | * give correct results when using with locales other than en-US. Note that
68 | * this variant is about 6MiB larger per architecture than default.
69 | */
70 | def jscFlavor = 'org.webkit:android-jsc:+'
71 |
72 | android {
73 | ndkVersion rootProject.ext.ndkVersion
74 |
75 | compileSdkVersion rootProject.ext.compileSdkVersion
76 |
77 | namespace "com.todolist"
78 | defaultConfig {
79 | applicationId "com.todolist"
80 | minSdkVersion rootProject.ext.minSdkVersion
81 | targetSdkVersion rootProject.ext.targetSdkVersion
82 | versionCode 1
83 | versionName "1.0"
84 | }
85 | signingConfigs {
86 | debug {
87 | storeFile file('debug.keystore')
88 | storePassword 'android'
89 | keyAlias 'androiddebugkey'
90 | keyPassword 'android'
91 | }
92 | }
93 | buildTypes {
94 | debug {
95 | signingConfig signingConfigs.debug
96 | }
97 | release {
98 | // Caution! In production, you need to generate your own keystore file.
99 | // see https://reactnative.dev/docs/signed-apk-android.
100 | signingConfig signingConfigs.debug
101 | minifyEnabled enableProguardInReleaseBuilds
102 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
103 | }
104 | }
105 | }
106 |
107 | dependencies {
108 | // The version of react-native is set by the React Native Gradle Plugin
109 | implementation("com.facebook.react:react-android")
110 |
111 | debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
112 | debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
113 | exclude group:'com.squareup.okhttp3', module:'okhttp'
114 | }
115 |
116 | debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
117 | if (hermesEnabled.toBoolean()) {
118 | implementation("com.facebook.react:hermes-android")
119 | } else {
120 | implementation jscFlavor
121 | }
122 | }
123 |
124 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
125 |
--------------------------------------------------------------------------------
/src/screens/homes/HomeScreen.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | Add,
3 | Edit2,
4 | Element4,
5 | Logout,
6 | Notification,
7 | SearchNormal1,
8 | } from 'iconsax-react-native';
9 | import React from 'react';
10 | import {TouchableOpacity, View} from 'react-native';
11 | import AvatarGroup from '../../components/AvatarGroup';
12 | import CardComponent from '../../components/CardComponent';
13 | import CardImageConponent from '../../components/CardImageConponent';
14 | import CicularComponent from '../../components/CicularComponent';
15 | import Container from '../../components/Container';
16 | import ProgressBarComponent from '../../components/ProgressBarComponent';
17 | import RowComponent from '../../components/RowComponent';
18 | import SectionComponent from '../../components/SectionComponent';
19 | import SpaceComponent from '../../components/SpaceComponent';
20 | import TagComponent from '../../components/TagComponent';
21 | import TextComponent from '../../components/TextComponent';
22 | import TitleComponent from '../../components/TitleComponent';
23 | import {colors} from '../../constants/colors';
24 | import {fontFamilies} from '../../constants/fontFamilies';
25 | import {globalStyles} from '../../styles/globalStyles';
26 | import auth from '@react-native-firebase/auth';
27 |
28 | const HomeScreen = ({navigation}: any) => {
29 | const handleSingout = async () => {
30 | await auth().signOut();
31 | };
32 |
33 | return (
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 | navigation.navigate('SearchScreen')}>
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | console.log('Say Hi!!!')}
75 | />
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 | {}}
90 | style={globalStyles.iconContainer}>
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
103 |
104 |
109 |
110 |
111 |
112 |
113 |
114 | {}}
116 | style={globalStyles.iconContainer}>
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 | {}}
128 | style={globalStyles.iconContainer}>
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
144 |
145 |
146 |
147 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
165 | navigation.navigate('AddNewTask')}
168 | style={[
169 | globalStyles.row,
170 | {
171 | backgroundColor: colors.blue,
172 | padding: 10,
173 | borderRadius: 12,
174 | paddingVertical: 14,
175 | width: '80%',
176 | },
177 | ]}>
178 |
179 |
180 |
181 |
182 |
183 | );
184 | };
185 |
186 | export default HomeScreen;
187 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original 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 POSIX generated by Gradle.
22 | #
23 | # Important for running:
24 | #
25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
26 | # noncompliant, but you have some other compliant shell such as ksh or
27 | # bash, then to run this script, type that shell name before the whole
28 | # command line, like:
29 | #
30 | # ksh Gradle
31 | #
32 | # Busybox and similar reduced shells will NOT work, because this script
33 | # requires all of these POSIX shell features:
34 | # * functions;
35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
37 | # * compound commands having a testable exit status, especially «case»;
38 | # * various built-in commands including «command», «set», and «ulimit».
39 | #
40 | # Important for patching:
41 | #
42 | # (2) This script targets any POSIX shell, so it avoids extensions provided
43 | # by Bash, Ksh, etc; in particular arrays are avoided.
44 | #
45 | # The "traditional" practice of packing multiple parameters into a
46 | # space-separated string is a well documented source of bugs and security
47 | # problems, so this is (mostly) avoided, by progressively accumulating
48 | # options in "$@", and eventually passing that to Java.
49 | #
50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
52 | # see the in-line comments for details.
53 | #
54 | # There are tweaks for specific operating systems such as AIX, CygWin,
55 | # Darwin, MinGW, and NonStop.
56 | #
57 | # (3) This script is generated from the Groovy template
58 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
59 | # within the Gradle project.
60 | #
61 | # You can find Gradle at https://github.com/gradle/gradle/.
62 | #
63 | ##############################################################################
64 |
65 | # Attempt to set APP_HOME
66 |
67 | # Resolve links: $0 may be a link
68 | app_path=$0
69 |
70 | # Need this for daisy-chained symlinks.
71 | while
72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
73 | [ -h "$app_path" ]
74 | do
75 | ls=$( ls -ld "$app_path" )
76 | link=${ls#*' -> '}
77 | case $link in #(
78 | /*) app_path=$link ;; #(
79 | *) app_path=$APP_HOME$link ;;
80 | esac
81 | done
82 |
83 | # This is normally unused
84 | # shellcheck disable=SC2034
85 | APP_BASE_NAME=${0##*/}
86 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
87 |
88 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
89 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
90 |
91 | # Use the maximum available, or set MAX_FD != -1 to use that value.
92 | MAX_FD=maximum
93 |
94 | warn () {
95 | echo "$*"
96 | } >&2
97 |
98 | die () {
99 | echo
100 | echo "$*"
101 | echo
102 | exit 1
103 | } >&2
104 |
105 | # OS specific support (must be 'true' or 'false').
106 | cygwin=false
107 | msys=false
108 | darwin=false
109 | nonstop=false
110 | case "$( uname )" in #(
111 | CYGWIN* ) cygwin=true ;; #(
112 | Darwin* ) darwin=true ;; #(
113 | MSYS* | MINGW* ) msys=true ;; #(
114 | NONSTOP* ) nonstop=true ;;
115 | esac
116 |
117 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
118 |
119 |
120 | # Determine the Java command to use to start the JVM.
121 | if [ -n "$JAVA_HOME" ] ; then
122 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
123 | # IBM's JDK on AIX uses strange locations for the executables
124 | JAVACMD=$JAVA_HOME/jre/sh/java
125 | else
126 | JAVACMD=$JAVA_HOME/bin/java
127 | fi
128 | if [ ! -x "$JAVACMD" ] ; then
129 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
130 |
131 | Please set the JAVA_HOME variable in your environment to match the
132 | location of your Java installation."
133 | fi
134 | else
135 | JAVACMD=java
136 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137 |
138 | Please set the JAVA_HOME variable in your environment to match the
139 | location of your Java installation."
140 | fi
141 |
142 | # Increase the maximum file descriptors if we can.
143 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
144 | case $MAX_FD in #(
145 | max*)
146 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
147 | # shellcheck disable=SC3045
148 | MAX_FD=$( ulimit -H -n ) ||
149 | warn "Could not query maximum file descriptor limit"
150 | esac
151 | case $MAX_FD in #(
152 | '' | soft) :;; #(
153 | *)
154 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
155 | # shellcheck disable=SC3045
156 | ulimit -n "$MAX_FD" ||
157 | warn "Could not set maximum file descriptor limit to $MAX_FD"
158 | esac
159 | fi
160 |
161 | # Collect all arguments for the java command, stacking in reverse order:
162 | # * args from the command line
163 | # * the main class name
164 | # * -classpath
165 | # * -D...appname settings
166 | # * --module-path (only if needed)
167 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
168 |
169 | # For Cygwin or MSYS, switch paths to Windows format before running java
170 | if "$cygwin" || "$msys" ; then
171 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
172 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
173 |
174 | JAVACMD=$( cygpath --unix "$JAVACMD" )
175 |
176 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
177 | for arg do
178 | if
179 | case $arg in #(
180 | -*) false ;; # don't mess with options #(
181 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
182 | [ -e "$t" ] ;; #(
183 | *) false ;;
184 | esac
185 | then
186 | arg=$( cygpath --path --ignore --mixed "$arg" )
187 | fi
188 | # Roll the args list around exactly as many times as the number of
189 | # args, so each arg winds up back in the position where it started, but
190 | # possibly modified.
191 | #
192 | # NB: a `for` loop captures its iteration list before it begins, so
193 | # changing the positional parameters here affects neither the number of
194 | # iterations, nor the values presented in `arg`.
195 | shift # remove old arg
196 | set -- "$@" "$arg" # push replacement arg
197 | done
198 | fi
199 |
200 | # Collect all arguments for the java command;
201 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
202 | # shell script including quotes and variable substitutions, so put them in
203 | # double quotes to make sure that they get re-expanded; and
204 | # * put everything else in single quotes, so that it's not re-expanded.
205 |
206 | set -- \
207 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
208 | -classpath "$CLASSPATH" \
209 | org.gradle.wrapper.GradleWrapperMain \
210 | "$@"
211 |
212 | # Stop when "xargs" is not available.
213 | if ! command -v xargs >/dev/null 2>&1
214 | then
215 | die "xargs is not available"
216 | fi
217 |
218 | # Use "xargs" to parse quoted args.
219 | #
220 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
221 | #
222 | # In Bash we could simply go:
223 | #
224 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
225 | # set -- "${ARGS[@]}" "$@"
226 | #
227 | # but POSIX shell has neither arrays nor command substitution, so instead we
228 | # post-process each arg (as a line of input to sed) to backslash-escape any
229 | # character that might be a shell metacharacter, then use eval to reverse
230 | # that process (while maintaining the separation between arguments), and wrap
231 | # the whole thing up as a single "set" statement.
232 | #
233 | # This will of course break if any of these variables contains a newline or
234 | # an unmatched quote.
235 | #
236 |
237 | eval "set -- $(
238 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
239 | xargs -n1 |
240 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
241 | tr '\n' ' '
242 | )" '"$@"'
243 |
244 | exec "$JAVACMD" "$@"
245 |
--------------------------------------------------------------------------------
/ios/todolist.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 00E356F31AD99517003FC87E /* todolistTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* todolistTests.m */; };
11 | 0137F9A32B2FD626003D1F54 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 0137F9A22B2FD626003D1F54 /* GoogleService-Info.plist */; };
12 | 0EC28523F51C488BBB970083 /* NunitoSans_10pt-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DDA678C2C18F4249A7D267B0 /* NunitoSans_10pt-Bold.ttf */; };
13 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
14 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
15 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
16 | 3B0178D8ACCDF7B850A96F76 /* Pods_todolist_todolistTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF2658B95BCA841F2C0E605B /* Pods_todolist_todolistTests.framework */; };
17 | 4125BBAFAC224B9586A903B5 /* NunitoSans_10pt-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 2A2761A5AE0E46C4800287D3 /* NunitoSans_10pt-Regular.ttf */; };
18 | 536817DADABDA5332B291820 /* Pods_todolist.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C498280B3CE7739C229B55FA /* Pods_todolist.framework */; };
19 | 7139A0172AED41D08929C1FE /* NunitoSans_10pt-Medium.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 59267EF744934702B2F051F8 /* NunitoSans_10pt-Medium.ttf */; };
20 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
21 | A7878F95211E4B6D98DEC526 /* NunitoSans_10pt-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EE602D8ECE924A0E9EBFEDED /* NunitoSans_10pt-SemiBold.ttf */; };
22 | B64CFF0E95F94F498EC7F521 /* NunitoSans_10pt-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 873038C343F84754B3B8D12A /* NunitoSans_10pt-Light.ttf */; };
23 | /* End PBXBuildFile section */
24 |
25 | /* Begin PBXContainerItemProxy section */
26 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
27 | isa = PBXContainerItemProxy;
28 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
29 | proxyType = 1;
30 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
31 | remoteInfo = todolist;
32 | };
33 | /* End PBXContainerItemProxy section */
34 |
35 | /* Begin PBXFileReference section */
36 | 00E356EE1AD99517003FC87E /* todolistTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = todolistTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
37 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
38 | 00E356F21AD99517003FC87E /* todolistTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = todolistTests.m; sourceTree = ""; };
39 | 0137F9A22B2FD626003D1F54 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "todolist/GoogleService-Info.plist"; sourceTree = ""; };
40 | 13B07F961A680F5B00A75B9A /* todolist.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = todolist.app; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = todolist/AppDelegate.h; sourceTree = ""; };
42 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = todolist/AppDelegate.mm; sourceTree = ""; };
43 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = todolist/Images.xcassets; sourceTree = ""; };
44 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = todolist/Info.plist; sourceTree = ""; };
45 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = todolist/main.m; sourceTree = ""; };
46 | 2A2761A5AE0E46C4800287D3 /* NunitoSans_10pt-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "NunitoSans_10pt-Regular.ttf"; path = "../assets/fonts/NunitoSans_10pt-Regular.ttf"; sourceTree = ""; };
47 | 3B4392A12AC88292D35C810B /* Pods-todolist.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-todolist.debug.xcconfig"; path = "Target Support Files/Pods-todolist/Pods-todolist.debug.xcconfig"; sourceTree = ""; };
48 | 5709B34CF0A7D63546082F79 /* Pods-todolist.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-todolist.release.xcconfig"; path = "Target Support Files/Pods-todolist/Pods-todolist.release.xcconfig"; sourceTree = ""; };
49 | 59267EF744934702B2F051F8 /* NunitoSans_10pt-Medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "NunitoSans_10pt-Medium.ttf"; path = "../assets/fonts/NunitoSans_10pt-Medium.ttf"; sourceTree = ""; };
50 | 5B7EB9410499542E8C5724F5 /* Pods-todolist-todolistTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-todolist-todolistTests.debug.xcconfig"; path = "Target Support Files/Pods-todolist-todolistTests/Pods-todolist-todolistTests.debug.xcconfig"; sourceTree = ""; };
51 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = todolist/LaunchScreen.storyboard; sourceTree = ""; };
52 | 873038C343F84754B3B8D12A /* NunitoSans_10pt-Light.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "NunitoSans_10pt-Light.ttf"; path = "../assets/fonts/NunitoSans_10pt-Light.ttf"; sourceTree = ""; };
53 | 89C6BE57DB24E9ADA2F236DE /* Pods-todolist-todolistTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-todolist-todolistTests.release.xcconfig"; path = "Target Support Files/Pods-todolist-todolistTests/Pods-todolist-todolistTests.release.xcconfig"; sourceTree = ""; };
54 | AF2658B95BCA841F2C0E605B /* Pods_todolist_todolistTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_todolist_todolistTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
55 | C498280B3CE7739C229B55FA /* Pods_todolist.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_todolist.framework; sourceTree = BUILT_PRODUCTS_DIR; };
56 | DDA678C2C18F4249A7D267B0 /* NunitoSans_10pt-Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "NunitoSans_10pt-Bold.ttf"; path = "../assets/fonts/NunitoSans_10pt-Bold.ttf"; sourceTree = ""; };
57 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
58 | EE602D8ECE924A0E9EBFEDED /* NunitoSans_10pt-SemiBold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "NunitoSans_10pt-SemiBold.ttf"; path = "../assets/fonts/NunitoSans_10pt-SemiBold.ttf"; sourceTree = ""; };
59 | /* End PBXFileReference section */
60 |
61 | /* Begin PBXFrameworksBuildPhase section */
62 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
63 | isa = PBXFrameworksBuildPhase;
64 | buildActionMask = 2147483647;
65 | files = (
66 | 3B0178D8ACCDF7B850A96F76 /* Pods_todolist_todolistTests.framework in Frameworks */,
67 | );
68 | runOnlyForDeploymentPostprocessing = 0;
69 | };
70 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
71 | isa = PBXFrameworksBuildPhase;
72 | buildActionMask = 2147483647;
73 | files = (
74 | 536817DADABDA5332B291820 /* Pods_todolist.framework in Frameworks */,
75 | );
76 | runOnlyForDeploymentPostprocessing = 0;
77 | };
78 | /* End PBXFrameworksBuildPhase section */
79 |
80 | /* Begin PBXGroup section */
81 | 00E356EF1AD99517003FC87E /* todolistTests */ = {
82 | isa = PBXGroup;
83 | children = (
84 | 00E356F21AD99517003FC87E /* todolistTests.m */,
85 | 00E356F01AD99517003FC87E /* Supporting Files */,
86 | );
87 | path = todolistTests;
88 | sourceTree = "";
89 | };
90 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
91 | isa = PBXGroup;
92 | children = (
93 | 00E356F11AD99517003FC87E /* Info.plist */,
94 | );
95 | name = "Supporting Files";
96 | sourceTree = "";
97 | };
98 | 13B07FAE1A68108700A75B9A /* todolist */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
102 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
103 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
104 | 13B07FB61A68108700A75B9A /* Info.plist */,
105 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
106 | 13B07FB71A68108700A75B9A /* main.m */,
107 | );
108 | name = todolist;
109 | sourceTree = "";
110 | };
111 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
112 | isa = PBXGroup;
113 | children = (
114 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
115 | C498280B3CE7739C229B55FA /* Pods_todolist.framework */,
116 | AF2658B95BCA841F2C0E605B /* Pods_todolist_todolistTests.framework */,
117 | );
118 | name = Frameworks;
119 | sourceTree = "";
120 | };
121 | 3F85C0A11CD94D5686996DF2 /* Resources */ = {
122 | isa = PBXGroup;
123 | children = (
124 | DDA678C2C18F4249A7D267B0 /* NunitoSans_10pt-Bold.ttf */,
125 | 873038C343F84754B3B8D12A /* NunitoSans_10pt-Light.ttf */,
126 | 59267EF744934702B2F051F8 /* NunitoSans_10pt-Medium.ttf */,
127 | 2A2761A5AE0E46C4800287D3 /* NunitoSans_10pt-Regular.ttf */,
128 | EE602D8ECE924A0E9EBFEDED /* NunitoSans_10pt-SemiBold.ttf */,
129 | );
130 | name = Resources;
131 | sourceTree = "";
132 | };
133 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
134 | isa = PBXGroup;
135 | children = (
136 | );
137 | name = Libraries;
138 | sourceTree = "";
139 | };
140 | 83CBB9F61A601CBA00E9B192 = {
141 | isa = PBXGroup;
142 | children = (
143 | 0137F9A22B2FD626003D1F54 /* GoogleService-Info.plist */,
144 | 13B07FAE1A68108700A75B9A /* todolist */,
145 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
146 | 00E356EF1AD99517003FC87E /* todolistTests */,
147 | 83CBBA001A601CBA00E9B192 /* Products */,
148 | 2D16E6871FA4F8E400B85C8A /* Frameworks */,
149 | BBD78D7AC51CEA395F1C20DB /* Pods */,
150 | 3F85C0A11CD94D5686996DF2 /* Resources */,
151 | );
152 | indentWidth = 2;
153 | sourceTree = "";
154 | tabWidth = 2;
155 | usesTabs = 0;
156 | };
157 | 83CBBA001A601CBA00E9B192 /* Products */ = {
158 | isa = PBXGroup;
159 | children = (
160 | 13B07F961A680F5B00A75B9A /* todolist.app */,
161 | 00E356EE1AD99517003FC87E /* todolistTests.xctest */,
162 | );
163 | name = Products;
164 | sourceTree = "";
165 | };
166 | BBD78D7AC51CEA395F1C20DB /* Pods */ = {
167 | isa = PBXGroup;
168 | children = (
169 | 3B4392A12AC88292D35C810B /* Pods-todolist.debug.xcconfig */,
170 | 5709B34CF0A7D63546082F79 /* Pods-todolist.release.xcconfig */,
171 | 5B7EB9410499542E8C5724F5 /* Pods-todolist-todolistTests.debug.xcconfig */,
172 | 89C6BE57DB24E9ADA2F236DE /* Pods-todolist-todolistTests.release.xcconfig */,
173 | );
174 | path = Pods;
175 | sourceTree = "";
176 | };
177 | /* End PBXGroup section */
178 |
179 | /* Begin PBXNativeTarget section */
180 | 00E356ED1AD99517003FC87E /* todolistTests */ = {
181 | isa = PBXNativeTarget;
182 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "todolistTests" */;
183 | buildPhases = (
184 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
185 | 00E356EA1AD99517003FC87E /* Sources */,
186 | 00E356EB1AD99517003FC87E /* Frameworks */,
187 | 00E356EC1AD99517003FC87E /* Resources */,
188 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
189 | );
190 | buildRules = (
191 | );
192 | dependencies = (
193 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
194 | );
195 | name = todolistTests;
196 | productName = todolistTests;
197 | productReference = 00E356EE1AD99517003FC87E /* todolistTests.xctest */;
198 | productType = "com.apple.product-type.bundle.unit-test";
199 | };
200 | 13B07F861A680F5B00A75B9A /* todolist */ = {
201 | isa = PBXNativeTarget;
202 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "todolist" */;
203 | buildPhases = (
204 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
205 | FD10A7F022414F080027D42C /* Start Packager */,
206 | 13B07F871A680F5B00A75B9A /* Sources */,
207 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
208 | 13B07F8E1A680F5B00A75B9A /* Resources */,
209 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
210 | 668498E87D6945E0C5AE38D9 /* [CP] Copy Pods Resources */,
211 | 2495BD4C405E9DEA0BCA3906 /* [CP-User] [RNFB] Core Configuration */,
212 | );
213 | buildRules = (
214 | );
215 | dependencies = (
216 | );
217 | name = todolist;
218 | productName = todolist;
219 | productReference = 13B07F961A680F5B00A75B9A /* todolist.app */;
220 | productType = "com.apple.product-type.application";
221 | };
222 | /* End PBXNativeTarget section */
223 |
224 | /* Begin PBXProject section */
225 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
226 | isa = PBXProject;
227 | attributes = {
228 | LastUpgradeCheck = 1210;
229 | TargetAttributes = {
230 | 00E356ED1AD99517003FC87E = {
231 | CreatedOnToolsVersion = 6.2;
232 | TestTargetID = 13B07F861A680F5B00A75B9A;
233 | };
234 | 13B07F861A680F5B00A75B9A = {
235 | LastSwiftMigration = 1120;
236 | };
237 | };
238 | };
239 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "todolist" */;
240 | compatibilityVersion = "Xcode 12.0";
241 | developmentRegion = en;
242 | hasScannedForEncodings = 0;
243 | knownRegions = (
244 | en,
245 | Base,
246 | );
247 | mainGroup = 83CBB9F61A601CBA00E9B192;
248 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
249 | projectDirPath = "";
250 | projectRoot = "";
251 | targets = (
252 | 13B07F861A680F5B00A75B9A /* todolist */,
253 | 00E356ED1AD99517003FC87E /* todolistTests */,
254 | );
255 | };
256 | /* End PBXProject section */
257 |
258 | /* Begin PBXResourcesBuildPhase section */
259 | 00E356EC1AD99517003FC87E /* Resources */ = {
260 | isa = PBXResourcesBuildPhase;
261 | buildActionMask = 2147483647;
262 | files = (
263 | );
264 | runOnlyForDeploymentPostprocessing = 0;
265 | };
266 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
267 | isa = PBXResourcesBuildPhase;
268 | buildActionMask = 2147483647;
269 | files = (
270 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
271 | 0137F9A32B2FD626003D1F54 /* GoogleService-Info.plist in Resources */,
272 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
273 | 0EC28523F51C488BBB970083 /* NunitoSans_10pt-Bold.ttf in Resources */,
274 | B64CFF0E95F94F498EC7F521 /* NunitoSans_10pt-Light.ttf in Resources */,
275 | 7139A0172AED41D08929C1FE /* NunitoSans_10pt-Medium.ttf in Resources */,
276 | 4125BBAFAC224B9586A903B5 /* NunitoSans_10pt-Regular.ttf in Resources */,
277 | A7878F95211E4B6D98DEC526 /* NunitoSans_10pt-SemiBold.ttf in Resources */,
278 | );
279 | runOnlyForDeploymentPostprocessing = 0;
280 | };
281 | /* End PBXResourcesBuildPhase section */
282 |
283 | /* Begin PBXShellScriptBuildPhase section */
284 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
285 | isa = PBXShellScriptBuildPhase;
286 | buildActionMask = 2147483647;
287 | files = (
288 | );
289 | inputPaths = (
290 | "$(SRCROOT)/.xcode.env.local",
291 | "$(SRCROOT)/.xcode.env",
292 | );
293 | name = "Bundle React Native code and images";
294 | outputPaths = (
295 | );
296 | runOnlyForDeploymentPostprocessing = 0;
297 | shellPath = /bin/sh;
298 | shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
299 | };
300 | 2495BD4C405E9DEA0BCA3906 /* [CP-User] [RNFB] Core Configuration */ = {
301 | isa = PBXShellScriptBuildPhase;
302 | buildActionMask = 2147483647;
303 | files = (
304 | );
305 | inputPaths = (
306 | "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
307 | );
308 | name = "[CP-User] [RNFB] Core Configuration";
309 | runOnlyForDeploymentPostprocessing = 0;
310 | shellPath = /bin/sh;
311 | 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 -Ku -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 | /usr/bin/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 -Ku -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || 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.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\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.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.analytics_registration_with_ad_network_enabled\n _ANALYTICS_REGISTRATION_WITH_AD_NETWORK=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_registration_with_ad_network_enabled\")\n if [[ $_ANALYTICS_REGISTRATION_WITH_AD_NETWORK ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_REGISTRATION_WITH_AD_NETWORK_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_REGISTRATION_WITH_AD_NETWORK\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\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.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\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.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\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\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";
312 | };
313 | 668498E87D6945E0C5AE38D9 /* [CP] Copy Pods Resources */ = {
314 | isa = PBXShellScriptBuildPhase;
315 | buildActionMask = 2147483647;
316 | files = (
317 | );
318 | inputFileListPaths = (
319 | "${PODS_ROOT}/Target Support Files/Pods-todolist/Pods-todolist-resources-${CONFIGURATION}-input-files.xcfilelist",
320 | );
321 | name = "[CP] Copy Pods Resources";
322 | outputFileListPaths = (
323 | "${PODS_ROOT}/Target Support Files/Pods-todolist/Pods-todolist-resources-${CONFIGURATION}-output-files.xcfilelist",
324 | );
325 | runOnlyForDeploymentPostprocessing = 0;
326 | shellPath = /bin/sh;
327 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-todolist/Pods-todolist-resources.sh\"\n";
328 | showEnvVarsInLog = 0;
329 | };
330 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
331 | isa = PBXShellScriptBuildPhase;
332 | buildActionMask = 2147483647;
333 | files = (
334 | );
335 | inputFileListPaths = (
336 | );
337 | inputPaths = (
338 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
339 | "${PODS_ROOT}/Manifest.lock",
340 | );
341 | name = "[CP] Check Pods Manifest.lock";
342 | outputFileListPaths = (
343 | );
344 | outputPaths = (
345 | "$(DERIVED_FILE_DIR)/Pods-todolist-todolistTests-checkManifestLockResult.txt",
346 | );
347 | runOnlyForDeploymentPostprocessing = 0;
348 | shellPath = /bin/sh;
349 | 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";
350 | showEnvVarsInLog = 0;
351 | };
352 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
353 | isa = PBXShellScriptBuildPhase;
354 | buildActionMask = 2147483647;
355 | files = (
356 | );
357 | inputFileListPaths = (
358 | );
359 | inputPaths = (
360 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
361 | "${PODS_ROOT}/Manifest.lock",
362 | );
363 | name = "[CP] Check Pods Manifest.lock";
364 | outputFileListPaths = (
365 | );
366 | outputPaths = (
367 | "$(DERIVED_FILE_DIR)/Pods-todolist-checkManifestLockResult.txt",
368 | );
369 | runOnlyForDeploymentPostprocessing = 0;
370 | shellPath = /bin/sh;
371 | 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";
372 | showEnvVarsInLog = 0;
373 | };
374 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
375 | isa = PBXShellScriptBuildPhase;
376 | buildActionMask = 2147483647;
377 | files = (
378 | );
379 | inputFileListPaths = (
380 | "${PODS_ROOT}/Target Support Files/Pods-todolist-todolistTests/Pods-todolist-todolistTests-resources-${CONFIGURATION}-input-files.xcfilelist",
381 | );
382 | name = "[CP] Copy Pods Resources";
383 | outputFileListPaths = (
384 | "${PODS_ROOT}/Target Support Files/Pods-todolist-todolistTests/Pods-todolist-todolistTests-resources-${CONFIGURATION}-output-files.xcfilelist",
385 | );
386 | runOnlyForDeploymentPostprocessing = 0;
387 | shellPath = /bin/sh;
388 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-todolist-todolistTests/Pods-todolist-todolistTests-resources.sh\"\n";
389 | showEnvVarsInLog = 0;
390 | };
391 | FD10A7F022414F080027D42C /* Start Packager */ = {
392 | isa = PBXShellScriptBuildPhase;
393 | buildActionMask = 2147483647;
394 | files = (
395 | );
396 | inputFileListPaths = (
397 | );
398 | inputPaths = (
399 | );
400 | name = "Start Packager";
401 | outputFileListPaths = (
402 | );
403 | outputPaths = (
404 | );
405 | runOnlyForDeploymentPostprocessing = 0;
406 | shellPath = /bin/sh;
407 | 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";
408 | showEnvVarsInLog = 0;
409 | };
410 | /* End PBXShellScriptBuildPhase section */
411 |
412 | /* Begin PBXSourcesBuildPhase section */
413 | 00E356EA1AD99517003FC87E /* Sources */ = {
414 | isa = PBXSourcesBuildPhase;
415 | buildActionMask = 2147483647;
416 | files = (
417 | 00E356F31AD99517003FC87E /* todolistTests.m in Sources */,
418 | );
419 | runOnlyForDeploymentPostprocessing = 0;
420 | };
421 | 13B07F871A680F5B00A75B9A /* Sources */ = {
422 | isa = PBXSourcesBuildPhase;
423 | buildActionMask = 2147483647;
424 | files = (
425 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
426 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
427 | );
428 | runOnlyForDeploymentPostprocessing = 0;
429 | };
430 | /* End PBXSourcesBuildPhase section */
431 |
432 | /* Begin PBXTargetDependency section */
433 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
434 | isa = PBXTargetDependency;
435 | target = 13B07F861A680F5B00A75B9A /* todolist */;
436 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
437 | };
438 | /* End PBXTargetDependency section */
439 |
440 | /* Begin XCBuildConfiguration section */
441 | 00E356F61AD99517003FC87E /* Debug */ = {
442 | isa = XCBuildConfiguration;
443 | baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-todolist-todolistTests.debug.xcconfig */;
444 | buildSettings = {
445 | BUNDLE_LOADER = "$(TEST_HOST)";
446 | GCC_PREPROCESSOR_DEFINITIONS = (
447 | "DEBUG=1",
448 | "$(inherited)",
449 | );
450 | INFOPLIST_FILE = todolistTests/Info.plist;
451 | IPHONEOS_DEPLOYMENT_TARGET = 12.4;
452 | LD_RUNPATH_SEARCH_PATHS = (
453 | "$(inherited)",
454 | "@executable_path/Frameworks",
455 | "@loader_path/Frameworks",
456 | );
457 | OTHER_LDFLAGS = (
458 | "-ObjC",
459 | "-lc++",
460 | "$(inherited)",
461 | );
462 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
463 | PRODUCT_NAME = "$(TARGET_NAME)";
464 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/todolist.app/todolist";
465 | };
466 | name = Debug;
467 | };
468 | 00E356F71AD99517003FC87E /* Release */ = {
469 | isa = XCBuildConfiguration;
470 | baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-todolist-todolistTests.release.xcconfig */;
471 | buildSettings = {
472 | BUNDLE_LOADER = "$(TEST_HOST)";
473 | COPY_PHASE_STRIP = NO;
474 | INFOPLIST_FILE = todolistTests/Info.plist;
475 | IPHONEOS_DEPLOYMENT_TARGET = 12.4;
476 | LD_RUNPATH_SEARCH_PATHS = (
477 | "$(inherited)",
478 | "@executable_path/Frameworks",
479 | "@loader_path/Frameworks",
480 | );
481 | OTHER_LDFLAGS = (
482 | "-ObjC",
483 | "-lc++",
484 | "$(inherited)",
485 | );
486 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
487 | PRODUCT_NAME = "$(TARGET_NAME)";
488 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/todolist.app/todolist";
489 | };
490 | name = Release;
491 | };
492 | 13B07F941A680F5B00A75B9A /* Debug */ = {
493 | isa = XCBuildConfiguration;
494 | baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-todolist.debug.xcconfig */;
495 | buildSettings = {
496 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
497 | CLANG_ENABLE_MODULES = YES;
498 | CURRENT_PROJECT_VERSION = 1;
499 | ENABLE_BITCODE = NO;
500 | INFOPLIST_FILE = todolist/Info.plist;
501 | LD_RUNPATH_SEARCH_PATHS = (
502 | "$(inherited)",
503 | "@executable_path/Frameworks",
504 | );
505 | MARKETING_VERSION = 1.0;
506 | OTHER_LDFLAGS = (
507 | "$(inherited)",
508 | "-ObjC",
509 | "-lc++",
510 | );
511 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
512 | PRODUCT_NAME = todolist;
513 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
514 | SWIFT_VERSION = 5.0;
515 | VERSIONING_SYSTEM = "apple-generic";
516 | };
517 | name = Debug;
518 | };
519 | 13B07F951A680F5B00A75B9A /* Release */ = {
520 | isa = XCBuildConfiguration;
521 | baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-todolist.release.xcconfig */;
522 | buildSettings = {
523 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
524 | CLANG_ENABLE_MODULES = YES;
525 | CURRENT_PROJECT_VERSION = 1;
526 | INFOPLIST_FILE = todolist/Info.plist;
527 | LD_RUNPATH_SEARCH_PATHS = (
528 | "$(inherited)",
529 | "@executable_path/Frameworks",
530 | );
531 | MARKETING_VERSION = 1.0;
532 | OTHER_LDFLAGS = (
533 | "$(inherited)",
534 | "-ObjC",
535 | "-lc++",
536 | );
537 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
538 | PRODUCT_NAME = todolist;
539 | SWIFT_VERSION = 5.0;
540 | VERSIONING_SYSTEM = "apple-generic";
541 | };
542 | name = Release;
543 | };
544 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
545 | isa = XCBuildConfiguration;
546 | buildSettings = {
547 | ALWAYS_SEARCH_USER_PATHS = NO;
548 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
549 | CLANG_CXX_LANGUAGE_STANDARD = "c++17";
550 | CLANG_CXX_LIBRARY = "libc++";
551 | CLANG_ENABLE_MODULES = YES;
552 | CLANG_ENABLE_OBJC_ARC = YES;
553 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
554 | CLANG_WARN_BOOL_CONVERSION = YES;
555 | CLANG_WARN_COMMA = YES;
556 | CLANG_WARN_CONSTANT_CONVERSION = YES;
557 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
558 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
559 | CLANG_WARN_EMPTY_BODY = YES;
560 | CLANG_WARN_ENUM_CONVERSION = YES;
561 | CLANG_WARN_INFINITE_RECURSION = YES;
562 | CLANG_WARN_INT_CONVERSION = YES;
563 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
564 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
565 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
566 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
567 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
568 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
569 | CLANG_WARN_STRICT_PROTOTYPES = YES;
570 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
571 | CLANG_WARN_UNREACHABLE_CODE = YES;
572 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
573 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
574 | COPY_PHASE_STRIP = NO;
575 | ENABLE_STRICT_OBJC_MSGSEND = YES;
576 | ENABLE_TESTABILITY = YES;
577 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
578 | GCC_C_LANGUAGE_STANDARD = gnu99;
579 | GCC_DYNAMIC_NO_PIC = NO;
580 | GCC_NO_COMMON_BLOCKS = YES;
581 | GCC_OPTIMIZATION_LEVEL = 0;
582 | GCC_PREPROCESSOR_DEFINITIONS = (
583 | "DEBUG=1",
584 | "$(inherited)",
585 | _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
586 | );
587 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
588 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
589 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
590 | GCC_WARN_UNDECLARED_SELECTOR = YES;
591 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
592 | GCC_WARN_UNUSED_FUNCTION = YES;
593 | GCC_WARN_UNUSED_VARIABLE = YES;
594 | HEADER_SEARCH_PATHS = (
595 | "$(inherited)",
596 | "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
597 | "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
598 | "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
599 | "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
600 | "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
601 | );
602 | IPHONEOS_DEPLOYMENT_TARGET = 12.4;
603 | LD_RUNPATH_SEARCH_PATHS = (
604 | /usr/lib/swift,
605 | "$(inherited)",
606 | );
607 | LIBRARY_SEARCH_PATHS = (
608 | "\"$(SDKROOT)/usr/lib/swift\"",
609 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
610 | "\"$(inherited)\"",
611 | );
612 | MTL_ENABLE_DEBUG_INFO = YES;
613 | ONLY_ACTIVE_ARCH = YES;
614 | OTHER_CFLAGS = "$(inherited)";
615 | OTHER_CPLUSPLUSFLAGS = (
616 | "$(OTHER_CFLAGS)",
617 | "-DFOLLY_NO_CONFIG",
618 | "-DFOLLY_MOBILE=1",
619 | "-DFOLLY_USE_LIBCPP=1",
620 | );
621 | OTHER_LDFLAGS = (
622 | "$(inherited)",
623 | "-Wl",
624 | "-ld_classic",
625 | );
626 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
627 | SDKROOT = iphoneos;
628 | };
629 | name = Debug;
630 | };
631 | 83CBBA211A601CBA00E9B192 /* Release */ = {
632 | isa = XCBuildConfiguration;
633 | buildSettings = {
634 | ALWAYS_SEARCH_USER_PATHS = NO;
635 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
636 | CLANG_CXX_LANGUAGE_STANDARD = "c++17";
637 | CLANG_CXX_LIBRARY = "libc++";
638 | CLANG_ENABLE_MODULES = YES;
639 | CLANG_ENABLE_OBJC_ARC = YES;
640 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
641 | CLANG_WARN_BOOL_CONVERSION = YES;
642 | CLANG_WARN_COMMA = YES;
643 | CLANG_WARN_CONSTANT_CONVERSION = YES;
644 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
645 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
646 | CLANG_WARN_EMPTY_BODY = YES;
647 | CLANG_WARN_ENUM_CONVERSION = YES;
648 | CLANG_WARN_INFINITE_RECURSION = YES;
649 | CLANG_WARN_INT_CONVERSION = YES;
650 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
651 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
652 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
653 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
654 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
655 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
656 | CLANG_WARN_STRICT_PROTOTYPES = YES;
657 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
658 | CLANG_WARN_UNREACHABLE_CODE = YES;
659 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
660 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
661 | COPY_PHASE_STRIP = YES;
662 | ENABLE_NS_ASSERTIONS = NO;
663 | ENABLE_STRICT_OBJC_MSGSEND = YES;
664 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "";
665 | GCC_C_LANGUAGE_STANDARD = gnu99;
666 | GCC_NO_COMMON_BLOCKS = YES;
667 | GCC_PREPROCESSOR_DEFINITIONS = (
668 | "$(inherited)",
669 | _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION,
670 | );
671 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
672 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
673 | GCC_WARN_UNDECLARED_SELECTOR = YES;
674 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
675 | GCC_WARN_UNUSED_FUNCTION = YES;
676 | GCC_WARN_UNUSED_VARIABLE = YES;
677 | HEADER_SEARCH_PATHS = (
678 | "$(inherited)",
679 | "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers",
680 | "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon/ReactCommon.framework/Headers/react/nativemodule/core",
681 | "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon-Samples/ReactCommon_Samples.framework/Headers/platform/ios",
682 | "${PODS_CONFIGURATION_BUILD_DIR}/React-NativeModulesApple/React_NativeModulesApple.framework/Headers",
683 | "${PODS_CONFIGURATION_BUILD_DIR}/React-graphics/React_graphics.framework/Headers/react/renderer/graphics/platform/ios",
684 | );
685 | IPHONEOS_DEPLOYMENT_TARGET = 12.4;
686 | LD_RUNPATH_SEARCH_PATHS = (
687 | /usr/lib/swift,
688 | "$(inherited)",
689 | );
690 | LIBRARY_SEARCH_PATHS = (
691 | "\"$(SDKROOT)/usr/lib/swift\"",
692 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
693 | "\"$(inherited)\"",
694 | );
695 | MTL_ENABLE_DEBUG_INFO = NO;
696 | OTHER_CFLAGS = "$(inherited)";
697 | OTHER_CPLUSPLUSFLAGS = (
698 | "$(OTHER_CFLAGS)",
699 | "-DFOLLY_NO_CONFIG",
700 | "-DFOLLY_MOBILE=1",
701 | "-DFOLLY_USE_LIBCPP=1",
702 | );
703 | OTHER_LDFLAGS = (
704 | "$(inherited)",
705 | "-Wl",
706 | "-ld_classic",
707 | );
708 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
709 | SDKROOT = iphoneos;
710 | VALIDATE_PRODUCT = YES;
711 | };
712 | name = Release;
713 | };
714 | /* End XCBuildConfiguration section */
715 |
716 | /* Begin XCConfigurationList section */
717 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "todolistTests" */ = {
718 | isa = XCConfigurationList;
719 | buildConfigurations = (
720 | 00E356F61AD99517003FC87E /* Debug */,
721 | 00E356F71AD99517003FC87E /* Release */,
722 | );
723 | defaultConfigurationIsVisible = 0;
724 | defaultConfigurationName = Release;
725 | };
726 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "todolist" */ = {
727 | isa = XCConfigurationList;
728 | buildConfigurations = (
729 | 13B07F941A680F5B00A75B9A /* Debug */,
730 | 13B07F951A680F5B00A75B9A /* Release */,
731 | );
732 | defaultConfigurationIsVisible = 0;
733 | defaultConfigurationName = Release;
734 | };
735 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "todolist" */ = {
736 | isa = XCConfigurationList;
737 | buildConfigurations = (
738 | 83CBBA201A601CBA00E9B192 /* Debug */,
739 | 83CBBA211A601CBA00E9B192 /* Release */,
740 | );
741 | defaultConfigurationIsVisible = 0;
742 | defaultConfigurationName = Release;
743 | };
744 | /* End XCConfigurationList section */
745 | };
746 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
747 | }
748 |
--------------------------------------------------------------------------------