--- .bundle/config
+++ .bundle/config
... | ... | @@ -1,2 +1,2 @@ |
1 |
-BUNDLE_PATH: "vendor/bundle" |
|
2 |
-BUNDLE_FORCE_RUBY_PLATFORM: 1 |
|
1 |
+BUNDLE_PATH: "vendor/bundle" |
|
2 |
+BUNDLE_FORCE_RUBY_PLATFORM: 1 |
--- .eslintrc.js
+++ .eslintrc.js
... | ... | @@ -1,12 +1,4 @@ |
1 |
-module.exports = { |
|
2 |
- root: true, |
|
3 |
- extends: ['plugin:prettier/recommended', '@react-native'], |
|
4 |
- rules: { |
|
5 |
- 'prettier/prettier': [ |
|
6 |
- 'error', |
|
7 |
- { |
|
8 |
- endOfLine: 'auto', |
|
9 |
- }, |
|
10 |
- ], |
|
11 |
- }, |
|
12 |
-}; |
|
1 |
+module.exports = { |
|
2 |
+ root: true, |
|
3 |
+ extends: '@react-native', |
|
4 |
+}; |
--- .gitignore
+++ .gitignore
... | ... | @@ -1,74 +1,74 @@ |
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 |
-**/.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 |
-**/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 |
- |
|
68 |
-# Yarn |
|
69 |
-.yarn/* |
|
70 |
-!.yarn/patches |
|
71 |
-!.yarn/plugins |
|
72 |
-!.yarn/releases |
|
73 |
-!.yarn/sdks |
|
74 |
-!.yarn/versions |
|
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 |
+**/.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 |
+**/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 |
+ |
|
68 |
+# Yarn |
|
69 |
+.yarn/* |
|
70 |
+!.yarn/patches |
|
71 |
+!.yarn/plugins |
|
72 |
+!.yarn/releases |
|
73 |
+!.yarn/sdks |
|
74 |
+!.yarn/versions |
--- .prettierrc.js
+++ .prettierrc.js
... | ... | @@ -1,8 +1,7 @@ |
1 |
-module.exports = { |
|
2 |
- arrowParens: 'avoid', |
|
3 |
- bracketSameLine: true, |
|
4 |
- bracketSpacing: false, |
|
5 |
- singleQuote: true, |
|
6 |
- trailingComma: 'all', |
|
7 |
- endOfLine: 'auto', |
|
8 |
-}; |
|
1 |
+module.exports = { |
|
2 |
+ arrowParens: 'avoid', |
|
3 |
+ bracketSameLine: true, |
|
4 |
+ bracketSpacing: false, |
|
5 |
+ singleQuote: true, |
|
6 |
+ trailingComma: 'all', |
|
7 |
+}; |
--- .watchmanconfig
+++ .watchmanconfig
... | ... | @@ -1,1 +1,1 @@ |
1 |
-{} |
|
1 |
+{} |
--- App.js
+++ App.js
... | ... | @@ -1,7 +1,8 @@ |
1 |
- |
|
2 |
-import React from 'react'; |
|
1 |
+import React, { useContext } from 'react'; |
|
3 | 2 |
import { NavigationContainer } from '@react-navigation/native'; |
4 | 3 |
import { createStackNavigator } from '@react-navigation/stack'; |
4 |
+import { AuthProvider, AuthContext } from './src/context/AuthContext'; |
|
5 |
+import { LocationProvider } from './src/context/LocationProvider'; |
|
5 | 6 |
|
6 | 7 |
import LoginScreen from './src/screen/LoginScreen'; |
7 | 8 |
import SelectionScreen from './src/screen/SelectionScreen'; |
... | ... | @@ -9,20 +10,46 @@ |
9 | 10 |
import GpsScreen from './src/screen/GpsScreen'; |
10 | 11 |
import AnalysisScreen from './src/screen/AnalysisScreen'; |
11 | 12 |
import AgreementScreen from './src/screen/AgreementScreen'; |
13 |
+import History from './src/screen/History'; |
|
12 | 14 |
|
13 |
-const Stack = createStackNavigator(); |
|
15 |
+const AuthStack = createStackNavigator(); |
|
16 |
+const AppStack = createStackNavigator(); |
|
14 | 17 |
|
15 |
-export default function App() { |
|
18 |
+const AuthNavigator = () => ( |
|
19 |
+ <AuthStack.Navigator> |
|
20 |
+ <AuthStack.Screen name="Login" component={LoginScreen} options={{ headerShown: false }} /> |
|
21 |
+ <AuthStack.Screen name="Agreement" component={AgreementScreen} options={{ title: '회원가입' }} /> |
|
22 |
+ </AuthStack.Navigator> |
|
23 |
+); |
|
24 |
+ |
|
25 |
+const MainNavigator = () => ( |
|
26 |
+ <AppStack.Navigator> |
|
27 |
+ <AppStack.Screen name="Selection" component={SelectionScreen} options={{ title: '운행 선택' }} /> |
|
28 |
+ <AppStack.Screen name="Camera" component={CameraScreen} options={{ title: '카메라 분석' }} /> |
|
29 |
+ <AppStack.Screen name="Gps" component={GpsScreen} options={{ title: '운행' }} /> |
|
30 |
+ <AppStack.Screen name="Analysis" component={AnalysisScreen} options={{ title: '분석결과' }} /> |
|
31 |
+ <AppStack.Screen name="History" component={History} options={{ title: '히스토리' }} /> |
|
32 |
+ </AppStack.Navigator> |
|
33 |
+); |
|
34 |
+ |
|
35 |
+const AppContent = () => { |
|
36 |
+ const { isLoggedIn, loading } = useContext(AuthContext); |
|
37 |
+ |
|
38 |
+ if (loading) { |
|
39 |
+ return null; |
|
40 |
+ } |
|
41 |
+ |
|
16 | 42 |
return ( |
17 | 43 |
<NavigationContainer> |
18 |
- <Stack.Navigator initialRouteName="Login"> |
|
19 |
- <Stack.Screen name="Login" component={LoginScreen} /> |
|
20 |
- <Stack.Screen name="Selection" component={SelectionScreen} /> |
|
21 |
- <Stack.Screen name="Camera" component={CameraScreen} /> |
|
22 |
- <Stack.Screen name="Gps" component={GpsScreen} /> |
|
23 |
- <Stack.Screen name="Analysis" component={AnalysisScreen} /> |
|
24 |
- <Stack.Screen name="Agreement" component={AgreementScreen} /> |
|
25 |
- </Stack.Navigator> |
|
44 |
+ {isLoggedIn ? <MainNavigator /> : <AuthNavigator />} |
|
26 | 45 |
</NavigationContainer> |
27 | 46 |
); |
28 |
-}(파일 끝에 줄바꿈 문자 없음) |
|
47 |
+}; |
|
48 |
+ |
|
49 |
+export default () => ( |
|
50 |
+ <LocationProvider> |
|
51 |
+ <AuthProvider> |
|
52 |
+ <AppContent /> |
|
53 |
+ </AuthProvider> |
|
54 |
+ </LocationProvider> |
|
55 |
+); |
--- Gemfile
+++ Gemfile
... | ... | @@ -1,9 +1,9 @@ |
1 |
-source 'https://rubygems.org' |
|
2 |
- |
|
3 |
-# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version |
|
4 |
-ruby ">= 2.6.10" |
|
5 |
- |
|
6 |
-# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper |
|
7 |
-# bound in the template on Cocoapods with next React Native release. |
|
8 |
-gem 'cocoapods', '>= 1.13', '< 1.15' |
|
9 |
-gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' |
|
1 |
+source 'https://rubygems.org' |
|
2 |
+ |
|
3 |
+# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version |
|
4 |
+ruby ">= 2.6.10" |
|
5 |
+ |
|
6 |
+# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper |
|
7 |
+# bound in the template on Cocoapods with next React Native release. |
|
8 |
+gem 'cocoapods', '>= 1.13', '< 1.15' |
|
9 |
+gem 'activesupport', '>= 6.1.7.5', '< 7.1.0' |
+++ Gemfile.lock
... | ... | @@ -0,0 +1,105 @@ |
1 | +GEM | |
2 | + remote: https://rubygems.org/ | |
3 | + specs: | |
4 | + CFPropertyList (3.0.7) | |
5 | + base64 | |
6 | + nkf | |
7 | + rexml | |
8 | + activesupport (7.0.8.4) | |
9 | + concurrent-ruby (~> 1.0, >= 1.0.2) | |
10 | + i18n (>= 1.6, < 2) | |
11 | + minitest (>= 5.1) | |
12 | + tzinfo (~> 2.0) | |
13 | + addressable (2.8.7) | |
14 | + public_suffix (>= 2.0.2, < 7.0) | |
15 | + algoliasearch (1.27.5) | |
16 | + httpclient (~> 2.8, >= 2.8.3) | |
17 | + json (>= 1.5.1) | |
18 | + atomos (0.1.3) | |
19 | + base64 (0.2.0) | |
20 | + claide (1.1.0) | |
21 | + cocoapods (1.14.3) | |
22 | + addressable (~> 2.8) | |
23 | + claide (>= 1.0.2, < 2.0) | |
24 | + cocoapods-core (= 1.14.3) | |
25 | + cocoapods-deintegrate (>= 1.0.3, < 2.0) | |
26 | + cocoapods-downloader (>= 2.1, < 3.0) | |
27 | + cocoapods-plugins (>= 1.0.0, < 2.0) | |
28 | + cocoapods-search (>= 1.0.0, < 2.0) | |
29 | + cocoapods-trunk (>= 1.6.0, < 2.0) | |
30 | + cocoapods-try (>= 1.1.0, < 2.0) | |
31 | + colored2 (~> 3.1) | |
32 | + escape (~> 0.0.4) | |
33 | + fourflusher (>= 2.3.0, < 3.0) | |
34 | + gh_inspector (~> 1.0) | |
35 | + molinillo (~> 0.8.0) | |
36 | + nap (~> 1.0) | |
37 | + ruby-macho (>= 2.3.0, < 3.0) | |
38 | + xcodeproj (>= 1.23.0, < 2.0) | |
39 | + cocoapods-core (1.14.3) | |
40 | + activesupport (>= 5.0, < 8) | |
41 | + addressable (~> 2.8) | |
42 | + algoliasearch (~> 1.0) | |
43 | + concurrent-ruby (~> 1.1) | |
44 | + fuzzy_match (~> 2.0.4) | |
45 | + nap (~> 1.0) | |
46 | + netrc (~> 0.11) | |
47 | + public_suffix (~> 4.0) | |
48 | + typhoeus (~> 1.0) | |
49 | + cocoapods-deintegrate (1.0.5) | |
50 | + cocoapods-downloader (2.1) | |
51 | + cocoapods-plugins (1.0.0) | |
52 | + nap | |
53 | + cocoapods-search (1.0.1) | |
54 | + cocoapods-trunk (1.6.0) | |
55 | + nap (>= 0.8, < 2.0) | |
56 | + netrc (~> 0.11) | |
57 | + cocoapods-try (1.2.0) | |
58 | + colored2 (3.1.2) | |
59 | + concurrent-ruby (1.3.3) | |
60 | + escape (0.0.4) | |
61 | + ethon (0.16.0) | |
62 | + ffi (>= 1.15.0) | |
63 | + ffi (1.17.0) | |
64 | + fourflusher (2.3.1) | |
65 | + fuzzy_match (2.0.4) | |
66 | + gh_inspector (1.1.3) | |
67 | + httpclient (2.8.3) | |
68 | + i18n (1.14.5) | |
69 | + concurrent-ruby (~> 1.0) | |
70 | + json (2.7.2) | |
71 | + minitest (5.24.1) | |
72 | + molinillo (0.8.0) | |
73 | + nanaimo (0.3.0) | |
74 | + nap (1.1.0) | |
75 | + netrc (0.11.0) | |
76 | + nkf (0.2.0) | |
77 | + public_suffix (4.0.7) | |
78 | + rexml (3.2.9) | |
79 | + strscan | |
80 | + ruby-macho (2.5.1) | |
81 | + strscan (3.1.0) | |
82 | + typhoeus (1.4.1) | |
83 | + ethon (>= 0.9.0) | |
84 | + tzinfo (2.0.6) | |
85 | + concurrent-ruby (~> 1.0) | |
86 | + xcodeproj (1.24.0) | |
87 | + CFPropertyList (>= 2.3.3, < 4.0) | |
88 | + atomos (~> 0.1.3) | |
89 | + claide (>= 1.0.2, < 2.0) | |
90 | + colored2 (~> 3.1) | |
91 | + nanaimo (~> 0.3.0) | |
92 | + rexml (~> 3.2.4) | |
93 | + | |
94 | +PLATFORMS | |
95 | + ruby | |
96 | + | |
97 | +DEPENDENCIES | |
98 | + activesupport (>= 6.1.7.5, < 7.1.0) | |
99 | + cocoapods (>= 1.13, < 1.15) | |
100 | + | |
101 | +RUBY VERSION | |
102 | + ruby 3.3.4p94 | |
103 | + | |
104 | +BUNDLED WITH | |
105 | + 2.5.11 |
--- README.md
+++ README.md
... | ... | @@ -1,79 +1,79 @@ |
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 <kbd>R</kbd> key twice or select **"Reload"** from the **Developer Menu** (<kbd>Ctrl</kbd> + <kbd>M</kbd> (on Window and Linux) or <kbd>Cmd ⌘</kbd> + <kbd>M</kbd> (on macOS)) to see your changes! |
|
55 |
- |
|
56 |
- For **iOS**: Hit <kbd>Cmd ⌘</kbd> + <kbd>R</kbd> 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. |
|
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 <kbd>R</kbd> key twice or select **"Reload"** from the **Developer Menu** (<kbd>Ctrl</kbd> + <kbd>M</kbd> (on Window and Linux) or <kbd>Cmd ⌘</kbd> + <kbd>M</kbd> (on macOS)) to see your changes! |
|
55 |
+ |
|
56 |
+ For **iOS**: Hit <kbd>Cmd ⌘</kbd> + <kbd>R</kbd> 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. |
--- __tests__/App.test.tsx
+++ __tests__/App.test.tsx
... | ... | @@ -1,17 +1,17 @@ |
1 |
-/** |
|
2 |
- * @format |
|
3 |
- */ |
|
4 |
- |
|
5 |
-import 'react-native'; |
|
6 |
-import React from 'react'; |
|
7 |
-import App from '../App'; |
|
8 |
- |
|
9 |
-// Note: import explicitly to use the types shipped with jest. |
|
10 |
-import {it} from '@jest/globals'; |
|
11 |
- |
|
12 |
-// Note: test renderer must be required after react-native. |
|
13 |
-import renderer from 'react-test-renderer'; |
|
14 |
- |
|
15 |
-it('renders correctly', () => { |
|
16 |
- renderer.create(<App />); |
|
17 |
-}); |
|
1 |
+/** |
|
2 |
+ * @format |
|
3 |
+ */ |
|
4 |
+ |
|
5 |
+import 'react-native'; |
|
6 |
+import React from 'react'; |
|
7 |
+import App from '../App'; |
|
8 |
+ |
|
9 |
+// Note: import explicitly to use the types shipped with jest. |
|
10 |
+import {it} from '@jest/globals'; |
|
11 |
+ |
|
12 |
+// Note: test renderer must be required after react-native. |
|
13 |
+import renderer from 'react-test-renderer'; |
|
14 |
+ |
|
15 |
+it('renders correctly', () => { |
|
16 |
+ renderer.create(<App />); |
|
17 |
+}); |
--- android/app/build.gradle
+++ android/app/build.gradle
... | ... | @@ -1,119 +1,118 @@ |
1 |
-apply plugin: "com.android.application" |
|
2 |
-apply plugin: "org.jetbrains.kotlin.android" |
|
3 |
-apply plugin: "com.facebook.react" |
|
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 |
- buildToolsVersion rootProject.ext.buildToolsVersion |
|
75 |
- compileSdk rootProject.ext.compileSdkVersion |
|
76 |
- |
|
77 |
- namespace "com.send_location_ta" |
|
78 |
- defaultConfig { |
|
79 |
- applicationId "com.send_location_ta" |
|
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 |
- if (hermesEnabled.toBoolean()) { |
|
112 |
- implementation("com.facebook.react:hermes-android") |
|
113 |
- } else { |
|
114 |
- implementation jscFlavor |
|
115 |
- } |
|
116 |
-} |
|
117 |
- |
|
118 |
-apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) |
|
119 |
-apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" |
|
1 |
+apply plugin: "com.android.application" |
|
2 |
+apply plugin: "org.jetbrains.kotlin.android" |
|
3 |
+apply plugin: "com.facebook.react" |
|
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 |
+ buildToolsVersion rootProject.ext.buildToolsVersion |
|
75 |
+ compileSdk rootProject.ext.compileSdkVersion |
|
76 |
+ |
|
77 |
+ namespace "com.kic" |
|
78 |
+ defaultConfig { |
|
79 |
+ applicationId "com.kic" |
|
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 |
+ if (hermesEnabled.toBoolean()) { |
|
112 |
+ implementation("com.facebook.react:hermes-android") |
|
113 |
+ } else { |
|
114 |
+ implementation jscFlavor |
|
115 |
+ } |
|
116 |
+} |
|
117 |
+ |
|
118 |
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) |
--- android/app/proguard-rules.pro
+++ android/app/proguard-rules.pro
... | ... | @@ -1,10 +1,10 @@ |
1 |
-# Add project specific ProGuard rules here. |
|
2 |
-# By default, the flags in this file are appended to flags specified |
|
3 |
-# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt |
|
4 |
-# You can edit the include path and order by changing the proguardFiles |
|
5 |
-# directive in build.gradle. |
|
6 |
-# |
|
7 |
-# For more details, see |
|
8 |
-# http://developer.android.com/guide/developing/tools/proguard.html |
|
9 |
- |
|
10 |
-# Add any project specific keep options here: |
|
1 |
+# Add project specific ProGuard rules here. |
|
2 |
+# By default, the flags in this file are appended to flags specified |
|
3 |
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt |
|
4 |
+# You can edit the include path and order by changing the proguardFiles |
|
5 |
+# directive in build.gradle. |
|
6 |
+# |
|
7 |
+# For more details, see |
|
8 |
+# http://developer.android.com/guide/developing/tools/proguard.html |
|
9 |
+ |
|
10 |
+# Add any project specific keep options here: |
--- android/app/src/debug/AndroidManifest.xml
+++ android/app/src/debug/AndroidManifest.xml
... | ... | @@ -1,9 +1,9 @@ |
1 |
-<?xml version="1.0" encoding="utf-8"?> |
|
2 |
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|
3 |
- xmlns:tools="http://schemas.android.com/tools"> |
|
4 |
- |
|
5 |
- <application |
|
6 |
- android:usesCleartextTraffic="true" |
|
7 |
- tools:targetApi="28" |
|
8 |
- tools:ignore="GoogleAppIndexingWarning"/> |
|
9 |
-</manifest> |
|
1 |
+<?xml version="1.0" encoding="utf-8"?> |
|
2 |
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|
3 |
+ xmlns:tools="http://schemas.android.com/tools"> |
|
4 |
+ |
|
5 |
+ <application |
|
6 |
+ android:usesCleartextTraffic="true" |
|
7 |
+ tools:targetApi="28" |
|
8 |
+ tools:ignore="GoogleAppIndexingWarning"/> |
|
9 |
+</manifest> |
--- android/app/src/main/AndroidManifest.xml
+++ android/app/src/main/AndroidManifest.xml
... | ... | @@ -1,38 +1,25 @@ |
1 |
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" |
|
2 |
-package="com.send_location_ta"> |
|
3 |
- |
|
4 |
- <uses-permission android:name="android.permission.INTERNET" /> |
|
5 |
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> |
|
6 |
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> |
|
7 |
- <uses-permission android:name="android.permission.CAMERA" /> |
|
8 |
- <uses-permission android:name="android.permission.RECORD_AUDIO" /> |
|
9 |
- <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> |
|
10 |
- <uses-permission android:name="android.permission.WAKE_LOCK" /> |
|
11 |
- <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> |
|
12 |
- |
|
13 |
- |
|
14 |
- <application |
|
15 |
- android:name=".MainApplication" |
|
16 |
- android:label="@string/app_name" |
|
17 |
- android:icon="@mipmap/ic_launcher" |
|
18 |
- android:roundIcon="@mipmap/ic_launcher_round" |
|
19 |
- android:allowBackup="false" |
|
20 |
- android:theme="@style/AppTheme" |
|
21 |
- android:exported="true" |
|
22 |
- android:requestLegacyExternalStorage="true" |
|
23 |
- android:usesCleartextTraffic="true"> |
|
24 |
- <activity |
|
25 |
- android:name=".MainActivity" |
|
26 |
- android:label="@string/app_name" |
|
27 |
- android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" |
|
28 |
- android:launchMode="singleTask" |
|
29 |
- android:windowSoftInputMode="adjustResize" |
|
30 |
- android:exported="true"> |
|
31 |
- <intent-filter> |
|
32 |
- <action android:name="android.intent.action.MAIN" /> |
|
33 |
- <category android:name="android.intent.category.LAUNCHER" /> |
|
34 |
- </intent-filter> |
|
35 |
- </activity> |
|
36 |
- <service android:name="com.asterinet.react.bgactions.RNBackgroundActionsTask" android:foregroundServiceType="shortService"/> |
|
37 |
- </application> |
|
38 |
-</manifest> |
|
1 |
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"> |
|
2 |
+ |
|
3 |
+ <uses-permission android:name="android.permission.INTERNET" /> |
|
4 |
+ |
|
5 |
+ <application |
|
6 |
+ android:name=".MainApplication" |
|
7 |
+ android:label="@string/app_name" |
|
8 |
+ android:icon="@mipmap/ic_launcher" |
|
9 |
+ android:roundIcon="@mipmap/ic_launcher_round" |
|
10 |
+ android:allowBackup="false" |
|
11 |
+ android:theme="@style/AppTheme"> |
|
12 |
+ <activity |
|
13 |
+ android:name=".MainActivity" |
|
14 |
+ android:label="@string/app_name" |
|
15 |
+ android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize|uiMode" |
|
16 |
+ android:launchMode="singleTask" |
|
17 |
+ android:windowSoftInputMode="adjustResize" |
|
18 |
+ android:exported="true"> |
|
19 |
+ <intent-filter> |
|
20 |
+ <action android:name="android.intent.action.MAIN" /> |
|
21 |
+ <category android:name="android.intent.category.LAUNCHER" /> |
|
22 |
+ </intent-filter> |
|
23 |
+ </activity> |
|
24 |
+ </application> |
|
25 |
+</manifest> |
+++ android/app/src/main/java/com/kic/MainActivity.kt
... | ... | @@ -0,0 +1,22 @@ |
1 | +package com.kic | |
2 | + | |
3 | +import com.facebook.react.ReactActivity | |
4 | +import com.facebook.react.ReactActivityDelegate | |
5 | +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled | |
6 | +import com.facebook.react.defaults.DefaultReactActivityDelegate | |
7 | + | |
8 | +class MainActivity : 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 fun getMainComponentName(): String = "kic" | |
15 | + | |
16 | + /** | |
17 | + * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] | |
18 | + * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] | |
19 | + */ | |
20 | + override fun createReactActivityDelegate(): ReactActivityDelegate = | |
21 | + DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) | |
22 | +} |
+++ android/app/src/main/java/com/kic/MainApplication.kt
... | ... | @@ -0,0 +1,43 @@ |
1 | +package com.kic | |
2 | + | |
3 | +import android.app.Application | |
4 | +import com.facebook.react.PackageList | |
5 | +import com.facebook.react.ReactApplication | |
6 | +import com.facebook.react.ReactHost | |
7 | +import com.facebook.react.ReactNativeHost | |
8 | +import com.facebook.react.ReactPackage | |
9 | +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load | |
10 | +import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost | |
11 | +import com.facebook.react.defaults.DefaultReactNativeHost | |
12 | +import com.facebook.soloader.SoLoader | |
13 | + | |
14 | +class MainApplication : Application(), ReactApplication { | |
15 | + | |
16 | + override val reactNativeHost: ReactNativeHost = | |
17 | + object : DefaultReactNativeHost(this) { | |
18 | + override fun getPackages(): List<ReactPackage> = | |
19 | + PackageList(this).packages.apply { | |
20 | + // Packages that cannot be autolinked yet can be added manually here, for example: | |
21 | + // add(MyReactNativePackage()) | |
22 | + } | |
23 | + | |
24 | + override fun getJSMainModuleName(): String = "index" | |
25 | + | |
26 | + override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG | |
27 | + | |
28 | + override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED | |
29 | + override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED | |
30 | + } | |
31 | + | |
32 | + override val reactHost: ReactHost | |
33 | + get() = getDefaultReactHost(applicationContext, reactNativeHost) | |
34 | + | |
35 | + override fun onCreate() { | |
36 | + super.onCreate() | |
37 | + SoLoader.init(this, false) | |
38 | + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { | |
39 | + // If you opted-in for the New Architecture, we load the native entry point for this app. | |
40 | + load() | |
41 | + } | |
42 | + } | |
43 | +} |
--- android/app/src/main/res/drawable/rn_edit_text_material.xml
+++ android/app/src/main/res/drawable/rn_edit_text_material.xml
... | ... | @@ -1,37 +1,37 @@ |
1 |
-<?xml version="1.0" encoding="utf-8"?> |
|
2 |
-<!-- Copyright (C) 2014 The Android Open Source Project |
|
3 |
- |
|
4 |
- Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 |
- you may not use this file except in compliance with the License. |
|
6 |
- You may obtain a copy of the License at |
|
7 |
- |
|
8 |
- http://www.apache.org/licenses/LICENSE-2.0 |
|
9 |
- |
|
10 |
- Unless required by applicable law or agreed to in writing, software |
|
11 |
- distributed under the License is distributed on an "AS IS" BASIS, |
|
12 |
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 |
- See the License for the specific language governing permissions and |
|
14 |
- limitations under the License. |
|
15 |
---> |
|
16 |
-<inset xmlns:android="http://schemas.android.com/apk/res/android" |
|
17 |
- android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" |
|
18 |
- android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" |
|
19 |
- android:insetTop="@dimen/abc_edit_text_inset_top_material" |
|
20 |
- android:insetBottom="@dimen/abc_edit_text_inset_bottom_material" |
|
21 |
- > |
|
22 |
- |
|
23 |
- <selector> |
|
24 |
- <!-- |
|
25 |
- This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I). |
|
26 |
- The item below with state_pressed="false" and state_focused="false" causes a NullPointerException. |
|
27 |
- NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' |
|
28 |
- |
|
29 |
- <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/> |
|
30 |
- |
|
31 |
- For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR. |
|
32 |
- --> |
|
33 |
- <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/> |
|
34 |
- <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/> |
|
35 |
- </selector> |
|
36 |
- |
|
37 |
-</inset> |
|
1 |
+<?xml version="1.0" encoding="utf-8"?> |
|
2 |
+<!-- Copyright (C) 2014 The Android Open Source Project |
|
3 |
+ |
|
4 |
+ Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 |
+ you may not use this file except in compliance with the License. |
|
6 |
+ You may obtain a copy of the License at |
|
7 |
+ |
|
8 |
+ http://www.apache.org/licenses/LICENSE-2.0 |
|
9 |
+ |
|
10 |
+ Unless required by applicable law or agreed to in writing, software |
|
11 |
+ distributed under the License is distributed on an "AS IS" BASIS, |
|
12 |
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 |
+ See the License for the specific language governing permissions and |
|
14 |
+ limitations under the License. |
|
15 |
+--> |
|
16 |
+<inset xmlns:android="http://schemas.android.com/apk/res/android" |
|
17 |
+ android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" |
|
18 |
+ android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" |
|
19 |
+ android:insetTop="@dimen/abc_edit_text_inset_top_material" |
|
20 |
+ android:insetBottom="@dimen/abc_edit_text_inset_bottom_material" |
|
21 |
+ > |
|
22 |
+ |
|
23 |
+ <selector> |
|
24 |
+ <!-- |
|
25 |
+ This file is a copy of abc_edit_text_material (https://bit.ly/3k8fX7I). |
|
26 |
+ The item below with state_pressed="false" and state_focused="false" causes a NullPointerException. |
|
27 |
+ NullPointerException:tempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' |
|
28 |
+ |
|
29 |
+ <item android:state_pressed="false" android:state_focused="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/> |
|
30 |
+ |
|
31 |
+ For more info, see https://bit.ly/3CdLStv (react-native/pull/29452) and https://bit.ly/3nxOMoR. |
|
32 |
+ --> |
|
33 |
+ <item android:state_enabled="false" android:drawable="@drawable/abc_textfield_default_mtrl_alpha"/> |
|
34 |
+ <item android:drawable="@drawable/abc_textfield_activated_mtrl_alpha"/> |
|
35 |
+ </selector> |
|
36 |
+ |
|
37 |
+</inset> |
--- android/app/src/main/res/values/strings.xml
+++ android/app/src/main/res/values/strings.xml
... | ... | @@ -1,3 +1,3 @@ |
1 |
-<resources> |
|
2 |
- <string name="app_name">Send_Location_TA</string> |
|
3 |
-</resources> |
|
1 |
+<resources> |
|
2 |
+ <string name="app_name">kic</string> |
|
3 |
+</resources> |
--- android/app/src/main/res/values/styles.xml
+++ android/app/src/main/res/values/styles.xml
... | ... | @@ -1,9 +1,9 @@ |
1 |
-<resources> |
|
2 |
- |
|
3 |
- <!-- Base application theme. --> |
|
4 |
- <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> |
|
5 |
- <!-- Customize your theme here. --> |
|
6 |
- <item name="android:editTextBackground">@drawable/rn_edit_text_material</item> |
|
7 |
- </style> |
|
8 |
- |
|
9 |
-</resources> |
|
1 |
+<resources> |
|
2 |
+ |
|
3 |
+ <!-- Base application theme. --> |
|
4 |
+ <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar"> |
|
5 |
+ <!-- Customize your theme here. --> |
|
6 |
+ <item name="android:editTextBackground">@drawable/rn_edit_text_material</item> |
|
7 |
+ </style> |
|
8 |
+ |
|
9 |
+</resources> |
--- android/build.gradle
+++ android/build.gradle
... | ... | @@ -1,22 +1,21 @@ |
1 |
-buildscript { |
|
2 |
- ext { |
|
3 |
- buildToolsVersion = "34.0.0" |
|
4 |
- minSdkVersion = 23 |
|
5 |
- compileSdkVersion = 34 |
|
6 |
- targetSdkVersion = 34 |
|
7 |
- ndkVersion = "26.1.10909125" |
|
8 |
- kotlinVersion = "1.9.22" |
|
9 |
- playServicesLocationVersion = "21.0.1" |
|
10 |
- } |
|
11 |
- repositories { |
|
12 |
- google() |
|
13 |
- mavenCentral() |
|
14 |
- } |
|
15 |
- dependencies { |
|
16 |
- classpath("com.android.tools.build:gradle:7.3.1") |
|
17 |
- classpath("com.facebook.react:react-native-gradle-plugin") |
|
18 |
- classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") |
|
19 |
- } |
|
20 |
-} |
|
21 |
- |
|
22 |
-apply plugin: "com.facebook.react.rootproject" |
|
1 |
+buildscript { |
|
2 |
+ ext { |
|
3 |
+ buildToolsVersion = "34.0.0" |
|
4 |
+ minSdkVersion = 23 |
|
5 |
+ compileSdkVersion = 34 |
|
6 |
+ targetSdkVersion = 34 |
|
7 |
+ ndkVersion = "26.1.10909125" |
|
8 |
+ kotlinVersion = "1.9.22" |
|
9 |
+ } |
|
10 |
+ repositories { |
|
11 |
+ google() |
|
12 |
+ mavenCentral() |
|
13 |
+ } |
|
14 |
+ dependencies { |
|
15 |
+ classpath("com.android.tools.build:gradle") |
|
16 |
+ classpath("com.facebook.react:react-native-gradle-plugin") |
|
17 |
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") |
|
18 |
+ } |
|
19 |
+} |
|
20 |
+ |
|
21 |
+apply plugin: "com.facebook.react.rootproject" |
--- android/gradle.properties
+++ android/gradle.properties
... | ... | @@ -1,43 +1,41 @@ |
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 |
-org.gradle.jvmargs=-Xmx4096m -Dkotlin.daemon.jvm.options=-Xmx4096m |
|
15 |
- |
|
16 |
- |
|
17 |
-# When configured, Gradle will run in incubating parallel mode. |
|
18 |
-# This option should only be used with decoupled projects. More details, visit |
|
19 |
-# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects |
|
20 |
-# org.gradle.parallel=true |
|
21 |
- |
|
22 |
-# AndroidX package structure to make it clearer which packages are bundled with the |
|
23 |
-# Android operating system, and which are packaged with your app's APK |
|
24 |
-# https://developer.android.com/topic/libraries/support-library/androidx-rn |
|
25 |
-android.useAndroidX=true |
|
26 |
-# Automatically convert third-party libraries to use AndroidX |
|
27 |
-android.enableJetifier=true |
|
28 |
- |
|
29 |
-# Use this property to specify which architecture you want to build. |
|
30 |
-# You can also override it from the CLI using |
|
31 |
-# ./gradlew <task> -PreactNativeArchitectures=x86_64 |
|
32 |
-reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 |
|
33 |
- |
|
34 |
-# Use this property to enable support to the new architecture. |
|
35 |
-# This will allow you to use TurboModules and the Fabric render in |
|
36 |
-# your application. You should enable this flag either if you want |
|
37 |
-# to write custom TurboModules/Fabric components OR use libraries that |
|
38 |
-# are providing them. |
|
39 |
-newArchEnabled=false |
|
40 |
- |
|
41 |
-# Use this property to enable or disable the Hermes JS engine. |
|
42 |
-# If set to false, you will be using JSC instead. |
|
43 |
-hermesEnabled=true |
|
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 |
+# Use this property to specify which architecture you want to build. |
|
28 |
+# You can also override it from the CLI using |
|
29 |
+# ./gradlew <task> -PreactNativeArchitectures=x86_64 |
|
30 |
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 |
|
31 |
+ |
|
32 |
+# Use this property to enable support to the new architecture. |
|
33 |
+# This will allow you to use TurboModules and the Fabric render in |
|
34 |
+# your application. You should enable this flag either if you want |
|
35 |
+# to write custom TurboModules/Fabric components OR use libraries that |
|
36 |
+# are providing them. |
|
37 |
+newArchEnabled=false |
|
38 |
+ |
|
39 |
+# Use this property to enable or disable the Hermes JS engine. |
|
40 |
+# If set to false, you will be using JSC instead. |
|
41 |
+hermesEnabled=true |
--- android/gradle/wrapper/gradle-wrapper.properties
+++ android/gradle/wrapper/gradle-wrapper.properties
... | ... | @@ -1,7 +1,7 @@ |
1 |
-distributionBase=GRADLE_USER_HOME |
|
2 |
-distributionPath=wrapper/dists |
|
3 |
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip |
|
4 |
-networkTimeout=10000 |
|
5 |
-validateDistributionUrl=true |
|
6 |
-zipStoreBase=GRADLE_USER_HOME |
|
7 |
-zipStorePath=wrapper/dists |
|
1 |
+distributionBase=GRADLE_USER_HOME |
|
2 |
+distributionPath=wrapper/dists |
|
3 |
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip |
|
4 |
+networkTimeout=10000 |
|
5 |
+validateDistributionUrl=true |
|
6 |
+zipStoreBase=GRADLE_USER_HOME |
|
7 |
+zipStorePath=wrapper/dists |
--- android/settings.gradle
+++ android/settings.gradle
... | ... | @@ -1,4 +1,4 @@ |
1 |
-rootProject.name = 'Send_Location_TA' |
|
2 |
-apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) |
|
3 |
-include ':app' |
|
4 |
-includeBuild('../node_modules/@react-native/gradle-plugin') |
|
1 |
+rootProject.name = 'kic' |
|
2 |
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) |
|
3 |
+include ':app' |
|
4 |
+includeBuild('../node_modules/@react-native/gradle-plugin') |
--- app.json
+++ app.json
... | ... | @@ -1,4 +1,4 @@ |
1 |
-{ |
|
2 |
- "name": "Send_Location_TA", |
|
3 |
- "displayName": "Send_Location_TA" |
|
4 |
-} |
|
1 |
+{ |
|
2 |
+ "name": "kic", |
|
3 |
+ "displayName": "kic" |
|
4 |
+} |
--- babel.config.js
+++ babel.config.js
... | ... | @@ -1,4 +1,3 @@ |
1 |
-module.exports = { |
|
2 |
- presets: ['module:@react-native/babel-preset'], |
|
3 |
- plugins: ['@babel/plugin-transform-export-namespace-from'], |
|
4 |
-}; |
|
1 |
+module.exports = { |
|
2 |
+ presets: ['module:@react-native/babel-preset'], |
|
3 |
+}; |
--- index.js
+++ index.js
... | ... | @@ -1,9 +1,9 @@ |
1 |
-/** |
|
2 |
- * @format |
|
3 |
- */ |
|
4 |
- |
|
5 |
-import {AppRegistry} from 'react-native'; |
|
6 |
-import App from './App'; |
|
7 |
-import {name as appName} from './app.json'; |
|
8 |
- |
|
9 |
-AppRegistry.registerComponent(appName, () => App); |
|
1 |
+/** |
|
2 |
+ * @format |
|
3 |
+ */ |
|
4 |
+ |
|
5 |
+import {AppRegistry} from 'react-native'; |
|
6 |
+import App from './App'; |
|
7 |
+import {name as appName} from './app.json'; |
|
8 |
+ |
|
9 |
+AppRegistry.registerComponent(appName, () => App); |
--- ios/.xcode.env
+++ ios/.xcode.env
... | ... | @@ -1,11 +1,11 @@ |
1 |
-# This `.xcode.env` file is versioned and is used to source the environment |
|
2 |
-# used when running script phases inside Xcode. |
|
3 |
-# To customize your local environment, you can create an `.xcode.env.local` |
|
4 |
-# file that is not versioned. |
|
5 |
- |
|
6 |
-# NODE_BINARY variable contains the PATH to the node executable. |
|
7 |
-# |
|
8 |
-# Customize the NODE_BINARY variable here. |
|
9 |
-# For example, to use nvm with brew, add the following line |
|
10 |
-# . "$(brew --prefix nvm)/nvm.sh" --no-use |
|
11 |
-export NODE_BINARY=$(command -v node) |
|
1 |
+# This `.xcode.env` file is versioned and is used to source the environment |
|
2 |
+# used when running script phases inside Xcode. |
|
3 |
+# To customize your local environment, you can create an `.xcode.env.local` |
|
4 |
+# file that is not versioned. |
|
5 |
+ |
|
6 |
+# NODE_BINARY variable contains the PATH to the node executable. |
|
7 |
+# |
|
8 |
+# Customize the NODE_BINARY variable here. |
|
9 |
+# For example, to use nvm with brew, add the following line |
|
10 |
+# . "$(brew --prefix nvm)/nvm.sh" --no-use |
|
11 |
+export NODE_BINARY=$(command -v node) |
--- ios/Podfile
+++ ios/Podfile
... | ... | @@ -1,75 +1,75 @@ |
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 |
- def node_require(script) |
|
9 |
- # Resolve script with node to allow for hoisting |
|
10 |
- require Pod::Executable.execute_command('node', ['-p', |
|
11 |
- "require.resolve( |
|
12 |
- '#{script}', |
|
13 |
- {paths: [process.argv[1]]}, |
|
14 |
- )", __dir__]).strip |
|
15 |
- end |
|
16 |
- |
|
17 |
- node_require('react-native/scripts/react_native_pods.rb') |
|
18 |
- node_require('react-native-permissions/scripts/setup.rb') |
|
19 |
- |
|
20 |
-platform :ios, min_ios_version_supported |
|
21 |
-prepare_react_native_project! |
|
22 |
- |
|
23 |
-setup_permissions ( [ |
|
24 |
- 'AppTrackingTransparency', |
|
25 |
- 'Bluetooth', |
|
26 |
- 'Calendars', |
|
27 |
- 'CalendarsWriteOnly', |
|
28 |
- 'Camera', |
|
29 |
- 'Contacts', |
|
30 |
- 'FaceID', |
|
31 |
- 'LocationAccuracy', |
|
32 |
- 'LocationAlways', |
|
33 |
- 'LocationWhenInUse', |
|
34 |
- 'MediaLibrary', |
|
35 |
- 'Microphone', |
|
36 |
- 'Motion', |
|
37 |
- 'Notifications', |
|
38 |
- 'PhotoLibrary', |
|
39 |
- 'PhotoLibraryAddOnly', |
|
40 |
- 'Reminders', |
|
41 |
- 'Siri', |
|
42 |
- 'SpeechRecognition', |
|
43 |
- 'StoreKit', |
|
44 |
-] ) |
|
45 |
- |
|
46 |
-linkage = ENV['USE_FRAMEWORKS'] |
|
47 |
-if linkage != nil |
|
48 |
- Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green |
|
49 |
- use_frameworks! :linkage => linkage.to_sym |
|
50 |
-end |
|
51 |
- |
|
52 |
-target 'Send_Location_TA' do |
|
53 |
- config = use_native_modules! |
|
54 |
- |
|
55 |
- use_react_native!( |
|
56 |
- :path => config[:reactNativePath], |
|
57 |
- # An absolute path to your application root. |
|
58 |
- :app_path => "#{Pod::Config.instance.installation_root}/.." |
|
59 |
- ) |
|
60 |
- |
|
61 |
- target 'Send_Location_TATests' do |
|
62 |
- inherit! :complete |
|
63 |
- # Pods for testing |
|
64 |
- end |
|
65 |
- |
|
66 |
- post_install do |installer| |
|
67 |
- # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 |
|
68 |
- react_native_post_install( |
|
69 |
- installer, |
|
70 |
- config[:reactNativePath], |
|
71 |
- :mac_catalyst_enabled => false, |
|
72 |
- # :ccache_enabled => true |
|
73 |
- ) |
|
74 |
- end |
|
75 |
-end |
|
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 |
+def node_require(script) |
|
9 |
+ # Resolve script with node to allow for hoisting |
|
10 |
+ require Pod::Executable.execute_command('node', ['-p', |
|
11 |
+ "require.resolve( |
|
12 |
+ '#{script}', |
|
13 |
+ {paths: [process.argv[1]]}, |
|
14 |
+ )", __dir__]).strip |
|
15 |
+end |
|
16 |
+ |
|
17 |
+node_require('react-native/scripts/react_native_pods.rb') |
|
18 |
+node_require('react-native-permissions/scripts/setup.rb') |
|
19 |
+ |
|
20 |
+platform :ios, min_ios_version_supported |
|
21 |
+prepare_react_native_project! |
|
22 |
+ |
|
23 |
+setup_permissions ( [ |
|
24 |
+ 'AppTrackingTransparency', |
|
25 |
+ 'Bluetooth', |
|
26 |
+ 'Calendars', |
|
27 |
+ 'CalendarsWriteOnly', |
|
28 |
+ 'Camera', |
|
29 |
+ 'Contacts', |
|
30 |
+ 'FaceID', |
|
31 |
+ 'LocationAccuracy', |
|
32 |
+ 'LocationAlways', |
|
33 |
+ 'LocationWhenInUse', |
|
34 |
+ 'MediaLibrary', |
|
35 |
+ 'Microphone', |
|
36 |
+ 'Motion', |
|
37 |
+ 'Notifications', |
|
38 |
+ 'PhotoLibrary', |
|
39 |
+ 'PhotoLibraryAddOnly', |
|
40 |
+ 'Reminders', |
|
41 |
+ 'Siri', |
|
42 |
+ 'SpeechRecognition', |
|
43 |
+ 'StoreKit', |
|
44 |
+] ) |
|
45 |
+ |
|
46 |
+linkage = ENV['USE_FRAMEWORKS'] |
|
47 |
+if linkage != nil |
|
48 |
+ Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green |
|
49 |
+ use_frameworks! :linkage => linkage.to_sym |
|
50 |
+end |
|
51 |
+ |
|
52 |
+target 'kic' do |
|
53 |
+ config = use_native_modules! |
|
54 |
+ |
|
55 |
+ use_react_native!( |
|
56 |
+ :path => config[:reactNativePath], |
|
57 |
+ # An absolute path to your application root. |
|
58 |
+ :app_path => "#{Pod::Config.instance.installation_root}/.." |
|
59 |
+ ) |
|
60 |
+ |
|
61 |
+ target 'kicTests' do |
|
62 |
+ inherit! :complete |
|
63 |
+ # Pods for testing |
|
64 |
+ end |
|
65 |
+ |
|
66 |
+ post_install do |installer| |
|
67 |
+ # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 |
|
68 |
+ react_native_post_install( |
|
69 |
+ installer, |
|
70 |
+ config[:reactNativePath], |
|
71 |
+ :mac_catalyst_enabled => false, |
|
72 |
+ # :ccache_enabled => true |
|
73 |
+ ) |
|
74 |
+ end |
|
75 |
+end |
--- ios/Podfile.lock
+++ ios/Podfile.lock
... | ... | @@ -3,12 +3,12 @@ |
3 | 3 |
- BVLinearGradient (2.8.3): |
4 | 4 |
- React-Core |
5 | 5 |
- DoubleConversion (1.1.6) |
6 |
- - FBLazyVector (0.74.4) |
|
6 |
+ - FBLazyVector (0.74.5) |
|
7 | 7 |
- fmt (9.1.0) |
8 | 8 |
- glog (0.3.5) |
9 |
- - hermes-engine (0.74.4): |
|
10 |
- - hermes-engine/Pre-built (= 0.74.4) |
|
11 |
- - hermes-engine/Pre-built (0.74.4) |
|
9 |
+ - hermes-engine (0.74.5): |
|
10 |
+ - hermes-engine/Pre-built (= 0.74.5) |
|
11 |
+ - hermes-engine/Pre-built (0.74.5) |
|
12 | 12 |
- RCT-Folly (2024.01.01.00): |
13 | 13 |
- boost |
14 | 14 |
- DoubleConversion |
... | ... | @@ -25,27 +25,27 @@ |
25 | 25 |
- DoubleConversion |
26 | 26 |
- fmt (= 9.1.0) |
27 | 27 |
- glog |
28 |
- - RCTDeprecation (0.74.4) |
|
29 |
- - RCTRequired (0.74.4) |
|
30 |
- - RCTTypeSafety (0.74.4): |
|
31 |
- - FBLazyVector (= 0.74.4) |
|
32 |
- - RCTRequired (= 0.74.4) |
|
33 |
- - React-Core (= 0.74.4) |
|
34 |
- - React (0.74.4): |
|
35 |
- - React-Core (= 0.74.4) |
|
36 |
- - React-Core/DevSupport (= 0.74.4) |
|
37 |
- - React-Core/RCTWebSocket (= 0.74.4) |
|
38 |
- - React-RCTActionSheet (= 0.74.4) |
|
39 |
- - React-RCTAnimation (= 0.74.4) |
|
40 |
- - React-RCTBlob (= 0.74.4) |
|
41 |
- - React-RCTImage (= 0.74.4) |
|
42 |
- - React-RCTLinking (= 0.74.4) |
|
43 |
- - React-RCTNetwork (= 0.74.4) |
|
44 |
- - React-RCTSettings (= 0.74.4) |
|
45 |
- - React-RCTText (= 0.74.4) |
|
46 |
- - React-RCTVibration (= 0.74.4) |
|
47 |
- - React-callinvoker (0.74.4) |
|
48 |
- - React-Codegen (0.74.4): |
|
28 |
+ - RCTDeprecation (0.74.5) |
|
29 |
+ - RCTRequired (0.74.5) |
|
30 |
+ - RCTTypeSafety (0.74.5): |
|
31 |
+ - FBLazyVector (= 0.74.5) |
|
32 |
+ - RCTRequired (= 0.74.5) |
|
33 |
+ - React-Core (= 0.74.5) |
|
34 |
+ - React (0.74.5): |
|
35 |
+ - React-Core (= 0.74.5) |
|
36 |
+ - React-Core/DevSupport (= 0.74.5) |
|
37 |
+ - React-Core/RCTWebSocket (= 0.74.5) |
|
38 |
+ - React-RCTActionSheet (= 0.74.5) |
|
39 |
+ - React-RCTAnimation (= 0.74.5) |
|
40 |
+ - React-RCTBlob (= 0.74.5) |
|
41 |
+ - React-RCTImage (= 0.74.5) |
|
42 |
+ - React-RCTLinking (= 0.74.5) |
|
43 |
+ - React-RCTNetwork (= 0.74.5) |
|
44 |
+ - React-RCTSettings (= 0.74.5) |
|
45 |
+ - React-RCTText (= 0.74.5) |
|
46 |
+ - React-RCTVibration (= 0.74.5) |
|
47 |
+ - React-callinvoker (0.74.5) |
|
48 |
+ - React-Codegen (0.74.5): |
|
49 | 49 |
- DoubleConversion |
50 | 50 |
- glog |
51 | 51 |
- hermes-engine |
... | ... | @@ -65,12 +65,12 @@ |
65 | 65 |
- React-utils |
66 | 66 |
- ReactCommon/turbomodule/bridging |
67 | 67 |
- ReactCommon/turbomodule/core |
68 |
- - React-Core (0.74.4): |
|
68 |
+ - React-Core (0.74.5): |
|
69 | 69 |
- glog |
70 | 70 |
- hermes-engine |
71 | 71 |
- RCT-Folly (= 2024.01.01.00) |
72 | 72 |
- RCTDeprecation |
73 |
- - React-Core/Default (= 0.74.4) |
|
73 |
+ - React-Core/Default (= 0.74.5) |
|
74 | 74 |
- React-cxxreact |
75 | 75 |
- React-featureflags |
76 | 76 |
- React-hermes |
... | ... | @@ -82,7 +82,7 @@ |
82 | 82 |
- React-utils |
83 | 83 |
- SocketRocket (= 0.7.0) |
84 | 84 |
- Yoga |
85 |
- - React-Core/CoreModulesHeaders (0.74.4): |
|
85 |
+ - React-Core/CoreModulesHeaders (0.74.5): |
|
86 | 86 |
- glog |
87 | 87 |
- hermes-engine |
88 | 88 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -99,7 +99,7 @@ |
99 | 99 |
- React-utils |
100 | 100 |
- SocketRocket (= 0.7.0) |
101 | 101 |
- Yoga |
102 |
- - React-Core/Default (0.74.4): |
|
102 |
+ - React-Core/Default (0.74.5): |
|
103 | 103 |
- glog |
104 | 104 |
- hermes-engine |
105 | 105 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -115,13 +115,13 @@ |
115 | 115 |
- React-utils |
116 | 116 |
- SocketRocket (= 0.7.0) |
117 | 117 |
- Yoga |
118 |
- - React-Core/DevSupport (0.74.4): |
|
118 |
+ - React-Core/DevSupport (0.74.5): |
|
119 | 119 |
- glog |
120 | 120 |
- hermes-engine |
121 | 121 |
- RCT-Folly (= 2024.01.01.00) |
122 | 122 |
- RCTDeprecation |
123 |
- - React-Core/Default (= 0.74.4) |
|
124 |
- - React-Core/RCTWebSocket (= 0.74.4) |
|
123 |
+ - React-Core/Default (= 0.74.5) |
|
124 |
+ - React-Core/RCTWebSocket (= 0.74.5) |
|
125 | 125 |
- React-cxxreact |
126 | 126 |
- React-featureflags |
127 | 127 |
- React-hermes |
... | ... | @@ -133,7 +133,7 @@ |
133 | 133 |
- React-utils |
134 | 134 |
- SocketRocket (= 0.7.0) |
135 | 135 |
- Yoga |
136 |
- - React-Core/RCTActionSheetHeaders (0.74.4): |
|
136 |
+ - React-Core/RCTActionSheetHeaders (0.74.5): |
|
137 | 137 |
- glog |
138 | 138 |
- hermes-engine |
139 | 139 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -150,7 +150,7 @@ |
150 | 150 |
- React-utils |
151 | 151 |
- SocketRocket (= 0.7.0) |
152 | 152 |
- Yoga |
153 |
- - React-Core/RCTAnimationHeaders (0.74.4): |
|
153 |
+ - React-Core/RCTAnimationHeaders (0.74.5): |
|
154 | 154 |
- glog |
155 | 155 |
- hermes-engine |
156 | 156 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -167,7 +167,7 @@ |
167 | 167 |
- React-utils |
168 | 168 |
- SocketRocket (= 0.7.0) |
169 | 169 |
- Yoga |
170 |
- - React-Core/RCTBlobHeaders (0.74.4): |
|
170 |
+ - React-Core/RCTBlobHeaders (0.74.5): |
|
171 | 171 |
- glog |
172 | 172 |
- hermes-engine |
173 | 173 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -184,7 +184,7 @@ |
184 | 184 |
- React-utils |
185 | 185 |
- SocketRocket (= 0.7.0) |
186 | 186 |
- Yoga |
187 |
- - React-Core/RCTImageHeaders (0.74.4): |
|
187 |
+ - React-Core/RCTImageHeaders (0.74.5): |
|
188 | 188 |
- glog |
189 | 189 |
- hermes-engine |
190 | 190 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -201,7 +201,7 @@ |
201 | 201 |
- React-utils |
202 | 202 |
- SocketRocket (= 0.7.0) |
203 | 203 |
- Yoga |
204 |
- - React-Core/RCTLinkingHeaders (0.74.4): |
|
204 |
+ - React-Core/RCTLinkingHeaders (0.74.5): |
|
205 | 205 |
- glog |
206 | 206 |
- hermes-engine |
207 | 207 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -218,7 +218,7 @@ |
218 | 218 |
- React-utils |
219 | 219 |
- SocketRocket (= 0.7.0) |
220 | 220 |
- Yoga |
221 |
- - React-Core/RCTNetworkHeaders (0.74.4): |
|
221 |
+ - React-Core/RCTNetworkHeaders (0.74.5): |
|
222 | 222 |
- glog |
223 | 223 |
- hermes-engine |
224 | 224 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -235,7 +235,7 @@ |
235 | 235 |
- React-utils |
236 | 236 |
- SocketRocket (= 0.7.0) |
237 | 237 |
- Yoga |
238 |
- - React-Core/RCTSettingsHeaders (0.74.4): |
|
238 |
+ - React-Core/RCTSettingsHeaders (0.74.5): |
|
239 | 239 |
- glog |
240 | 240 |
- hermes-engine |
241 | 241 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -252,7 +252,7 @@ |
252 | 252 |
- React-utils |
253 | 253 |
- SocketRocket (= 0.7.0) |
254 | 254 |
- Yoga |
255 |
- - React-Core/RCTTextHeaders (0.74.4): |
|
255 |
+ - React-Core/RCTTextHeaders (0.74.5): |
|
256 | 256 |
- glog |
257 | 257 |
- hermes-engine |
258 | 258 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -269,7 +269,7 @@ |
269 | 269 |
- React-utils |
270 | 270 |
- SocketRocket (= 0.7.0) |
271 | 271 |
- Yoga |
272 |
- - React-Core/RCTVibrationHeaders (0.74.4): |
|
272 |
+ - React-Core/RCTVibrationHeaders (0.74.5): |
|
273 | 273 |
- glog |
274 | 274 |
- hermes-engine |
275 | 275 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -286,12 +286,12 @@ |
286 | 286 |
- React-utils |
287 | 287 |
- SocketRocket (= 0.7.0) |
288 | 288 |
- Yoga |
289 |
- - React-Core/RCTWebSocket (0.74.4): |
|
289 |
+ - React-Core/RCTWebSocket (0.74.5): |
|
290 | 290 |
- glog |
291 | 291 |
- hermes-engine |
292 | 292 |
- RCT-Folly (= 2024.01.01.00) |
293 | 293 |
- RCTDeprecation |
294 |
- - React-Core/Default (= 0.74.4) |
|
294 |
+ - React-Core/Default (= 0.74.5) |
|
295 | 295 |
- React-cxxreact |
296 | 296 |
- React-featureflags |
297 | 297 |
- React-hermes |
... | ... | @@ -303,36 +303,36 @@ |
303 | 303 |
- React-utils |
304 | 304 |
- SocketRocket (= 0.7.0) |
305 | 305 |
- Yoga |
306 |
- - React-CoreModules (0.74.4): |
|
306 |
+ - React-CoreModules (0.74.5): |
|
307 | 307 |
- DoubleConversion |
308 | 308 |
- fmt (= 9.1.0) |
309 | 309 |
- RCT-Folly (= 2024.01.01.00) |
310 |
- - RCTTypeSafety (= 0.74.4) |
|
310 |
+ - RCTTypeSafety (= 0.74.5) |
|
311 | 311 |
- React-Codegen |
312 |
- - React-Core/CoreModulesHeaders (= 0.74.4) |
|
313 |
- - React-jsi (= 0.74.4) |
|
312 |
+ - React-Core/CoreModulesHeaders (= 0.74.5) |
|
313 |
+ - React-jsi (= 0.74.5) |
|
314 | 314 |
- React-jsinspector |
315 | 315 |
- React-NativeModulesApple |
316 | 316 |
- React-RCTBlob |
317 |
- - React-RCTImage (= 0.74.4) |
|
317 |
+ - React-RCTImage (= 0.74.5) |
|
318 | 318 |
- ReactCommon |
319 | 319 |
- SocketRocket (= 0.7.0) |
320 |
- - React-cxxreact (0.74.4): |
|
320 |
+ - React-cxxreact (0.74.5): |
|
321 | 321 |
- boost (= 1.83.0) |
322 | 322 |
- DoubleConversion |
323 | 323 |
- fmt (= 9.1.0) |
324 | 324 |
- glog |
325 | 325 |
- hermes-engine |
326 | 326 |
- RCT-Folly (= 2024.01.01.00) |
327 |
- - React-callinvoker (= 0.74.4) |
|
328 |
- - React-debug (= 0.74.4) |
|
329 |
- - React-jsi (= 0.74.4) |
|
327 |
+ - React-callinvoker (= 0.74.5) |
|
328 |
+ - React-debug (= 0.74.5) |
|
329 |
+ - React-jsi (= 0.74.5) |
|
330 | 330 |
- React-jsinspector |
331 |
- - React-logger (= 0.74.4) |
|
332 |
- - React-perflogger (= 0.74.4) |
|
333 |
- - React-runtimeexecutor (= 0.74.4) |
|
334 |
- - React-debug (0.74.4) |
|
335 |
- - React-Fabric (0.74.4): |
|
331 |
+ - React-logger (= 0.74.5) |
|
332 |
+ - React-perflogger (= 0.74.5) |
|
333 |
+ - React-runtimeexecutor (= 0.74.5) |
|
334 |
+ - React-debug (0.74.5) |
|
335 |
+ - React-Fabric (0.74.5): |
|
336 | 336 |
- DoubleConversion |
337 | 337 |
- fmt (= 9.1.0) |
338 | 338 |
- glog |
... | ... | @@ -343,20 +343,20 @@ |
343 | 343 |
- React-Core |
344 | 344 |
- React-cxxreact |
345 | 345 |
- React-debug |
346 |
- - React-Fabric/animations (= 0.74.4) |
|
347 |
- - React-Fabric/attributedstring (= 0.74.4) |
|
348 |
- - React-Fabric/componentregistry (= 0.74.4) |
|
349 |
- - React-Fabric/componentregistrynative (= 0.74.4) |
|
350 |
- - React-Fabric/components (= 0.74.4) |
|
351 |
- - React-Fabric/core (= 0.74.4) |
|
352 |
- - React-Fabric/imagemanager (= 0.74.4) |
|
353 |
- - React-Fabric/leakchecker (= 0.74.4) |
|
354 |
- - React-Fabric/mounting (= 0.74.4) |
|
355 |
- - React-Fabric/scheduler (= 0.74.4) |
|
356 |
- - React-Fabric/telemetry (= 0.74.4) |
|
357 |
- - React-Fabric/templateprocessor (= 0.74.4) |
|
358 |
- - React-Fabric/textlayoutmanager (= 0.74.4) |
|
359 |
- - React-Fabric/uimanager (= 0.74.4) |
|
346 |
+ - React-Fabric/animations (= 0.74.5) |
|
347 |
+ - React-Fabric/attributedstring (= 0.74.5) |
|
348 |
+ - React-Fabric/componentregistry (= 0.74.5) |
|
349 |
+ - React-Fabric/componentregistrynative (= 0.74.5) |
|
350 |
+ - React-Fabric/components (= 0.74.5) |
|
351 |
+ - React-Fabric/core (= 0.74.5) |
|
352 |
+ - React-Fabric/imagemanager (= 0.74.5) |
|
353 |
+ - React-Fabric/leakchecker (= 0.74.5) |
|
354 |
+ - React-Fabric/mounting (= 0.74.5) |
|
355 |
+ - React-Fabric/scheduler (= 0.74.5) |
|
356 |
+ - React-Fabric/telemetry (= 0.74.5) |
|
357 |
+ - React-Fabric/templateprocessor (= 0.74.5) |
|
358 |
+ - React-Fabric/textlayoutmanager (= 0.74.5) |
|
359 |
+ - React-Fabric/uimanager (= 0.74.5) |
|
360 | 360 |
- React-graphics |
361 | 361 |
- React-jsi |
362 | 362 |
- React-jsiexecutor |
... | ... | @@ -365,7 +365,7 @@ |
365 | 365 |
- React-runtimescheduler |
366 | 366 |
- React-utils |
367 | 367 |
- ReactCommon/turbomodule/core |
368 |
- - React-Fabric/animations (0.74.4): |
|
368 |
+ - React-Fabric/animations (0.74.5): |
|
369 | 369 |
- DoubleConversion |
370 | 370 |
- fmt (= 9.1.0) |
371 | 371 |
- glog |
... | ... | @@ -384,7 +384,7 @@ |
384 | 384 |
- React-runtimescheduler |
385 | 385 |
- React-utils |
386 | 386 |
- ReactCommon/turbomodule/core |
387 |
- - React-Fabric/attributedstring (0.74.4): |
|
387 |
+ - React-Fabric/attributedstring (0.74.5): |
|
388 | 388 |
- DoubleConversion |
389 | 389 |
- fmt (= 9.1.0) |
390 | 390 |
- glog |
... | ... | @@ -403,7 +403,7 @@ |
403 | 403 |
- React-runtimescheduler |
404 | 404 |
- React-utils |
405 | 405 |
- ReactCommon/turbomodule/core |
406 |
- - React-Fabric/componentregistry (0.74.4): |
|
406 |
+ - React-Fabric/componentregistry (0.74.5): |
|
407 | 407 |
- DoubleConversion |
408 | 408 |
- fmt (= 9.1.0) |
409 | 409 |
- glog |
... | ... | @@ -422,7 +422,7 @@ |
422 | 422 |
- React-runtimescheduler |
423 | 423 |
- React-utils |
424 | 424 |
- ReactCommon/turbomodule/core |
425 |
- - React-Fabric/componentregistrynative (0.74.4): |
|
425 |
+ - React-Fabric/componentregistrynative (0.74.5): |
|
426 | 426 |
- DoubleConversion |
427 | 427 |
- fmt (= 9.1.0) |
428 | 428 |
- glog |
... | ... | @@ -441,7 +441,7 @@ |
441 | 441 |
- React-runtimescheduler |
442 | 442 |
- React-utils |
443 | 443 |
- ReactCommon/turbomodule/core |
444 |
- - React-Fabric/components (0.74.4): |
|
444 |
+ - React-Fabric/components (0.74.5): |
|
445 | 445 |
- DoubleConversion |
446 | 446 |
- fmt (= 9.1.0) |
447 | 447 |
- glog |
... | ... | @@ -452,17 +452,17 @@ |
452 | 452 |
- React-Core |
453 | 453 |
- React-cxxreact |
454 | 454 |
- React-debug |
455 |
- - React-Fabric/components/inputaccessory (= 0.74.4) |
|
456 |
- - React-Fabric/components/legacyviewmanagerinterop (= 0.74.4) |
|
457 |
- - React-Fabric/components/modal (= 0.74.4) |
|
458 |
- - React-Fabric/components/rncore (= 0.74.4) |
|
459 |
- - React-Fabric/components/root (= 0.74.4) |
|
460 |
- - React-Fabric/components/safeareaview (= 0.74.4) |
|
461 |
- - React-Fabric/components/scrollview (= 0.74.4) |
|
462 |
- - React-Fabric/components/text (= 0.74.4) |
|
463 |
- - React-Fabric/components/textinput (= 0.74.4) |
|
464 |
- - React-Fabric/components/unimplementedview (= 0.74.4) |
|
465 |
- - React-Fabric/components/view (= 0.74.4) |
|
455 |
+ - React-Fabric/components/inputaccessory (= 0.74.5) |
|
456 |
+ - React-Fabric/components/legacyviewmanagerinterop (= 0.74.5) |
|
457 |
+ - React-Fabric/components/modal (= 0.74.5) |
|
458 |
+ - React-Fabric/components/rncore (= 0.74.5) |
|
459 |
+ - React-Fabric/components/root (= 0.74.5) |
|
460 |
+ - React-Fabric/components/safeareaview (= 0.74.5) |
|
461 |
+ - React-Fabric/components/scrollview (= 0.74.5) |
|
462 |
+ - React-Fabric/components/text (= 0.74.5) |
|
463 |
+ - React-Fabric/components/textinput (= 0.74.5) |
|
464 |
+ - React-Fabric/components/unimplementedview (= 0.74.5) |
|
465 |
+ - React-Fabric/components/view (= 0.74.5) |
|
466 | 466 |
- React-graphics |
467 | 467 |
- React-jsi |
468 | 468 |
- React-jsiexecutor |
... | ... | @@ -471,7 +471,7 @@ |
471 | 471 |
- React-runtimescheduler |
472 | 472 |
- React-utils |
473 | 473 |
- ReactCommon/turbomodule/core |
474 |
- - React-Fabric/components/inputaccessory (0.74.4): |
|
474 |
+ - React-Fabric/components/inputaccessory (0.74.5): |
|
475 | 475 |
- DoubleConversion |
476 | 476 |
- fmt (= 9.1.0) |
477 | 477 |
- glog |
... | ... | @@ -490,7 +490,7 @@ |
490 | 490 |
- React-runtimescheduler |
491 | 491 |
- React-utils |
492 | 492 |
- ReactCommon/turbomodule/core |
493 |
- - React-Fabric/components/legacyviewmanagerinterop (0.74.4): |
|
493 |
+ - React-Fabric/components/legacyviewmanagerinterop (0.74.5): |
|
494 | 494 |
- DoubleConversion |
495 | 495 |
- fmt (= 9.1.0) |
496 | 496 |
- glog |
... | ... | @@ -509,7 +509,7 @@ |
509 | 509 |
- React-runtimescheduler |
510 | 510 |
- React-utils |
511 | 511 |
- ReactCommon/turbomodule/core |
512 |
- - React-Fabric/components/modal (0.74.4): |
|
512 |
+ - React-Fabric/components/modal (0.74.5): |
|
513 | 513 |
- DoubleConversion |
514 | 514 |
- fmt (= 9.1.0) |
515 | 515 |
- glog |
... | ... | @@ -528,7 +528,7 @@ |
528 | 528 |
- React-runtimescheduler |
529 | 529 |
- React-utils |
530 | 530 |
- ReactCommon/turbomodule/core |
531 |
- - React-Fabric/components/rncore (0.74.4): |
|
531 |
+ - React-Fabric/components/rncore (0.74.5): |
|
532 | 532 |
- DoubleConversion |
533 | 533 |
- fmt (= 9.1.0) |
534 | 534 |
- glog |
... | ... | @@ -547,7 +547,7 @@ |
547 | 547 |
- React-runtimescheduler |
548 | 548 |
- React-utils |
549 | 549 |
- ReactCommon/turbomodule/core |
550 |
- - React-Fabric/components/root (0.74.4): |
|
550 |
+ - React-Fabric/components/root (0.74.5): |
|
551 | 551 |
- DoubleConversion |
552 | 552 |
- fmt (= 9.1.0) |
553 | 553 |
- glog |
... | ... | @@ -566,7 +566,7 @@ |
566 | 566 |
- React-runtimescheduler |
567 | 567 |
- React-utils |
568 | 568 |
- ReactCommon/turbomodule/core |
569 |
- - React-Fabric/components/safeareaview (0.74.4): |
|
569 |
+ - React-Fabric/components/safeareaview (0.74.5): |
|
570 | 570 |
- DoubleConversion |
571 | 571 |
- fmt (= 9.1.0) |
572 | 572 |
- glog |
... | ... | @@ -585,7 +585,7 @@ |
585 | 585 |
- React-runtimescheduler |
586 | 586 |
- React-utils |
587 | 587 |
- ReactCommon/turbomodule/core |
588 |
- - React-Fabric/components/scrollview (0.74.4): |
|
588 |
+ - React-Fabric/components/scrollview (0.74.5): |
|
589 | 589 |
- DoubleConversion |
590 | 590 |
- fmt (= 9.1.0) |
591 | 591 |
- glog |
... | ... | @@ -604,7 +604,7 @@ |
604 | 604 |
- React-runtimescheduler |
605 | 605 |
- React-utils |
606 | 606 |
- ReactCommon/turbomodule/core |
607 |
- - React-Fabric/components/text (0.74.4): |
|
607 |
+ - React-Fabric/components/text (0.74.5): |
|
608 | 608 |
- DoubleConversion |
609 | 609 |
- fmt (= 9.1.0) |
610 | 610 |
- glog |
... | ... | @@ -623,7 +623,7 @@ |
623 | 623 |
- React-runtimescheduler |
624 | 624 |
- React-utils |
625 | 625 |
- ReactCommon/turbomodule/core |
626 |
- - React-Fabric/components/textinput (0.74.4): |
|
626 |
+ - React-Fabric/components/textinput (0.74.5): |
|
627 | 627 |
- DoubleConversion |
628 | 628 |
- fmt (= 9.1.0) |
629 | 629 |
- glog |
... | ... | @@ -642,7 +642,7 @@ |
642 | 642 |
- React-runtimescheduler |
643 | 643 |
- React-utils |
644 | 644 |
- ReactCommon/turbomodule/core |
645 |
- - React-Fabric/components/unimplementedview (0.74.4): |
|
645 |
+ - React-Fabric/components/unimplementedview (0.74.5): |
|
646 | 646 |
- DoubleConversion |
647 | 647 |
- fmt (= 9.1.0) |
648 | 648 |
- glog |
... | ... | @@ -661,7 +661,7 @@ |
661 | 661 |
- React-runtimescheduler |
662 | 662 |
- React-utils |
663 | 663 |
- ReactCommon/turbomodule/core |
664 |
- - React-Fabric/components/view (0.74.4): |
|
664 |
+ - React-Fabric/components/view (0.74.5): |
|
665 | 665 |
- DoubleConversion |
666 | 666 |
- fmt (= 9.1.0) |
667 | 667 |
- glog |
... | ... | @@ -681,7 +681,7 @@ |
681 | 681 |
- React-utils |
682 | 682 |
- ReactCommon/turbomodule/core |
683 | 683 |
- Yoga |
684 |
- - React-Fabric/core (0.74.4): |
|
684 |
+ - React-Fabric/core (0.74.5): |
|
685 | 685 |
- DoubleConversion |
686 | 686 |
- fmt (= 9.1.0) |
687 | 687 |
- glog |
... | ... | @@ -700,7 +700,7 @@ |
700 | 700 |
- React-runtimescheduler |
701 | 701 |
- React-utils |
702 | 702 |
- ReactCommon/turbomodule/core |
703 |
- - React-Fabric/imagemanager (0.74.4): |
|
703 |
+ - React-Fabric/imagemanager (0.74.5): |
|
704 | 704 |
- DoubleConversion |
705 | 705 |
- fmt (= 9.1.0) |
706 | 706 |
- glog |
... | ... | @@ -719,7 +719,7 @@ |
719 | 719 |
- React-runtimescheduler |
720 | 720 |
- React-utils |
721 | 721 |
- ReactCommon/turbomodule/core |
722 |
- - React-Fabric/leakchecker (0.74.4): |
|
722 |
+ - React-Fabric/leakchecker (0.74.5): |
|
723 | 723 |
- DoubleConversion |
724 | 724 |
- fmt (= 9.1.0) |
725 | 725 |
- glog |
... | ... | @@ -738,7 +738,7 @@ |
738 | 738 |
- React-runtimescheduler |
739 | 739 |
- React-utils |
740 | 740 |
- ReactCommon/turbomodule/core |
741 |
- - React-Fabric/mounting (0.74.4): |
|
741 |
+ - React-Fabric/mounting (0.74.5): |
|
742 | 742 |
- DoubleConversion |
743 | 743 |
- fmt (= 9.1.0) |
744 | 744 |
- glog |
... | ... | @@ -757,7 +757,7 @@ |
757 | 757 |
- React-runtimescheduler |
758 | 758 |
- React-utils |
759 | 759 |
- ReactCommon/turbomodule/core |
760 |
- - React-Fabric/scheduler (0.74.4): |
|
760 |
+ - React-Fabric/scheduler (0.74.5): |
|
761 | 761 |
- DoubleConversion |
762 | 762 |
- fmt (= 9.1.0) |
763 | 763 |
- glog |
... | ... | @@ -776,7 +776,7 @@ |
776 | 776 |
- React-runtimescheduler |
777 | 777 |
- React-utils |
778 | 778 |
- ReactCommon/turbomodule/core |
779 |
- - React-Fabric/telemetry (0.74.4): |
|
779 |
+ - React-Fabric/telemetry (0.74.5): |
|
780 | 780 |
- DoubleConversion |
781 | 781 |
- fmt (= 9.1.0) |
782 | 782 |
- glog |
... | ... | @@ -795,7 +795,7 @@ |
795 | 795 |
- React-runtimescheduler |
796 | 796 |
- React-utils |
797 | 797 |
- ReactCommon/turbomodule/core |
798 |
- - React-Fabric/templateprocessor (0.74.4): |
|
798 |
+ - React-Fabric/templateprocessor (0.74.5): |
|
799 | 799 |
- DoubleConversion |
800 | 800 |
- fmt (= 9.1.0) |
801 | 801 |
- glog |
... | ... | @@ -814,7 +814,7 @@ |
814 | 814 |
- React-runtimescheduler |
815 | 815 |
- React-utils |
816 | 816 |
- ReactCommon/turbomodule/core |
817 |
- - React-Fabric/textlayoutmanager (0.74.4): |
|
817 |
+ - React-Fabric/textlayoutmanager (0.74.5): |
|
818 | 818 |
- DoubleConversion |
819 | 819 |
- fmt (= 9.1.0) |
820 | 820 |
- glog |
... | ... | @@ -834,7 +834,7 @@ |
834 | 834 |
- React-runtimescheduler |
835 | 835 |
- React-utils |
836 | 836 |
- ReactCommon/turbomodule/core |
837 |
- - React-Fabric/uimanager (0.74.4): |
|
837 |
+ - React-Fabric/uimanager (0.74.5): |
|
838 | 838 |
- DoubleConversion |
839 | 839 |
- fmt (= 9.1.0) |
840 | 840 |
- glog |
... | ... | @@ -853,45 +853,45 @@ |
853 | 853 |
- React-runtimescheduler |
854 | 854 |
- React-utils |
855 | 855 |
- ReactCommon/turbomodule/core |
856 |
- - React-FabricImage (0.74.4): |
|
856 |
+ - React-FabricImage (0.74.5): |
|
857 | 857 |
- DoubleConversion |
858 | 858 |
- fmt (= 9.1.0) |
859 | 859 |
- glog |
860 | 860 |
- hermes-engine |
861 | 861 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
862 |
- - RCTRequired (= 0.74.4) |
|
863 |
- - RCTTypeSafety (= 0.74.4) |
|
862 |
+ - RCTRequired (= 0.74.5) |
|
863 |
+ - RCTTypeSafety (= 0.74.5) |
|
864 | 864 |
- React-Fabric |
865 | 865 |
- React-graphics |
866 | 866 |
- React-ImageManager |
867 | 867 |
- React-jsi |
868 |
- - React-jsiexecutor (= 0.74.4) |
|
868 |
+ - React-jsiexecutor (= 0.74.5) |
|
869 | 869 |
- React-logger |
870 | 870 |
- React-rendererdebug |
871 | 871 |
- React-utils |
872 | 872 |
- ReactCommon |
873 | 873 |
- Yoga |
874 |
- - React-featureflags (0.74.4) |
|
875 |
- - React-graphics (0.74.4): |
|
874 |
+ - React-featureflags (0.74.5) |
|
875 |
+ - React-graphics (0.74.5): |
|
876 | 876 |
- DoubleConversion |
877 | 877 |
- fmt (= 9.1.0) |
878 | 878 |
- glog |
879 | 879 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
880 |
- - React-Core/Default (= 0.74.4) |
|
880 |
+ - React-Core/Default (= 0.74.5) |
|
881 | 881 |
- React-utils |
882 |
- - React-hermes (0.74.4): |
|
882 |
+ - React-hermes (0.74.5): |
|
883 | 883 |
- DoubleConversion |
884 | 884 |
- fmt (= 9.1.0) |
885 | 885 |
- glog |
886 | 886 |
- hermes-engine |
887 | 887 |
- RCT-Folly (= 2024.01.01.00) |
888 |
- - React-cxxreact (= 0.74.4) |
|
888 |
+ - React-cxxreact (= 0.74.5) |
|
889 | 889 |
- React-jsi |
890 |
- - React-jsiexecutor (= 0.74.4) |
|
890 |
+ - React-jsiexecutor (= 0.74.5) |
|
891 | 891 |
- React-jsinspector |
892 |
- - React-perflogger (= 0.74.4) |
|
892 |
+ - React-perflogger (= 0.74.5) |
|
893 | 893 |
- React-runtimeexecutor |
894 |
- - React-ImageManager (0.74.4): |
|
894 |
+ - React-ImageManager (0.74.5): |
|
895 | 895 |
- glog |
896 | 896 |
- RCT-Folly/Fabric |
897 | 897 |
- React-Core/Default |
... | ... | @@ -900,74 +900,55 @@ |
900 | 900 |
- React-graphics |
901 | 901 |
- React-rendererdebug |
902 | 902 |
- React-utils |
903 |
- - React-jserrorhandler (0.74.4): |
|
903 |
+ - React-jserrorhandler (0.74.5): |
|
904 | 904 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
905 | 905 |
- React-debug |
906 | 906 |
- React-jsi |
907 | 907 |
- React-Mapbuffer |
908 |
- - React-jsi (0.74.4): |
|
908 |
+ - React-jsi (0.74.5): |
|
909 | 909 |
- boost (= 1.83.0) |
910 | 910 |
- DoubleConversion |
911 | 911 |
- fmt (= 9.1.0) |
912 | 912 |
- glog |
913 | 913 |
- hermes-engine |
914 | 914 |
- RCT-Folly (= 2024.01.01.00) |
915 |
- - React-jsiexecutor (0.74.4): |
|
915 |
+ - React-jsiexecutor (0.74.5): |
|
916 | 916 |
- DoubleConversion |
917 | 917 |
- fmt (= 9.1.0) |
918 | 918 |
- glog |
919 | 919 |
- hermes-engine |
920 | 920 |
- RCT-Folly (= 2024.01.01.00) |
921 |
- - React-cxxreact (= 0.74.4) |
|
922 |
- - React-jsi (= 0.74.4) |
|
921 |
+ - React-cxxreact (= 0.74.5) |
|
922 |
+ - React-jsi (= 0.74.5) |
|
923 | 923 |
- React-jsinspector |
924 |
- - React-perflogger (= 0.74.4) |
|
925 |
- - React-jsinspector (0.74.4): |
|
924 |
+ - React-perflogger (= 0.74.5) |
|
925 |
+ - React-jsinspector (0.74.5): |
|
926 | 926 |
- DoubleConversion |
927 | 927 |
- glog |
928 | 928 |
- hermes-engine |
929 | 929 |
- RCT-Folly (= 2024.01.01.00) |
930 | 930 |
- React-featureflags |
931 | 931 |
- React-jsi |
932 |
- - React-runtimeexecutor (= 0.74.4) |
|
933 |
- - React-jsitracing (0.74.4): |
|
932 |
+ - React-runtimeexecutor (= 0.74.5) |
|
933 |
+ - React-jsitracing (0.74.5): |
|
934 | 934 |
- React-jsi |
935 |
- - React-logger (0.74.4): |
|
935 |
+ - React-logger (0.74.5): |
|
936 | 936 |
- glog |
937 |
- - React-Mapbuffer (0.74.4): |
|
937 |
+ - React-Mapbuffer (0.74.5): |
|
938 | 938 |
- glog |
939 | 939 |
- React-debug |
940 |
- - react-native-background-actions (4.0.0): |
|
941 |
- - React-Core |
|
942 |
- - react-native-geolocation (3.3.0): |
|
943 |
- - DoubleConversion |
|
944 |
- - glog |
|
945 |
- - hermes-engine |
|
946 |
- - RCT-Folly (= 2024.01.01.00) |
|
947 |
- - RCTRequired |
|
948 |
- - RCTTypeSafety |
|
949 |
- - React-Codegen |
|
950 |
- - React-Core |
|
951 |
- - React-debug |
|
952 |
- - React-Fabric |
|
953 |
- - React-featureflags |
|
954 |
- - React-graphics |
|
955 |
- - React-ImageManager |
|
956 |
- - React-NativeModulesApple |
|
957 |
- - React-RCTFabric |
|
958 |
- - React-rendererdebug |
|
959 |
- - React-utils |
|
960 |
- - ReactCommon/turbomodule/bridging |
|
961 |
- - ReactCommon/turbomodule/core |
|
962 |
- - Yoga |
|
940 |
+ - react-native-exif (0.5.0): |
|
941 |
+ - React |
|
963 | 942 |
- react-native-geolocation-service (5.3.1): |
964 | 943 |
- React |
944 |
+ - react-native-image-resizer (3.0.10): |
|
945 |
+ - React-Core |
|
965 | 946 |
- react-native-keep-awake (1.2.4): |
966 | 947 |
- React-Core |
967 |
- - react-native-safe-area-context (4.10.1): |
|
948 |
+ - react-native-safe-area-context (4.10.8): |
|
968 | 949 |
- React-Core |
969 |
- - React-nativeconfig (0.74.4) |
|
970 |
- - React-NativeModulesApple (0.74.4): |
|
950 |
+ - React-nativeconfig (0.74.5) |
|
951 |
+ - React-NativeModulesApple (0.74.5): |
|
971 | 952 |
- glog |
972 | 953 |
- hermes-engine |
973 | 954 |
- React-callinvoker |
... | ... | @@ -978,10 +959,10 @@ |
978 | 959 |
- React-runtimeexecutor |
979 | 960 |
- ReactCommon/turbomodule/bridging |
980 | 961 |
- ReactCommon/turbomodule/core |
981 |
- - React-perflogger (0.74.4) |
|
982 |
- - React-RCTActionSheet (0.74.4): |
|
983 |
- - React-Core/RCTActionSheetHeaders (= 0.74.4) |
|
984 |
- - React-RCTAnimation (0.74.4): |
|
962 |
+ - React-perflogger (0.74.5) |
|
963 |
+ - React-RCTActionSheet (0.74.5): |
|
964 |
+ - React-Core/RCTActionSheetHeaders (= 0.74.5) |
|
965 |
+ - React-RCTAnimation (0.74.5): |
|
985 | 966 |
- RCT-Folly (= 2024.01.01.00) |
986 | 967 |
- RCTTypeSafety |
987 | 968 |
- React-Codegen |
... | ... | @@ -989,7 +970,7 @@ |
989 | 970 |
- React-jsi |
990 | 971 |
- React-NativeModulesApple |
991 | 972 |
- ReactCommon |
992 |
- - React-RCTAppDelegate (0.74.4): |
|
973 |
+ - React-RCTAppDelegate (0.74.5): |
|
993 | 974 |
- RCT-Folly (= 2024.01.01.00) |
994 | 975 |
- RCTRequired |
995 | 976 |
- RCTTypeSafety |
... | ... | @@ -1013,7 +994,7 @@ |
1013 | 994 |
- React-runtimescheduler |
1014 | 995 |
- React-utils |
1015 | 996 |
- ReactCommon |
1016 |
- - React-RCTBlob (0.74.4): |
|
997 |
+ - React-RCTBlob (0.74.5): |
|
1017 | 998 |
- DoubleConversion |
1018 | 999 |
- fmt (= 9.1.0) |
1019 | 1000 |
- hermes-engine |
... | ... | @@ -1026,7 +1007,7 @@ |
1026 | 1007 |
- React-NativeModulesApple |
1027 | 1008 |
- React-RCTNetwork |
1028 | 1009 |
- ReactCommon |
1029 |
- - React-RCTFabric (0.74.4): |
|
1010 |
+ - React-RCTFabric (0.74.5): |
|
1030 | 1011 |
- glog |
1031 | 1012 |
- hermes-engine |
1032 | 1013 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
... | ... | @@ -1046,7 +1027,7 @@ |
1046 | 1027 |
- React-runtimescheduler |
1047 | 1028 |
- React-utils |
1048 | 1029 |
- Yoga |
1049 |
- - React-RCTImage (0.74.4): |
|
1030 |
+ - React-RCTImage (0.74.5): |
|
1050 | 1031 |
- RCT-Folly (= 2024.01.01.00) |
1051 | 1032 |
- RCTTypeSafety |
1052 | 1033 |
- React-Codegen |
... | ... | @@ -1055,14 +1036,14 @@ |
1055 | 1036 |
- React-NativeModulesApple |
1056 | 1037 |
- React-RCTNetwork |
1057 | 1038 |
- ReactCommon |
1058 |
- - React-RCTLinking (0.74.4): |
|
1039 |
+ - React-RCTLinking (0.74.5): |
|
1059 | 1040 |
- React-Codegen |
1060 |
- - React-Core/RCTLinkingHeaders (= 0.74.4) |
|
1061 |
- - React-jsi (= 0.74.4) |
|
1041 |
+ - React-Core/RCTLinkingHeaders (= 0.74.5) |
|
1042 |
+ - React-jsi (= 0.74.5) |
|
1062 | 1043 |
- React-NativeModulesApple |
1063 | 1044 |
- ReactCommon |
1064 |
- - ReactCommon/turbomodule/core (= 0.74.4) |
|
1065 |
- - React-RCTNetwork (0.74.4): |
|
1045 |
+ - ReactCommon/turbomodule/core (= 0.74.5) |
|
1046 |
+ - React-RCTNetwork (0.74.5): |
|
1066 | 1047 |
- RCT-Folly (= 2024.01.01.00) |
1067 | 1048 |
- RCTTypeSafety |
1068 | 1049 |
- React-Codegen |
... | ... | @@ -1070,7 +1051,7 @@ |
1070 | 1051 |
- React-jsi |
1071 | 1052 |
- React-NativeModulesApple |
1072 | 1053 |
- ReactCommon |
1073 |
- - React-RCTSettings (0.74.4): |
|
1054 |
+ - React-RCTSettings (0.74.5): |
|
1074 | 1055 |
- RCT-Folly (= 2024.01.01.00) |
1075 | 1056 |
- RCTTypeSafety |
1076 | 1057 |
- React-Codegen |
... | ... | @@ -1078,23 +1059,23 @@ |
1078 | 1059 |
- React-jsi |
1079 | 1060 |
- React-NativeModulesApple |
1080 | 1061 |
- ReactCommon |
1081 |
- - React-RCTText (0.74.4): |
|
1082 |
- - React-Core/RCTTextHeaders (= 0.74.4) |
|
1062 |
+ - React-RCTText (0.74.5): |
|
1063 |
+ - React-Core/RCTTextHeaders (= 0.74.5) |
|
1083 | 1064 |
- Yoga |
1084 |
- - React-RCTVibration (0.74.4): |
|
1065 |
+ - React-RCTVibration (0.74.5): |
|
1085 | 1066 |
- RCT-Folly (= 2024.01.01.00) |
1086 | 1067 |
- React-Codegen |
1087 | 1068 |
- React-Core/RCTVibrationHeaders |
1088 | 1069 |
- React-jsi |
1089 | 1070 |
- React-NativeModulesApple |
1090 | 1071 |
- ReactCommon |
1091 |
- - React-rendererdebug (0.74.4): |
|
1072 |
+ - React-rendererdebug (0.74.5): |
|
1092 | 1073 |
- DoubleConversion |
1093 | 1074 |
- fmt (= 9.1.0) |
1094 | 1075 |
- RCT-Folly (= 2024.01.01.00) |
1095 | 1076 |
- React-debug |
1096 |
- - React-rncore (0.74.4) |
|
1097 |
- - React-RuntimeApple (0.74.4): |
|
1077 |
+ - React-rncore (0.74.5) |
|
1078 |
+ - React-RuntimeApple (0.74.5): |
|
1098 | 1079 |
- hermes-engine |
1099 | 1080 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
1100 | 1081 |
- React-callinvoker |
... | ... | @@ -1112,7 +1093,7 @@ |
1112 | 1093 |
- React-runtimeexecutor |
1113 | 1094 |
- React-RuntimeHermes |
1114 | 1095 |
- React-utils |
1115 |
- - React-RuntimeCore (0.74.4): |
|
1096 |
+ - React-RuntimeCore (0.74.5): |
|
1116 | 1097 |
- glog |
1117 | 1098 |
- hermes-engine |
1118 | 1099 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
... | ... | @@ -1125,9 +1106,9 @@ |
1125 | 1106 |
- React-runtimeexecutor |
1126 | 1107 |
- React-runtimescheduler |
1127 | 1108 |
- React-utils |
1128 |
- - React-runtimeexecutor (0.74.4): |
|
1129 |
- - React-jsi (= 0.74.4) |
|
1130 |
- - React-RuntimeHermes (0.74.4): |
|
1109 |
+ - React-runtimeexecutor (0.74.5): |
|
1110 |
+ - React-jsi (= 0.74.5) |
|
1111 |
+ - React-RuntimeHermes (0.74.5): |
|
1131 | 1112 |
- hermes-engine |
1132 | 1113 |
- RCT-Folly/Fabric (= 2024.01.01.00) |
1133 | 1114 |
- React-featureflags |
... | ... | @@ -1138,7 +1119,7 @@ |
1138 | 1119 |
- React-nativeconfig |
1139 | 1120 |
- React-RuntimeCore |
1140 | 1121 |
- React-utils |
1141 |
- - React-runtimescheduler (0.74.4): |
|
1122 |
+ - React-runtimescheduler (0.74.5): |
|
1142 | 1123 |
- glog |
1143 | 1124 |
- hermes-engine |
1144 | 1125 |
- RCT-Folly (= 2024.01.01.00) |
... | ... | @@ -1150,56 +1131,56 @@ |
1150 | 1131 |
- React-rendererdebug |
1151 | 1132 |
- React-runtimeexecutor |
1152 | 1133 |
- React-utils |
1153 |
- - React-utils (0.74.4): |
|
1134 |
+ - React-utils (0.74.5): |
|
1154 | 1135 |
- glog |
1155 | 1136 |
- hermes-engine |
1156 | 1137 |
- RCT-Folly (= 2024.01.01.00) |
1157 | 1138 |
- React-debug |
1158 |
- - React-jsi (= 0.74.4) |
|
1159 |
- - ReactCommon (0.74.4): |
|
1160 |
- - ReactCommon/turbomodule (= 0.74.4) |
|
1161 |
- - ReactCommon/turbomodule (0.74.4): |
|
1139 |
+ - React-jsi (= 0.74.5) |
|
1140 |
+ - ReactCommon (0.74.5): |
|
1141 |
+ - ReactCommon/turbomodule (= 0.74.5) |
|
1142 |
+ - ReactCommon/turbomodule (0.74.5): |
|
1162 | 1143 |
- DoubleConversion |
1163 | 1144 |
- fmt (= 9.1.0) |
1164 | 1145 |
- glog |
1165 | 1146 |
- hermes-engine |
1166 | 1147 |
- RCT-Folly (= 2024.01.01.00) |
1167 |
- - React-callinvoker (= 0.74.4) |
|
1168 |
- - React-cxxreact (= 0.74.4) |
|
1169 |
- - React-jsi (= 0.74.4) |
|
1170 |
- - React-logger (= 0.74.4) |
|
1171 |
- - React-perflogger (= 0.74.4) |
|
1172 |
- - ReactCommon/turbomodule/bridging (= 0.74.4) |
|
1173 |
- - ReactCommon/turbomodule/core (= 0.74.4) |
|
1174 |
- - ReactCommon/turbomodule/bridging (0.74.4): |
|
1148 |
+ - React-callinvoker (= 0.74.5) |
|
1149 |
+ - React-cxxreact (= 0.74.5) |
|
1150 |
+ - React-jsi (= 0.74.5) |
|
1151 |
+ - React-logger (= 0.74.5) |
|
1152 |
+ - React-perflogger (= 0.74.5) |
|
1153 |
+ - ReactCommon/turbomodule/bridging (= 0.74.5) |
|
1154 |
+ - ReactCommon/turbomodule/core (= 0.74.5) |
|
1155 |
+ - ReactCommon/turbomodule/bridging (0.74.5): |
|
1175 | 1156 |
- DoubleConversion |
1176 | 1157 |
- fmt (= 9.1.0) |
1177 | 1158 |
- glog |
1178 | 1159 |
- hermes-engine |
1179 | 1160 |
- RCT-Folly (= 2024.01.01.00) |
1180 |
- - React-callinvoker (= 0.74.4) |
|
1181 |
- - React-cxxreact (= 0.74.4) |
|
1182 |
- - React-jsi (= 0.74.4) |
|
1183 |
- - React-logger (= 0.74.4) |
|
1184 |
- - React-perflogger (= 0.74.4) |
|
1185 |
- - ReactCommon/turbomodule/core (0.74.4): |
|
1161 |
+ - React-callinvoker (= 0.74.5) |
|
1162 |
+ - React-cxxreact (= 0.74.5) |
|
1163 |
+ - React-jsi (= 0.74.5) |
|
1164 |
+ - React-logger (= 0.74.5) |
|
1165 |
+ - React-perflogger (= 0.74.5) |
|
1166 |
+ - ReactCommon/turbomodule/core (0.74.5): |
|
1186 | 1167 |
- DoubleConversion |
1187 | 1168 |
- fmt (= 9.1.0) |
1188 | 1169 |
- glog |
1189 | 1170 |
- hermes-engine |
1190 | 1171 |
- RCT-Folly (= 2024.01.01.00) |
1191 |
- - React-callinvoker (= 0.74.4) |
|
1192 |
- - React-cxxreact (= 0.74.4) |
|
1193 |
- - React-debug (= 0.74.4) |
|
1194 |
- - React-jsi (= 0.74.4) |
|
1195 |
- - React-logger (= 0.74.4) |
|
1196 |
- - React-perflogger (= 0.74.4) |
|
1197 |
- - React-utils (= 0.74.4) |
|
1198 |
- - RNCAsyncStorage (1.23.1): |
|
1172 |
+ - React-callinvoker (= 0.74.5) |
|
1173 |
+ - React-cxxreact (= 0.74.5) |
|
1174 |
+ - React-debug (= 0.74.5) |
|
1175 |
+ - React-jsi (= 0.74.5) |
|
1176 |
+ - React-logger (= 0.74.5) |
|
1177 |
+ - React-perflogger (= 0.74.5) |
|
1178 |
+ - React-utils (= 0.74.5) |
|
1179 |
+ - RNCAsyncStorage (1.24.0): |
|
1199 | 1180 |
- React-Core |
1200 | 1181 |
- RNFS (2.20.0): |
1201 | 1182 |
- React-Core |
1202 |
- - RNGestureHandler (2.17.1): |
|
1183 |
+ - RNGestureHandler (2.18.1): |
|
1203 | 1184 |
- DoubleConversion |
1204 | 1185 |
- glog |
1205 | 1186 |
- hermes-engine |
... | ... | @@ -1222,7 +1203,30 @@ |
1222 | 1203 |
- Yoga |
1223 | 1204 |
- RNPermissions (4.1.5): |
1224 | 1205 |
- React-Core |
1225 |
- - RNReanimated (3.11.0): |
|
1206 |
+ - RNReanimated (3.15.0): |
|
1207 |
+ - DoubleConversion |
|
1208 |
+ - glog |
|
1209 |
+ - hermes-engine |
|
1210 |
+ - RCT-Folly (= 2024.01.01.00) |
|
1211 |
+ - RCTRequired |
|
1212 |
+ - RCTTypeSafety |
|
1213 |
+ - React-Codegen |
|
1214 |
+ - React-Core |
|
1215 |
+ - React-debug |
|
1216 |
+ - React-Fabric |
|
1217 |
+ - React-featureflags |
|
1218 |
+ - React-graphics |
|
1219 |
+ - React-ImageManager |
|
1220 |
+ - React-NativeModulesApple |
|
1221 |
+ - React-RCTFabric |
|
1222 |
+ - React-rendererdebug |
|
1223 |
+ - React-utils |
|
1224 |
+ - ReactCommon/turbomodule/bridging |
|
1225 |
+ - ReactCommon/turbomodule/core |
|
1226 |
+ - RNReanimated/reanimated (= 3.15.0) |
|
1227 |
+ - RNReanimated/worklets (= 3.15.0) |
|
1228 |
+ - Yoga |
|
1229 |
+ - RNReanimated/reanimated (3.15.0): |
|
1226 | 1230 |
- DoubleConversion |
1227 | 1231 |
- glog |
1228 | 1232 |
- hermes-engine |
... | ... | @@ -1243,7 +1247,28 @@ |
1243 | 1247 |
- ReactCommon/turbomodule/bridging |
1244 | 1248 |
- ReactCommon/turbomodule/core |
1245 | 1249 |
- Yoga |
1246 |
- - RNScreens (3.31.1): |
|
1250 |
+ - RNReanimated/worklets (3.15.0): |
|
1251 |
+ - DoubleConversion |
|
1252 |
+ - glog |
|
1253 |
+ - hermes-engine |
|
1254 |
+ - RCT-Folly (= 2024.01.01.00) |
|
1255 |
+ - RCTRequired |
|
1256 |
+ - RCTTypeSafety |
|
1257 |
+ - React-Codegen |
|
1258 |
+ - React-Core |
|
1259 |
+ - React-debug |
|
1260 |
+ - React-Fabric |
|
1261 |
+ - React-featureflags |
|
1262 |
+ - React-graphics |
|
1263 |
+ - React-ImageManager |
|
1264 |
+ - React-NativeModulesApple |
|
1265 |
+ - React-RCTFabric |
|
1266 |
+ - React-rendererdebug |
|
1267 |
+ - React-utils |
|
1268 |
+ - ReactCommon/turbomodule/bridging |
|
1269 |
+ - ReactCommon/turbomodule/core |
|
1270 |
+ - Yoga |
|
1271 |
+ - RNScreens (3.34.0): |
|
1247 | 1272 |
- DoubleConversion |
1248 | 1273 |
- glog |
1249 | 1274 |
- hermes-engine |
... | ... | @@ -1265,14 +1290,14 @@ |
1265 | 1290 |
- ReactCommon/turbomodule/bridging |
1266 | 1291 |
- ReactCommon/turbomodule/core |
1267 | 1292 |
- Yoga |
1268 |
- - RNSVG (15.3.0): |
|
1293 |
+ - RNSVG (15.7.1): |
|
1269 | 1294 |
- React-Core |
1270 | 1295 |
- SocketRocket (0.7.0) |
1271 |
- - VisionCamera (4.0.5): |
|
1272 |
- - VisionCamera/Core (= 4.0.5) |
|
1273 |
- - VisionCamera/React (= 4.0.5) |
|
1274 |
- - VisionCamera/Core (4.0.5) |
|
1275 |
- - VisionCamera/React (4.0.5): |
|
1296 |
+ - VisionCamera (4.5.1): |
|
1297 |
+ - VisionCamera/Core (= 4.5.1) |
|
1298 |
+ - VisionCamera/React (= 4.5.1) |
|
1299 |
+ - VisionCamera/Core (4.5.1) |
|
1300 |
+ - VisionCamera/React (4.5.1): |
|
1276 | 1301 |
- React-Core |
1277 | 1302 |
- Yoga (0.0.0) |
1278 | 1303 |
|
... | ... | @@ -1310,9 +1335,9 @@ |
1310 | 1335 |
- React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) |
1311 | 1336 |
- React-logger (from `../node_modules/react-native/ReactCommon/logger`) |
1312 | 1337 |
- React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) |
1313 |
- - react-native-background-actions (from `../node_modules/react-native-background-actions`) |
|
1314 |
- - "react-native-geolocation (from `../node_modules/@react-native-community/geolocation`)" |
|
1338 |
+ - react-native-exif (from `../node_modules/react-native-exif`) |
|
1315 | 1339 |
- react-native-geolocation-service (from `../node_modules/react-native-geolocation-service`) |
1340 |
+ - "react-native-image-resizer (from `../node_modules/@bam.tech/react-native-image-resizer`)" |
|
1316 | 1341 |
- "react-native-keep-awake (from `../node_modules/@sayem314/react-native-keep-awake`)" |
1317 | 1342 |
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) |
1318 | 1343 |
- React-nativeconfig (from `../node_modules/react-native/ReactCommon`) |
... | ... | @@ -1416,12 +1441,12 @@ |
1416 | 1441 |
:path: "../node_modules/react-native/ReactCommon/logger" |
1417 | 1442 |
React-Mapbuffer: |
1418 | 1443 |
:path: "../node_modules/react-native/ReactCommon" |
1419 |
- react-native-background-actions: |
|
1420 |
- :path: "../node_modules/react-native-background-actions" |
|
1421 |
- react-native-geolocation: |
|
1422 |
- :path: "../node_modules/@react-native-community/geolocation" |
|
1444 |
+ react-native-exif: |
|
1445 |
+ :path: "../node_modules/react-native-exif" |
|
1423 | 1446 |
react-native-geolocation-service: |
1424 | 1447 |
:path: "../node_modules/react-native-geolocation-service" |
1448 |
+ react-native-image-resizer: |
|
1449 |
+ :path: "../node_modules/@bam.tech/react-native-image-resizer" |
|
1425 | 1450 |
react-native-keep-awake: |
1426 | 1451 |
:path: "../node_modules/@sayem314/react-native-keep-awake" |
1427 | 1452 |
react-native-safe-area-context: |
... | ... | @@ -1495,73 +1520,73 @@ |
1495 | 1520 |
boost: d3f49c53809116a5d38da093a8aa78bf551aed09 |
1496 | 1521 |
BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3 |
1497 | 1522 |
DoubleConversion: 76ab83afb40bddeeee456813d9c04f67f78771b5 |
1498 |
- FBLazyVector: 4c674c2d53de79c145d6a723910543d7b57ed74c |
|
1523 |
+ FBLazyVector: ac12dc084d1c8ec4cc4d7b3cf1b0ebda6dab85af |
|
1499 | 1524 |
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120 |
1500 | 1525 |
glog: fdfdfe5479092de0c4bdbebedd9056951f092c4f |
1501 |
- hermes-engine: 6312f669c895e05f0f6029554061593711770ea6 |
|
1526 |
+ hermes-engine: 8c1577f3fdb849cbe7729c2e7b5abc4b845e88f8 |
|
1502 | 1527 |
RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47 |
1503 |
- RCTDeprecation: d83da85890d5bb18efd2809a733865c1c5c11487 |
|
1504 |
- RCTRequired: e109419eacfb10fbb79a3ecb57ebcad198593d8a |
|
1505 |
- RCTTypeSafety: 9d0307c2738867b9850f096914a15294124b2439 |
|
1506 |
- React: 40ad59420ae403a6d2d49f2787f0bfaabaed4fdf |
|
1507 |
- React-callinvoker: a5fb605689272d6f5640738311aa510d3f59869f |
|
1508 |
- React-Codegen: 3267a426718c8a0a979d0cd0495ba793cfdba7ca |
|
1509 |
- React-Core: b1eeb2b94117f6ef5b4b0ed38f2f8d482ce915ce |
|
1510 |
- React-CoreModules: e60a158a4e1b109ccdd781fb649f36691eb954d7 |
|
1511 |
- React-cxxreact: 3749b5548f8b66a304729e159dfaf3cfd7196c3a |
|
1512 |
- React-debug: 8e15e6d6456f9b8521958deb40157eeeaac2914d |
|
1513 |
- React-Fabric: 52cf1f94d5c6b05fe6057ba07796a633daf93735 |
|
1514 |
- React-FabricImage: 6e0f28a6ec040be4b5bd1a6e5eeda7263639a24c |
|
1515 |
- React-featureflags: 81279a0d43736e9867cf0b736c868257af04c827 |
|
1516 |
- React-graphics: 37c161d8e634526897f12837f3e62a2895dede95 |
|
1517 |
- React-hermes: 3cfa4668970c810db0f6b43bd5c32f5927fd0500 |
|
1518 |
- React-ImageManager: 276987aeb4008fe8abe10bfc53d7160c96c31052 |
|
1519 |
- React-jserrorhandler: 0cdb976ee0e2ed4b93f501491e84954f80bf5f34 |
|
1520 |
- React-jsi: 18011ef308cc43e2fb21a1de0b61eabd9f899887 |
|
1521 |
- React-jsiexecutor: 156298b2ddebed0f6bcc526edd3deb4d240437bc |
|
1522 |
- React-jsinspector: ed6c5a768dea8e344f07242bd9946b666b78228e |
|
1523 |
- React-jsitracing: 4e9c99e73a6269b27b0d4cbab277dd90df3e5ac0 |
|
1524 |
- React-logger: fbfb50e2a2b1b46ee087f0a52739fadecc5e81a4 |
|
1525 |
- React-Mapbuffer: d39610dff659d8cf1fea485abae08bbf6f9c8279 |
|
1526 |
- react-native-background-actions: a290b3f36463c2c6b7372c17378619942f630b17 |
|
1527 |
- react-native-geolocation: 5c5dd5de4571c55014e9e98214b273eed854f293 |
|
1528 |
+ RCTDeprecation: 3afceddffa65aee666dafd6f0116f1d975db1584 |
|
1529 |
+ RCTRequired: ec1239bc9d8bf63e10fb92bd8b26171a9258e0c1 |
|
1530 |
+ RCTTypeSafety: f5ecbc86c5c5fa163c05acb7a1c5012e15b5f994 |
|
1531 |
+ React: fc9fa7258eff606f44d58c5b233a82dc9cf09018 |
|
1532 |
+ React-callinvoker: e3fab14d69607fb7e8e3a57e5a415aed863d3599 |
|
1533 |
+ React-Codegen: 6fa87b7c6b8efcd0cef4bfeaec8c8bc8a6abe75a |
|
1534 |
+ React-Core: 3a5fd9e781cecf87803e5b091496a606a3df774a |
|
1535 |
+ React-CoreModules: cbf4707dafab8f9f826ac0c63a07d0bf5d01e256 |
|
1536 |
+ React-cxxreact: 7b188556271e3c7fdf22a04819f6a6225045b9dd |
|
1537 |
+ React-debug: d30893c49ae1bce4037ea5cd8bb2511d2a38d057 |
|
1538 |
+ React-Fabric: 826729dd2304fda9b89ff0a579f60ba2a470bc26 |
|
1539 |
+ React-FabricImage: 2ad1fb8ffa5778eda9ed204a7b3cdd70bc333ce7 |
|
1540 |
+ React-featureflags: 4ae83e72d9a92452793601ac9ac7d2280e486089 |
|
1541 |
+ React-graphics: 61a026e1c1e7e20d20ac9fec6f6de631732b233d |
|
1542 |
+ React-hermes: a7054fbcbda3957e3c5eaad06ef9bf79998d535a |
|
1543 |
+ React-ImageManager: 2bbd6eb2e696bc680f76f84563e4b87d241614e1 |
|
1544 |
+ React-jserrorhandler: 56fa04d49bfbe54ddfece7916673a73ebfea286b |
|
1545 |
+ React-jsi: f3ce1dd2e950b6ad12b65ea3ef89168f1b94c584 |
|
1546 |
+ React-jsiexecutor: b4df3a27973d82f9abf3c4bd0f88e042cda25f16 |
|
1547 |
+ React-jsinspector: 97ea746c023687de7313ee289817d6991d596c7d |
|
1548 |
+ React-jsitracing: 3b6060bbf5317663667e1dd93560c7943ab86ccc |
|
1549 |
+ React-logger: 257858bd55f3a4e1bc0cf07ddc8fb9faba6f8c7c |
|
1550 |
+ React-Mapbuffer: 6c1cacdbf40b531f549eba249e531a7d0bfd8e7f |
|
1551 |
+ react-native-exif: c43e7c18af8bfa133c79145671a0f036e413468e |
|
1528 | 1552 |
react-native-geolocation-service: 608e1da71a1ac31b4de64d9ef2815f697978c55b |
1553 |
+ react-native-image-resizer: fd0c333eca55147bd55c5e054cac95dcd0da6814 |
|
1529 | 1554 |
react-native-keep-awake: a15b33cd9b94a2da9b0a1c50ac64ac2391d3e330 |
1530 |
- react-native-safe-area-context: dcab599c527c2d7de2d76507a523d20a0b83823d |
|
1531 |
- React-nativeconfig: 2be4363c2c4ac2b42419577774e83e4e4fd2af9f |
|
1532 |
- React-NativeModulesApple: 453ada38f826a508e48872c7a7877c431af48bba |
|
1533 |
- React-perflogger: 9745f800ab4d12ec4325bde7bd090eafb87c5570 |
|
1534 |
- React-RCTActionSheet: 4225e883c5feaffc072c86128cc42cb070097010 |
|
1535 |
- React-RCTAnimation: 6b318e7e475ea574abf6a65e58e4989dd19d9ec4 |
|
1536 |
- React-RCTAppDelegate: 00d29b205df54386bc4e9c8929c500ed00ee1d57 |
|
1537 |
- React-RCTBlob: cf152386cc829be9323b2845fd9ec25122a986c3 |
|
1538 |
- React-RCTFabric: 071b326a331bd1ccb59e5886c0cd38e414ec9c9f |
|
1539 |
- React-RCTImage: d3d5e0f0740fbd53705f7e9acc067bafe395026c |
|
1540 |
- React-RCTLinking: 3ed7d222d3534287b408855b9d378d6576b7661b |
|
1541 |
- React-RCTNetwork: 33a6bb615c1f7678538298aed9f27ecd69d512f3 |
|
1542 |
- React-RCTSettings: bbadd0bedde8fc5f4ef337534b1368d61e104e76 |
|
1543 |
- React-RCTText: 1a41cd4ce814366745b6107e6f15eb0ada7ff240 |
|
1544 |
- React-RCTVibration: 8275c91f707e03ead0a010e9fbeda53a645335ca |
|
1545 |
- React-rendererdebug: 6ba24e1d975c89a6e92440be4f246ba8bed432c6 |
|
1546 |
- React-rncore: 65fe0264f5c93ccb65bd6cae6201c80d34e625c0 |
|
1547 |
- React-RuntimeApple: 93e7c4c6a0be2eb3ce8dc31fdddea5708cd2ad2b |
|
1548 |
- React-RuntimeCore: 1a2f2dfcba853d01c083db2b7d96f32f9768a677 |
|
1549 |
- React-runtimeexecutor: 6abf418f2d0038fb3fef15444d9c691db198771c |
|
1550 |
- React-RuntimeHermes: fb6f76a5cd4212a0af4789794d4a9f5147e2f1aa |
|
1551 |
- React-runtimescheduler: 3f312d33f475467a59864e0c5ab8708461387d1c |
|
1552 |
- React-utils: e8b0eac797c81c574b24f6515fec4015599b643c |
|
1553 |
- ReactCommon: eebffb37a90138c6db6eb8b2d952e7e5c6bc083c |
|
1554 |
- RNCAsyncStorage: 826b603ae9c0f88b5ac4e956801f755109fa4d5c |
|
1555 |
+ react-native-safe-area-context: b7daa1a8df36095a032dff095a1ea8963cb48371 |
|
1556 |
+ React-nativeconfig: ba9a2e54e2f0882cf7882698825052793ed4c851 |
|
1557 |
+ React-NativeModulesApple: 8d11ff8955181540585c944cf48e9e7236952697 |
|
1558 |
+ React-perflogger: ed4e0c65781521e0424f2e5e40b40cc7879d737e |
|
1559 |
+ React-RCTActionSheet: 49d53ff03bb5688ca4606c55859053a0cd129ea5 |
|
1560 |
+ React-RCTAnimation: 07b4923885c52c397c4ec103924bf6e53b42c73e |
|
1561 |
+ React-RCTAppDelegate: 316e295076734baf9bdf1bfac7d92ab647aed930 |
|
1562 |
+ React-RCTBlob: 85c57b0d5e667ff8a472163ba3af0628171a64bb |
|
1563 |
+ React-RCTFabric: 97c1465ded4dc92841f5376a39e43e1b2c455f40 |
|
1564 |
+ React-RCTImage: b965c85bec820e2a9c154b1fb00a2ecdd59a9c92 |
|
1565 |
+ React-RCTLinking: 75f04a5f27c26c4e73a39c50df470820d219df79 |
|
1566 |
+ React-RCTNetwork: c1a9143f4d5778efc92da40d83969d03912ccc24 |
|
1567 |
+ React-RCTSettings: c6800f91c0ecd48868cd5db754b0b0a7f5ffe039 |
|
1568 |
+ React-RCTText: b923e24f9b7250bc4f7ab154c4168ad9f8d8fc9d |
|
1569 |
+ React-RCTVibration: 08c4f0c917c435b3619386c25a94ee5d64c250f0 |
|
1570 |
+ React-rendererdebug: 3cda04217d9df67b94397ee0ead8ef3d8b7e427b |
|
1571 |
+ React-rncore: 4013508a2f3fcf46c961919bbbd4bfdda198977e |
|
1572 |
+ React-RuntimeApple: 447844a2bdb0a03ffd24e5b4a4b96cfc50325b88 |
|
1573 |
+ React-RuntimeCore: 9b5bffdaccee9b707b1c2694c9044e13ff0bb087 |
|
1574 |
+ React-runtimeexecutor: 0e688aefc14c6bc8601f4968d8d01c3fb6446844 |
|
1575 |
+ React-RuntimeHermes: 4d6ef6bb0f2b0b40d59143317f6b99c82764c959 |
|
1576 |
+ React-runtimescheduler: cfbe85c3510c541ec6dc815c7729b41304b67961 |
|
1577 |
+ React-utils: f242eb7e7889419d979ca0e1c02ccc0ea6e43b29 |
|
1578 |
+ ReactCommon: f7da14a8827b72704169a48c929bcde802698361 |
|
1579 |
+ RNCAsyncStorage: ec53e44dc3e75b44aa2a9f37618a49c3bc080a7a |
|
1555 | 1580 |
RNFS: 4ac0f0ea233904cb798630b3c077808c06931688 |
1556 |
- RNGestureHandler: 8dbcccada4a7e702e7dec9338c251b1cf393c960 |
|
1581 |
+ RNGestureHandler: efed690b8493a00b99654043daeb1335276ac4a2 |
|
1557 | 1582 |
RNPermissions: 6a1360ea53826cd3013fcf6e79dcf5dbf72f66b2 |
1558 |
- RNReanimated: 7ad0f08a845cb60955ee5d461d2156d7b9707118 |
|
1559 |
- RNScreens: b32a9ff15bea7fcdbe5dff6477bc503f792b1208 |
|
1560 |
- RNSVG: a48668fd382115bc89761ce291a81c4ca5f2fd2e |
|
1583 |
+ RNReanimated: 45553a3ae29a75a76269595f8554d07d4090e392 |
|
1584 |
+ RNScreens: aa943ad421c3ced3ef5a47ede02b0cbfc43a012e |
|
1585 |
+ RNSVG: 4590aa95758149fa27c5c83e54a6a466349a1688 |
|
1561 | 1586 |
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d |
1562 |
- VisionCamera: 59949b04a51c00a52a6d7125425d01664792c9bd |
|
1563 |
- Yoga: 0efb3e1bd40ba59b009f01badea863281101de78 |
|
1587 |
+ VisionCamera: 104de00dce2e04dec51bfb6027eff0312fa3174e |
|
1588 |
+ Yoga: 950bbfd7e6f04790fdb51149ed51df41f329fcc8 |
|
1564 | 1589 |
|
1565 |
-PODFILE CHECKSUM: bf0cdc7218ece3fb280b317225cd8be410cb4dd1 |
|
1590 |
+PODFILE CHECKSUM: 5a82d4d15afa17968d730a16edfce00033297a78 |
|
1566 | 1591 |
|
1567 | 1592 |
COCOAPODS: 1.15.2 |
+++ ios/background.swift
... | ... | @@ -0,0 +1,8 @@ |
1 | +// | |
2 | +// background.swift | |
3 | +// kic | |
4 | +// | |
5 | +// Created by 류윤주 on 8/7/24. | |
6 | +// | |
7 | + | |
8 | +import Foundation |
+++ ios/kic-Bridging-Header.h
... | ... | @@ -0,0 +1,4 @@ |
1 | +// | |
2 | +// Use this file to import your target's public headers that you would like to expose to Swift. | |
3 | +// | |
4 | + |
+++ ios/kic.xcodeproj/project.pbxproj
... | ... | @@ -0,0 +1,803 @@ |
1 | +// !$*UTF8*$! | |
2 | +{ | |
3 | + archiveVersion = 1; | |
4 | + classes = { | |
5 | + }; | |
6 | + objectVersion = 54; | |
7 | + objects = { | |
8 | + | |
9 | +/* Begin PBXBuildFile section */ | |
10 | + 00E356F31AD99517003FC87E /* kicTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* kicTests.m */; }; | |
11 | + 0C80B921A6F3F58F76C31292 /* libPods-kic.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-kic.a */; }; | |
12 | + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; | |
13 | + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; | |
14 | + 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; | |
15 | + 7699B88040F8A987B510C191 /* libPods-kic-kicTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-kic-kicTests.a */; }; | |
16 | + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; | |
17 | + 8C5B8FFDD04E998A8479C881 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = A75060D03500A85683F48E4E /* PrivacyInfo.xcprivacy */; }; | |
18 | + ED8583632C634116003406E5 /* background.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED8583622C634116003406E5 /* background.swift */; }; | |
19 | + EDDB63C52C63674200AD1F9F /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C92C626F9D0031B9D9 /* AntDesign.ttf */; }; | |
20 | + EDDB63C62C63674200AD1F9F /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C72C626F9D0031B9D9 /* Entypo.ttf */; }; | |
21 | + EDDB63C72C63674200AD1F9F /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5CC2C626F9D0031B9D9 /* EvilIcons.ttf */; }; | |
22 | + EDDB63C82C63674200AD1F9F /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5BB2C626F9D0031B9D9 /* Feather.ttf */; }; | |
23 | + EDDB63C92C63674200AD1F9F /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C52C626F9D0031B9D9 /* FontAwesome.ttf */; }; | |
24 | + EDDB63CA2C63674200AD1F9F /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C12C626F9D0031B9D9 /* FontAwesome5_Brands.ttf */; }; | |
25 | + EDDB63CB2C63674200AD1F9F /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5BF2C626F9D0031B9D9 /* FontAwesome5_Regular.ttf */; }; | |
26 | + EDDB63CC2C63674200AD1F9F /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C62C626F9D0031B9D9 /* FontAwesome5_Solid.ttf */; }; | |
27 | + EDDB63CD2C63674200AD1F9F /* FontAwesome6_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5CA2C626F9D0031B9D9 /* FontAwesome6_Brands.ttf */; }; | |
28 | + EDDB63CE2C63674200AD1F9F /* FontAwesome6_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5BD2C626F9D0031B9D9 /* FontAwesome6_Regular.ttf */; }; | |
29 | + EDDB63CF2C63674200AD1F9F /* FontAwesome6_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C02C626F9D0031B9D9 /* FontAwesome6_Solid.ttf */; }; | |
30 | + EDDB63D02C63674200AD1F9F /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5CB2C626F9D0031B9D9 /* Fontisto.ttf */; }; | |
31 | + EDDB63D12C63674200AD1F9F /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5BE2C626F9D0031B9D9 /* Foundation.ttf */; }; | |
32 | + EDDB63D22C63674200AD1F9F /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C42C626F9D0031B9D9 /* Ionicons.ttf */; }; | |
33 | + EDDB63D32C63674200AD1F9F /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C22C626F9D0031B9D9 /* MaterialCommunityIcons.ttf */; }; | |
34 | + EDDB63D42C63674200AD1F9F /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5BC2C626F9D0031B9D9 /* MaterialIcons.ttf */; }; | |
35 | + EDDB63D52C63674200AD1F9F /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C82C626F9D0031B9D9 /* Octicons.ttf */; }; | |
36 | + EDDB63D62C63674200AD1F9F /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5CD2C626F9D0031B9D9 /* SimpleLineIcons.ttf */; }; | |
37 | + EDDB63D72C63674200AD1F9F /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ED56E5C32C626F9D0031B9D9 /* Zocial.ttf */; }; | |
38 | +/* End PBXBuildFile section */ | |
39 | + | |
40 | +/* Begin PBXContainerItemProxy section */ | |
41 | + 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { | |
42 | + isa = PBXContainerItemProxy; | |
43 | + containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; | |
44 | + proxyType = 1; | |
45 | + remoteGlobalIDString = 13B07F861A680F5B00A75B9A; | |
46 | + remoteInfo = kic; | |
47 | + }; | |
48 | +/* End PBXContainerItemProxy section */ | |
49 | + | |
50 | +/* Begin PBXFileReference section */ | |
51 | + 00E356EE1AD99517003FC87E /* kicTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = kicTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; | |
52 | + 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | |
53 | + 00E356F21AD99517003FC87E /* kicTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = kicTests.m; sourceTree = "<group>"; }; | |
54 | + 13B07F961A680F5B00A75B9A /* kic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = kic.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |
55 | + 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = kic/AppDelegate.h; sourceTree = "<group>"; }; | |
56 | + 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = kic/AppDelegate.mm; sourceTree = "<group>"; }; | |
57 | + 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = kic/Images.xcassets; sourceTree = "<group>"; }; | |
58 | + 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = kic/Info.plist; sourceTree = "<group>"; }; | |
59 | + 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = kic/main.m; sourceTree = "<group>"; }; | |
60 | + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = kic/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; | |
61 | + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-kic-kicTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-kic-kicTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; | |
62 | + 3B4392A12AC88292D35C810B /* Pods-kic.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-kic.debug.xcconfig"; path = "Target Support Files/Pods-kic/Pods-kic.debug.xcconfig"; sourceTree = "<group>"; }; | |
63 | + 5709B34CF0A7D63546082F79 /* Pods-kic.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-kic.release.xcconfig"; path = "Target Support Files/Pods-kic/Pods-kic.release.xcconfig"; sourceTree = "<group>"; }; | |
64 | + 5B7EB9410499542E8C5724F5 /* Pods-kic-kicTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-kic-kicTests.debug.xcconfig"; path = "Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests.debug.xcconfig"; sourceTree = "<group>"; }; | |
65 | + 5DCACB8F33CDC322A6C60F78 /* libPods-kic.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-kic.a"; sourceTree = BUILT_PRODUCTS_DIR; }; | |
66 | + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = kic/LaunchScreen.storyboard; sourceTree = "<group>"; }; | |
67 | + 89C6BE57DB24E9ADA2F236DE /* Pods-kic-kicTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-kic-kicTests.release.xcconfig"; path = "Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests.release.xcconfig"; sourceTree = "<group>"; }; | |
68 | + A75060D03500A85683F48E4E /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = kic/PrivacyInfo.xcprivacy; sourceTree = "<group>"; }; | |
69 | + ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; | |
70 | + ED56E5BB2C626F9D0031B9D9 /* Feather.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = "<group>"; }; | |
71 | + ED56E5BC2C626F9D0031B9D9 /* MaterialIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = "<group>"; }; | |
72 | + ED56E5BD2C626F9D0031B9D9 /* FontAwesome6_Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome6_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome6_Regular.ttf"; sourceTree = "<group>"; }; | |
73 | + ED56E5BE2C626F9D0031B9D9 /* Foundation.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = "<group>"; }; | |
74 | + ED56E5BF2C626F9D0031B9D9 /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = "<group>"; }; | |
75 | + ED56E5C02C626F9D0031B9D9 /* FontAwesome6_Solid.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome6_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome6_Solid.ttf"; sourceTree = "<group>"; }; | |
76 | + ED56E5C12C626F9D0031B9D9 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = "<group>"; }; | |
77 | + ED56E5C22C626F9D0031B9D9 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = "<group>"; }; | |
78 | + ED56E5C32C626F9D0031B9D9 /* Zocial.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = "<group>"; }; | |
79 | + ED56E5C42C626F9D0031B9D9 /* Ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = "<group>"; }; | |
80 | + ED56E5C52C626F9D0031B9D9 /* FontAwesome.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = "<group>"; }; | |
81 | + ED56E5C62C626F9D0031B9D9 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = "<group>"; }; | |
82 | + ED56E5C72C626F9D0031B9D9 /* Entypo.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = "<group>"; }; | |
83 | + ED56E5C82C626F9D0031B9D9 /* Octicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = "<group>"; }; | |
84 | + ED56E5C92C626F9D0031B9D9 /* AntDesign.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = "<group>"; }; | |
85 | + ED56E5CA2C626F9D0031B9D9 /* FontAwesome6_Brands.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome6_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome6_Brands.ttf"; sourceTree = "<group>"; }; | |
86 | + ED56E5CB2C626F9D0031B9D9 /* Fontisto.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = "<group>"; }; | |
87 | + ED56E5CC2C626F9D0031B9D9 /* EvilIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = "<group>"; }; | |
88 | + ED56E5CD2C626F9D0031B9D9 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = "<group>"; }; | |
89 | + ED8583612C634115003406E5 /* kic-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "kic-Bridging-Header.h"; sourceTree = "<group>"; }; | |
90 | + ED8583622C634116003406E5 /* background.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = background.swift; sourceTree = "<group>"; }; | |
91 | +/* End PBXFileReference section */ | |
92 | + | |
93 | +/* Begin PBXFrameworksBuildPhase section */ | |
94 | + 00E356EB1AD99517003FC87E /* Frameworks */ = { | |
95 | + isa = PBXFrameworksBuildPhase; | |
96 | + buildActionMask = 2147483647; | |
97 | + files = ( | |
98 | + 7699B88040F8A987B510C191 /* libPods-kic-kicTests.a in Frameworks */, | |
99 | + ); | |
100 | + runOnlyForDeploymentPostprocessing = 0; | |
101 | + }; | |
102 | + 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { | |
103 | + isa = PBXFrameworksBuildPhase; | |
104 | + buildActionMask = 2147483647; | |
105 | + files = ( | |
106 | + 0C80B921A6F3F58F76C31292 /* libPods-kic.a in Frameworks */, | |
107 | + ); | |
108 | + runOnlyForDeploymentPostprocessing = 0; | |
109 | + }; | |
110 | +/* End PBXFrameworksBuildPhase section */ | |
111 | + | |
112 | +/* Begin PBXGroup section */ | |
113 | + 00E356EF1AD99517003FC87E /* kicTests */ = { | |
114 | + isa = PBXGroup; | |
115 | + children = ( | |
116 | + 00E356F21AD99517003FC87E /* kicTests.m */, | |
117 | + 00E356F01AD99517003FC87E /* Supporting Files */, | |
118 | + ); | |
119 | + path = kicTests; | |
120 | + sourceTree = "<group>"; | |
121 | + }; | |
122 | + 00E356F01AD99517003FC87E /* Supporting Files */ = { | |
123 | + isa = PBXGroup; | |
124 | + children = ( | |
125 | + 00E356F11AD99517003FC87E /* Info.plist */, | |
126 | + ); | |
127 | + name = "Supporting Files"; | |
128 | + sourceTree = "<group>"; | |
129 | + }; | |
130 | + 13B07FAE1A68108700A75B9A /* kic */ = { | |
131 | + isa = PBXGroup; | |
132 | + children = ( | |
133 | + ED56E5BA2C626F490031B9D9 /* Fonts */, | |
134 | + 13B07FAF1A68108700A75B9A /* AppDelegate.h */, | |
135 | + 13B07FB01A68108700A75B9A /* AppDelegate.mm */, | |
136 | + 13B07FB51A68108700A75B9A /* Images.xcassets */, | |
137 | + 13B07FB61A68108700A75B9A /* Info.plist */, | |
138 | + 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, | |
139 | + 13B07FB71A68108700A75B9A /* main.m */, | |
140 | + 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, | |
141 | + A75060D03500A85683F48E4E /* PrivacyInfo.xcprivacy */, | |
142 | + ED8583622C634116003406E5 /* background.swift */, | |
143 | + ED8583612C634115003406E5 /* kic-Bridging-Header.h */, | |
144 | + ); | |
145 | + name = kic; | |
146 | + sourceTree = "<group>"; | |
147 | + }; | |
148 | + 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { | |
149 | + isa = PBXGroup; | |
150 | + children = ( | |
151 | + ED297162215061F000B7C4FE /* JavaScriptCore.framework */, | |
152 | + 5DCACB8F33CDC322A6C60F78 /* libPods-kic.a */, | |
153 | + 19F6CBCC0A4E27FBF8BF4A61 /* libPods-kic-kicTests.a */, | |
154 | + ); | |
155 | + name = Frameworks; | |
156 | + sourceTree = "<group>"; | |
157 | + }; | |
158 | + 832341AE1AAA6A7D00B99B32 /* Libraries */ = { | |
159 | + isa = PBXGroup; | |
160 | + children = ( | |
161 | + ); | |
162 | + name = Libraries; | |
163 | + sourceTree = "<group>"; | |
164 | + }; | |
165 | + 83CBB9F61A601CBA00E9B192 = { | |
166 | + isa = PBXGroup; | |
167 | + children = ( | |
168 | + 13B07FAE1A68108700A75B9A /* kic */, | |
169 | + 832341AE1AAA6A7D00B99B32 /* Libraries */, | |
170 | + 00E356EF1AD99517003FC87E /* kicTests */, | |
171 | + 83CBBA001A601CBA00E9B192 /* Products */, | |
172 | + 2D16E6871FA4F8E400B85C8A /* Frameworks */, | |
173 | + BBD78D7AC51CEA395F1C20DB /* Pods */, | |
174 | + ); | |
175 | + indentWidth = 2; | |
176 | + sourceTree = "<group>"; | |
177 | + tabWidth = 2; | |
178 | + usesTabs = 0; | |
179 | + }; | |
180 | + 83CBBA001A601CBA00E9B192 /* Products */ = { | |
181 | + isa = PBXGroup; | |
182 | + children = ( | |
183 | + 13B07F961A680F5B00A75B9A /* kic.app */, | |
184 | + 00E356EE1AD99517003FC87E /* kicTests.xctest */, | |
185 | + ); | |
186 | + name = Products; | |
187 | + sourceTree = "<group>"; | |
188 | + }; | |
189 | + BBD78D7AC51CEA395F1C20DB /* Pods */ = { | |
190 | + isa = PBXGroup; | |
191 | + children = ( | |
192 | + 3B4392A12AC88292D35C810B /* Pods-kic.debug.xcconfig */, | |
193 | + 5709B34CF0A7D63546082F79 /* Pods-kic.release.xcconfig */, | |
194 | + 5B7EB9410499542E8C5724F5 /* Pods-kic-kicTests.debug.xcconfig */, | |
195 | + 89C6BE57DB24E9ADA2F236DE /* Pods-kic-kicTests.release.xcconfig */, | |
196 | + ); | |
197 | + path = Pods; | |
198 | + sourceTree = "<group>"; | |
199 | + }; | |
200 | + ED56E5BA2C626F490031B9D9 /* Fonts */ = { | |
201 | + isa = PBXGroup; | |
202 | + children = ( | |
203 | + ED56E5C92C626F9D0031B9D9 /* AntDesign.ttf */, | |
204 | + ED56E5C72C626F9D0031B9D9 /* Entypo.ttf */, | |
205 | + ED56E5CC2C626F9D0031B9D9 /* EvilIcons.ttf */, | |
206 | + ED56E5BB2C626F9D0031B9D9 /* Feather.ttf */, | |
207 | + ED56E5C52C626F9D0031B9D9 /* FontAwesome.ttf */, | |
208 | + ED56E5C12C626F9D0031B9D9 /* FontAwesome5_Brands.ttf */, | |
209 | + ED56E5BF2C626F9D0031B9D9 /* FontAwesome5_Regular.ttf */, | |
210 | + ED56E5C62C626F9D0031B9D9 /* FontAwesome5_Solid.ttf */, | |
211 | + ED56E5CA2C626F9D0031B9D9 /* FontAwesome6_Brands.ttf */, | |
212 | + ED56E5BD2C626F9D0031B9D9 /* FontAwesome6_Regular.ttf */, | |
213 | + ED56E5C02C626F9D0031B9D9 /* FontAwesome6_Solid.ttf */, | |
214 | + ED56E5CB2C626F9D0031B9D9 /* Fontisto.ttf */, | |
215 | + ED56E5BE2C626F9D0031B9D9 /* Foundation.ttf */, | |
216 | + ED56E5C42C626F9D0031B9D9 /* Ionicons.ttf */, | |
217 | + ED56E5C22C626F9D0031B9D9 /* MaterialCommunityIcons.ttf */, | |
218 | + ED56E5BC2C626F9D0031B9D9 /* MaterialIcons.ttf */, | |
219 | + ED56E5C82C626F9D0031B9D9 /* Octicons.ttf */, | |
220 | + ED56E5CD2C626F9D0031B9D9 /* SimpleLineIcons.ttf */, | |
221 | + ED56E5C32C626F9D0031B9D9 /* Zocial.ttf */, | |
222 | + ); | |
223 | + name = Fonts; | |
224 | + sourceTree = "<group>"; | |
225 | + }; | |
226 | +/* End PBXGroup section */ | |
227 | + | |
228 | +/* Begin PBXNativeTarget section */ | |
229 | + 00E356ED1AD99517003FC87E /* kicTests */ = { | |
230 | + isa = PBXNativeTarget; | |
231 | + buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "kicTests" */; | |
232 | + buildPhases = ( | |
233 | + A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */, | |
234 | + 00E356EA1AD99517003FC87E /* Sources */, | |
235 | + 00E356EB1AD99517003FC87E /* Frameworks */, | |
236 | + 00E356EC1AD99517003FC87E /* Resources */, | |
237 | + C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */, | |
238 | + F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */, | |
239 | + ); | |
240 | + buildRules = ( | |
241 | + ); | |
242 | + dependencies = ( | |
243 | + 00E356F51AD99517003FC87E /* PBXTargetDependency */, | |
244 | + ); | |
245 | + name = kicTests; | |
246 | + productName = kicTests; | |
247 | + productReference = 00E356EE1AD99517003FC87E /* kicTests.xctest */; | |
248 | + productType = "com.apple.product-type.bundle.unit-test"; | |
249 | + }; | |
250 | + 13B07F861A680F5B00A75B9A /* kic */ = { | |
251 | + isa = PBXNativeTarget; | |
252 | + buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "kic" */; | |
253 | + buildPhases = ( | |
254 | + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, | |
255 | + 13B07F871A680F5B00A75B9A /* Sources */, | |
256 | + 13B07F8C1A680F5B00A75B9A /* Frameworks */, | |
257 | + 13B07F8E1A680F5B00A75B9A /* Resources */, | |
258 | + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, | |
259 | + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, | |
260 | + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, | |
261 | + ); | |
262 | + buildRules = ( | |
263 | + ); | |
264 | + dependencies = ( | |
265 | + ); | |
266 | + name = kic; | |
267 | + productName = kic; | |
268 | + productReference = 13B07F961A680F5B00A75B9A /* kic.app */; | |
269 | + productType = "com.apple.product-type.application"; | |
270 | + }; | |
271 | +/* End PBXNativeTarget section */ | |
272 | + | |
273 | +/* Begin PBXProject section */ | |
274 | + 83CBB9F71A601CBA00E9B192 /* Project object */ = { | |
275 | + isa = PBXProject; | |
276 | + attributes = { | |
277 | + LastUpgradeCheck = 1210; | |
278 | + TargetAttributes = { | |
279 | + 00E356ED1AD99517003FC87E = { | |
280 | + CreatedOnToolsVersion = 6.2; | |
281 | + TestTargetID = 13B07F861A680F5B00A75B9A; | |
282 | + }; | |
283 | + 13B07F861A680F5B00A75B9A = { | |
284 | + LastSwiftMigration = 1540; | |
285 | + }; | |
286 | + }; | |
287 | + }; | |
288 | + buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "kic" */; | |
289 | + compatibilityVersion = "Xcode 12.0"; | |
290 | + developmentRegion = en; | |
291 | + hasScannedForEncodings = 0; | |
292 | + knownRegions = ( | |
293 | + en, | |
294 | + Base, | |
295 | + ); | |
296 | + mainGroup = 83CBB9F61A601CBA00E9B192; | |
297 | + productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; | |
298 | + projectDirPath = ""; | |
299 | + projectRoot = ""; | |
300 | + targets = ( | |
301 | + 13B07F861A680F5B00A75B9A /* kic */, | |
302 | + 00E356ED1AD99517003FC87E /* kicTests */, | |
303 | + ); | |
304 | + }; | |
305 | +/* End PBXProject section */ | |
306 | + | |
307 | +/* Begin PBXResourcesBuildPhase section */ | |
308 | + 00E356EC1AD99517003FC87E /* Resources */ = { | |
309 | + isa = PBXResourcesBuildPhase; | |
310 | + buildActionMask = 2147483647; | |
311 | + files = ( | |
312 | + ); | |
313 | + runOnlyForDeploymentPostprocessing = 0; | |
314 | + }; | |
315 | + 13B07F8E1A680F5B00A75B9A /* Resources */ = { | |
316 | + isa = PBXResourcesBuildPhase; | |
317 | + buildActionMask = 2147483647; | |
318 | + files = ( | |
319 | + EDDB63C52C63674200AD1F9F /* AntDesign.ttf in Resources */, | |
320 | + EDDB63C62C63674200AD1F9F /* Entypo.ttf in Resources */, | |
321 | + EDDB63C72C63674200AD1F9F /* EvilIcons.ttf in Resources */, | |
322 | + EDDB63C82C63674200AD1F9F /* Feather.ttf in Resources */, | |
323 | + EDDB63C92C63674200AD1F9F /* FontAwesome.ttf in Resources */, | |
324 | + EDDB63CA2C63674200AD1F9F /* FontAwesome5_Brands.ttf in Resources */, | |
325 | + EDDB63CB2C63674200AD1F9F /* FontAwesome5_Regular.ttf in Resources */, | |
326 | + EDDB63CC2C63674200AD1F9F /* FontAwesome5_Solid.ttf in Resources */, | |
327 | + EDDB63CD2C63674200AD1F9F /* FontAwesome6_Brands.ttf in Resources */, | |
328 | + EDDB63CE2C63674200AD1F9F /* FontAwesome6_Regular.ttf in Resources */, | |
329 | + EDDB63CF2C63674200AD1F9F /* FontAwesome6_Solid.ttf in Resources */, | |
330 | + EDDB63D02C63674200AD1F9F /* Fontisto.ttf in Resources */, | |
331 | + EDDB63D12C63674200AD1F9F /* Foundation.ttf in Resources */, | |
332 | + EDDB63D22C63674200AD1F9F /* Ionicons.ttf in Resources */, | |
333 | + EDDB63D32C63674200AD1F9F /* MaterialCommunityIcons.ttf in Resources */, | |
334 | + EDDB63D42C63674200AD1F9F /* MaterialIcons.ttf in Resources */, | |
335 | + EDDB63D52C63674200AD1F9F /* Octicons.ttf in Resources */, | |
336 | + EDDB63D62C63674200AD1F9F /* SimpleLineIcons.ttf in Resources */, | |
337 | + EDDB63D72C63674200AD1F9F /* Zocial.ttf in Resources */, | |
338 | + 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, | |
339 | + 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, | |
340 | + 8C5B8FFDD04E998A8479C881 /* PrivacyInfo.xcprivacy in Resources */, | |
341 | + ); | |
342 | + runOnlyForDeploymentPostprocessing = 0; | |
343 | + }; | |
344 | +/* End PBXResourcesBuildPhase section */ | |
345 | + | |
346 | +/* Begin PBXShellScriptBuildPhase section */ | |
347 | + 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { | |
348 | + isa = PBXShellScriptBuildPhase; | |
349 | + alwaysOutOfDate = 1; | |
350 | + buildActionMask = 2147483647; | |
351 | + files = ( | |
352 | + ); | |
353 | + inputPaths = ( | |
354 | + "$(SRCROOT)/.xcode.env.local", | |
355 | + "$(SRCROOT)/.xcode.env", | |
356 | + ); | |
357 | + name = "Bundle React Native code and images"; | |
358 | + outputPaths = ( | |
359 | + ); | |
360 | + runOnlyForDeploymentPostprocessing = 0; | |
361 | + shellPath = /bin/sh; | |
362 | + shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; | |
363 | + }; | |
364 | + 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { | |
365 | + isa = PBXShellScriptBuildPhase; | |
366 | + buildActionMask = 2147483647; | |
367 | + files = ( | |
368 | + ); | |
369 | + inputFileListPaths = ( | |
370 | + "${PODS_ROOT}/Target Support Files/Pods-kic/Pods-kic-frameworks-${CONFIGURATION}-input-files.xcfilelist", | |
371 | + ); | |
372 | + name = "[CP] Embed Pods Frameworks"; | |
373 | + outputFileListPaths = ( | |
374 | + "${PODS_ROOT}/Target Support Files/Pods-kic/Pods-kic-frameworks-${CONFIGURATION}-output-files.xcfilelist", | |
375 | + ); | |
376 | + runOnlyForDeploymentPostprocessing = 0; | |
377 | + shellPath = /bin/sh; | |
378 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-kic/Pods-kic-frameworks.sh\"\n"; | |
379 | + showEnvVarsInLog = 0; | |
380 | + }; | |
381 | + A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = { | |
382 | + isa = PBXShellScriptBuildPhase; | |
383 | + buildActionMask = 2147483647; | |
384 | + files = ( | |
385 | + ); | |
386 | + inputFileListPaths = ( | |
387 | + ); | |
388 | + inputPaths = ( | |
389 | + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", | |
390 | + "${PODS_ROOT}/Manifest.lock", | |
391 | + ); | |
392 | + name = "[CP] Check Pods Manifest.lock"; | |
393 | + outputFileListPaths = ( | |
394 | + ); | |
395 | + outputPaths = ( | |
396 | + "$(DERIVED_FILE_DIR)/Pods-kic-kicTests-checkManifestLockResult.txt", | |
397 | + ); | |
398 | + runOnlyForDeploymentPostprocessing = 0; | |
399 | + shellPath = /bin/sh; | |
400 | + 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"; | |
401 | + showEnvVarsInLog = 0; | |
402 | + }; | |
403 | + C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { | |
404 | + isa = PBXShellScriptBuildPhase; | |
405 | + buildActionMask = 2147483647; | |
406 | + files = ( | |
407 | + ); | |
408 | + inputFileListPaths = ( | |
409 | + ); | |
410 | + inputPaths = ( | |
411 | + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", | |
412 | + "${PODS_ROOT}/Manifest.lock", | |
413 | + ); | |
414 | + name = "[CP] Check Pods Manifest.lock"; | |
415 | + outputFileListPaths = ( | |
416 | + ); | |
417 | + outputPaths = ( | |
418 | + "$(DERIVED_FILE_DIR)/Pods-kic-checkManifestLockResult.txt", | |
419 | + ); | |
420 | + runOnlyForDeploymentPostprocessing = 0; | |
421 | + shellPath = /bin/sh; | |
422 | + 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"; | |
423 | + showEnvVarsInLog = 0; | |
424 | + }; | |
425 | + C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = { | |
426 | + isa = PBXShellScriptBuildPhase; | |
427 | + buildActionMask = 2147483647; | |
428 | + files = ( | |
429 | + ); | |
430 | + inputFileListPaths = ( | |
431 | + "${PODS_ROOT}/Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", | |
432 | + ); | |
433 | + name = "[CP] Embed Pods Frameworks"; | |
434 | + outputFileListPaths = ( | |
435 | + "${PODS_ROOT}/Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", | |
436 | + ); | |
437 | + runOnlyForDeploymentPostprocessing = 0; | |
438 | + shellPath = /bin/sh; | |
439 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests-frameworks.sh\"\n"; | |
440 | + showEnvVarsInLog = 0; | |
441 | + }; | |
442 | + E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { | |
443 | + isa = PBXShellScriptBuildPhase; | |
444 | + buildActionMask = 2147483647; | |
445 | + files = ( | |
446 | + ); | |
447 | + inputFileListPaths = ( | |
448 | + "${PODS_ROOT}/Target Support Files/Pods-kic/Pods-kic-resources-${CONFIGURATION}-input-files.xcfilelist", | |
449 | + ); | |
450 | + name = "[CP] Copy Pods Resources"; | |
451 | + outputFileListPaths = ( | |
452 | + "${PODS_ROOT}/Target Support Files/Pods-kic/Pods-kic-resources-${CONFIGURATION}-output-files.xcfilelist", | |
453 | + ); | |
454 | + runOnlyForDeploymentPostprocessing = 0; | |
455 | + shellPath = /bin/sh; | |
456 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-kic/Pods-kic-resources.sh\"\n"; | |
457 | + showEnvVarsInLog = 0; | |
458 | + }; | |
459 | + F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = { | |
460 | + isa = PBXShellScriptBuildPhase; | |
461 | + buildActionMask = 2147483647; | |
462 | + files = ( | |
463 | + ); | |
464 | + inputFileListPaths = ( | |
465 | + "${PODS_ROOT}/Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests-resources-${CONFIGURATION}-input-files.xcfilelist", | |
466 | + ); | |
467 | + name = "[CP] Copy Pods Resources"; | |
468 | + outputFileListPaths = ( | |
469 | + "${PODS_ROOT}/Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests-resources-${CONFIGURATION}-output-files.xcfilelist", | |
470 | + ); | |
471 | + runOnlyForDeploymentPostprocessing = 0; | |
472 | + shellPath = /bin/sh; | |
473 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-kic-kicTests/Pods-kic-kicTests-resources.sh\"\n"; | |
474 | + showEnvVarsInLog = 0; | |
475 | + }; | |
476 | +/* End PBXShellScriptBuildPhase section */ | |
477 | + | |
478 | +/* Begin PBXSourcesBuildPhase section */ | |
479 | + 00E356EA1AD99517003FC87E /* Sources */ = { | |
480 | + isa = PBXSourcesBuildPhase; | |
481 | + buildActionMask = 2147483647; | |
482 | + files = ( | |
483 | + 00E356F31AD99517003FC87E /* kicTests.m in Sources */, | |
484 | + ); | |
485 | + runOnlyForDeploymentPostprocessing = 0; | |
486 | + }; | |
487 | + 13B07F871A680F5B00A75B9A /* Sources */ = { | |
488 | + isa = PBXSourcesBuildPhase; | |
489 | + buildActionMask = 2147483647; | |
490 | + files = ( | |
491 | + ED8583632C634116003406E5 /* background.swift in Sources */, | |
492 | + 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */, | |
493 | + 13B07FC11A68108700A75B9A /* main.m in Sources */, | |
494 | + ); | |
495 | + runOnlyForDeploymentPostprocessing = 0; | |
496 | + }; | |
497 | +/* End PBXSourcesBuildPhase section */ | |
498 | + | |
499 | +/* Begin PBXTargetDependency section */ | |
500 | + 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { | |
501 | + isa = PBXTargetDependency; | |
502 | + target = 13B07F861A680F5B00A75B9A /* kic */; | |
503 | + targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; | |
504 | + }; | |
505 | +/* End PBXTargetDependency section */ | |
506 | + | |
507 | +/* Begin XCBuildConfiguration section */ | |
508 | + 00E356F61AD99517003FC87E /* Debug */ = { | |
509 | + isa = XCBuildConfiguration; | |
510 | + baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-kic-kicTests.debug.xcconfig */; | |
511 | + buildSettings = { | |
512 | + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | |
513 | + BUNDLE_LOADER = "$(TEST_HOST)"; | |
514 | + GCC_PREPROCESSOR_DEFINITIONS = ( | |
515 | + "DEBUG=1", | |
516 | + "$(inherited)", | |
517 | + ); | |
518 | + INFOPLIST_FILE = kicTests/Info.plist; | |
519 | + IPHONEOS_DEPLOYMENT_TARGET = 13.4; | |
520 | + LD_RUNPATH_SEARCH_PATHS = ( | |
521 | + "$(inherited)", | |
522 | + "@executable_path/Frameworks", | |
523 | + "@loader_path/Frameworks", | |
524 | + ); | |
525 | + OTHER_LDFLAGS = ( | |
526 | + "-ObjC", | |
527 | + "-lc++", | |
528 | + "$(inherited)", | |
529 | + ); | |
530 | + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; | |
531 | + PRODUCT_NAME = "$(TARGET_NAME)"; | |
532 | + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/kic.app/kic"; | |
533 | + }; | |
534 | + name = Debug; | |
535 | + }; | |
536 | + 00E356F71AD99517003FC87E /* Release */ = { | |
537 | + isa = XCBuildConfiguration; | |
538 | + baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-kic-kicTests.release.xcconfig */; | |
539 | + buildSettings = { | |
540 | + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; | |
541 | + BUNDLE_LOADER = "$(TEST_HOST)"; | |
542 | + COPY_PHASE_STRIP = NO; | |
543 | + INFOPLIST_FILE = kicTests/Info.plist; | |
544 | + IPHONEOS_DEPLOYMENT_TARGET = 13.4; | |
545 | + LD_RUNPATH_SEARCH_PATHS = ( | |
546 | + "$(inherited)", | |
547 | + "@executable_path/Frameworks", | |
548 | + "@loader_path/Frameworks", | |
549 | + ); | |
550 | + OTHER_LDFLAGS = ( | |
551 | + "-ObjC", | |
552 | + "-lc++", | |
553 | + "$(inherited)", | |
554 | + ); | |
555 | + PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; | |
556 | + PRODUCT_NAME = "$(TARGET_NAME)"; | |
557 | + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/kic.app/kic"; | |
558 | + }; | |
559 | + name = Release; | |
560 | + }; | |
561 | + 13B07F941A680F5B00A75B9A /* Debug */ = { | |
562 | + isa = XCBuildConfiguration; | |
563 | + baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-kic.debug.xcconfig */; | |
564 | + buildSettings = { | |
565 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |
566 | + CLANG_ENABLE_MODULES = YES; | |
567 | + CURRENT_PROJECT_VERSION = 2; | |
568 | + DEVELOPMENT_TEAM = NDN56USKZX; | |
569 | + ENABLE_BITCODE = NO; | |
570 | + INFOPLIST_FILE = kic/Info.plist; | |
571 | + LD_RUNPATH_SEARCH_PATHS = ( | |
572 | + "$(inherited)", | |
573 | + "@executable_path/Frameworks", | |
574 | + ); | |
575 | + MARKETING_VERSION = 1.91; | |
576 | + OTHER_LDFLAGS = ( | |
577 | + "$(inherited)", | |
578 | + "-ObjC", | |
579 | + "-lc++", | |
580 | + ); | |
581 | + PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.kic; | |
582 | + PRODUCT_NAME = kic; | |
583 | + SWIFT_OBJC_BRIDGING_HEADER = "kic-Bridging-Header.h"; | |
584 | + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | |
585 | + SWIFT_VERSION = 5.0; | |
586 | + VERSIONING_SYSTEM = "apple-generic"; | |
587 | + }; | |
588 | + name = Debug; | |
589 | + }; | |
590 | + 13B07F951A680F5B00A75B9A /* Release */ = { | |
591 | + isa = XCBuildConfiguration; | |
592 | + baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-kic.release.xcconfig */; | |
593 | + buildSettings = { | |
594 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |
595 | + CLANG_ENABLE_MODULES = YES; | |
596 | + CURRENT_PROJECT_VERSION = 2; | |
597 | + DEVELOPMENT_TEAM = NDN56USKZX; | |
598 | + INFOPLIST_FILE = kic/Info.plist; | |
599 | + LD_RUNPATH_SEARCH_PATHS = ( | |
600 | + "$(inherited)", | |
601 | + "@executable_path/Frameworks", | |
602 | + ); | |
603 | + MARKETING_VERSION = 1.91; | |
604 | + OTHER_LDFLAGS = ( | |
605 | + "$(inherited)", | |
606 | + "-ObjC", | |
607 | + "-lc++", | |
608 | + ); | |
609 | + PRODUCT_BUNDLE_IDENTIFIER = org.reactjs.native.kic; | |
610 | + PRODUCT_NAME = kic; | |
611 | + SWIFT_OBJC_BRIDGING_HEADER = "kic-Bridging-Header.h"; | |
612 | + SWIFT_VERSION = 5.0; | |
613 | + VERSIONING_SYSTEM = "apple-generic"; | |
614 | + }; | |
615 | + name = Release; | |
616 | + }; | |
617 | + 83CBBA201A601CBA00E9B192 /* Debug */ = { | |
618 | + isa = XCBuildConfiguration; | |
619 | + buildSettings = { | |
620 | + ALWAYS_SEARCH_USER_PATHS = NO; | |
621 | + CC = ""; | |
622 | + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; | |
623 | + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; | |
624 | + CLANG_CXX_LIBRARY = "libc++"; | |
625 | + CLANG_ENABLE_MODULES = YES; | |
626 | + CLANG_ENABLE_OBJC_ARC = YES; | |
627 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |
628 | + CLANG_WARN_BOOL_CONVERSION = YES; | |
629 | + CLANG_WARN_COMMA = YES; | |
630 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | |
631 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |
632 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |
633 | + CLANG_WARN_EMPTY_BODY = YES; | |
634 | + CLANG_WARN_ENUM_CONVERSION = YES; | |
635 | + CLANG_WARN_INFINITE_RECURSION = YES; | |
636 | + CLANG_WARN_INT_CONVERSION = YES; | |
637 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |
638 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | |
639 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |
640 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |
641 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | |
642 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |
643 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | |
644 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | |
645 | + CLANG_WARN_UNREACHABLE_CODE = YES; | |
646 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | |
647 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | |
648 | + COPY_PHASE_STRIP = NO; | |
649 | + CXX = ""; | |
650 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | |
651 | + ENABLE_TESTABILITY = YES; | |
652 | + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; | |
653 | + GCC_C_LANGUAGE_STANDARD = gnu99; | |
654 | + GCC_DYNAMIC_NO_PIC = NO; | |
655 | + GCC_NO_COMMON_BLOCKS = YES; | |
656 | + GCC_OPTIMIZATION_LEVEL = 0; | |
657 | + GCC_PREPROCESSOR_DEFINITIONS = ( | |
658 | + "DEBUG=1", | |
659 | + "$(inherited)", | |
660 | + ); | |
661 | + GCC_SYMBOLS_PRIVATE_EXTERN = NO; | |
662 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |
663 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |
664 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | |
665 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |
666 | + GCC_WARN_UNUSED_FUNCTION = YES; | |
667 | + GCC_WARN_UNUSED_VARIABLE = YES; | |
668 | + IPHONEOS_DEPLOYMENT_TARGET = 13.4; | |
669 | + LD = ""; | |
670 | + LDPLUSPLUS = ""; | |
671 | + LD_RUNPATH_SEARCH_PATHS = ( | |
672 | + /usr/lib/swift, | |
673 | + "$(inherited)", | |
674 | + ); | |
675 | + LIBRARY_SEARCH_PATHS = ( | |
676 | + "\"$(SDKROOT)/usr/lib/swift\"", | |
677 | + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", | |
678 | + "\"$(inherited)\"", | |
679 | + ); | |
680 | + MTL_ENABLE_DEBUG_INFO = YES; | |
681 | + ONLY_ACTIVE_ARCH = YES; | |
682 | + OTHER_CPLUSPLUSFLAGS = ( | |
683 | + "$(OTHER_CFLAGS)", | |
684 | + "-DFOLLY_NO_CONFIG", | |
685 | + "-DFOLLY_MOBILE=1", | |
686 | + "-DFOLLY_USE_LIBCPP=1", | |
687 | + "-DFOLLY_CFG_NO_COROUTINES=1", | |
688 | + "-DFOLLY_HAVE_CLOCK_GETTIME=1", | |
689 | + ); | |
690 | + OTHER_LDFLAGS = "$(inherited) "; | |
691 | + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; | |
692 | + SDKROOT = iphoneos; | |
693 | + USE_HERMES = true; | |
694 | + }; | |
695 | + name = Debug; | |
696 | + }; | |
697 | + 83CBBA211A601CBA00E9B192 /* Release */ = { | |
698 | + isa = XCBuildConfiguration; | |
699 | + buildSettings = { | |
700 | + ALWAYS_SEARCH_USER_PATHS = NO; | |
701 | + CC = ""; | |
702 | + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; | |
703 | + CLANG_CXX_LANGUAGE_STANDARD = "c++20"; | |
704 | + CLANG_CXX_LIBRARY = "libc++"; | |
705 | + CLANG_ENABLE_MODULES = YES; | |
706 | + CLANG_ENABLE_OBJC_ARC = YES; | |
707 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | |
708 | + CLANG_WARN_BOOL_CONVERSION = YES; | |
709 | + CLANG_WARN_COMMA = YES; | |
710 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | |
711 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | |
712 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | |
713 | + CLANG_WARN_EMPTY_BODY = YES; | |
714 | + CLANG_WARN_ENUM_CONVERSION = YES; | |
715 | + CLANG_WARN_INFINITE_RECURSION = YES; | |
716 | + CLANG_WARN_INT_CONVERSION = YES; | |
717 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | |
718 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | |
719 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | |
720 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | |
721 | + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | |
722 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | |
723 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | |
724 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | |
725 | + CLANG_WARN_UNREACHABLE_CODE = YES; | |
726 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | |
727 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | |
728 | + COPY_PHASE_STRIP = YES; | |
729 | + CXX = ""; | |
730 | + ENABLE_NS_ASSERTIONS = NO; | |
731 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | |
732 | + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; | |
733 | + GCC_C_LANGUAGE_STANDARD = gnu99; | |
734 | + GCC_NO_COMMON_BLOCKS = YES; | |
735 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | |
736 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | |
737 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | |
738 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | |
739 | + GCC_WARN_UNUSED_FUNCTION = YES; | |
740 | + GCC_WARN_UNUSED_VARIABLE = YES; | |
741 | + IPHONEOS_DEPLOYMENT_TARGET = 13.4; | |
742 | + LD = ""; | |
743 | + LDPLUSPLUS = ""; | |
744 | + LD_RUNPATH_SEARCH_PATHS = ( | |
745 | + /usr/lib/swift, | |
746 | + "$(inherited)", | |
747 | + ); | |
748 | + LIBRARY_SEARCH_PATHS = ( | |
749 | + "\"$(SDKROOT)/usr/lib/swift\"", | |
750 | + "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", | |
751 | + "\"$(inherited)\"", | |
752 | + ); | |
753 | + MTL_ENABLE_DEBUG_INFO = NO; | |
754 | + OTHER_CPLUSPLUSFLAGS = ( | |
755 | + "$(OTHER_CFLAGS)", | |
756 | + "-DFOLLY_NO_CONFIG", | |
757 | + "-DFOLLY_MOBILE=1", | |
758 | + "-DFOLLY_USE_LIBCPP=1", | |
759 | + "-DFOLLY_CFG_NO_COROUTINES=1", | |
760 | + "-DFOLLY_HAVE_CLOCK_GETTIME=1", | |
761 | + ); | |
762 | + OTHER_LDFLAGS = "$(inherited) "; | |
763 | + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; | |
764 | + SDKROOT = iphoneos; | |
765 | + USE_HERMES = true; | |
766 | + VALIDATE_PRODUCT = YES; | |
767 | + }; | |
768 | + name = Release; | |
769 | + }; | |
770 | +/* End XCBuildConfiguration section */ | |
771 | + | |
772 | +/* Begin XCConfigurationList section */ | |
773 | + 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "kicTests" */ = { | |
774 | + isa = XCConfigurationList; | |
775 | + buildConfigurations = ( | |
776 | + 00E356F61AD99517003FC87E /* Debug */, | |
777 | + 00E356F71AD99517003FC87E /* Release */, | |
778 | + ); | |
779 | + defaultConfigurationIsVisible = 0; | |
780 | + defaultConfigurationName = Release; | |
781 | + }; | |
782 | + 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "kic" */ = { | |
783 | + isa = XCConfigurationList; | |
784 | + buildConfigurations = ( | |
785 | + 13B07F941A680F5B00A75B9A /* Debug */, | |
786 | + 13B07F951A680F5B00A75B9A /* Release */, | |
787 | + ); | |
788 | + defaultConfigurationIsVisible = 0; | |
789 | + defaultConfigurationName = Release; | |
790 | + }; | |
791 | + 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "kic" */ = { | |
792 | + isa = XCConfigurationList; | |
793 | + buildConfigurations = ( | |
794 | + 83CBBA201A601CBA00E9B192 /* Debug */, | |
795 | + 83CBBA211A601CBA00E9B192 /* Release */, | |
796 | + ); | |
797 | + defaultConfigurationIsVisible = 0; | |
798 | + defaultConfigurationName = Release; | |
799 | + }; | |
800 | +/* End XCConfigurationList section */ | |
801 | + }; | |
802 | + rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; | |
803 | +} |
+++ ios/kic.xcworkspace/contents.xcworkspacedata
... | ... | @@ -0,0 +1,10 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<Workspace | |
3 | + version = "1.0"> | |
4 | + <FileRef | |
5 | + location = "group:kic.xcodeproj"> | |
6 | + </FileRef> | |
7 | + <FileRef | |
8 | + location = "group:Pods/Pods.xcodeproj"> | |
9 | + </FileRef> | |
10 | +</Workspace> |
+++ ios/kic/AppDelegate.h
... | ... | @@ -0,0 +1,6 @@ |
1 | +#import <RCTAppDelegate.h> | |
2 | +#import <UIKit/UIKit.h> | |
3 | + | |
4 | +@interface AppDelegate : RCTAppDelegate | |
5 | + | |
6 | +@end |
+++ ios/kic/AppDelegate.mm
... | ... | @@ -0,0 +1,31 @@ |
1 | +#import "AppDelegate.h" | |
2 | + | |
3 | +#import <React/RCTBundleURLProvider.h> | |
4 | + | |
5 | +@implementation AppDelegate | |
6 | + | |
7 | +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions | |
8 | +{ | |
9 | + self.moduleName = @"kic"; | |
10 | + // You can add your custom initial props in the dictionary below. | |
11 | + // They will be passed down to the ViewController used by React Native. | |
12 | + self.initialProps = @{}; | |
13 | + | |
14 | + return [super application:application didFinishLaunchingWithOptions:launchOptions]; | |
15 | +} | |
16 | + | |
17 | +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge | |
18 | +{ | |
19 | + return [self bundleURL]; | |
20 | +} | |
21 | + | |
22 | +- (NSURL *)bundleURL | |
23 | +{ | |
24 | +#if DEBUG | |
25 | + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; | |
26 | +#else | |
27 | + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; | |
28 | +#endif | |
29 | +} | |
30 | + | |
31 | +@end |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/1024.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/120 1.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/120.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/180.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/40.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/58.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/60.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/80.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/87.png
Binary file is not shown |
+++ ios/kic/Images.xcassets/AppIcon.appiconset/Contents.json
... | ... | @@ -0,0 +1,62 @@ |
1 | +{ | |
2 | + "images" : [ | |
3 | + { | |
4 | + "filename" : "40.png", | |
5 | + "idiom" : "iphone", | |
6 | + "scale" : "2x", | |
7 | + "size" : "20x20" | |
8 | + }, | |
9 | + { | |
10 | + "filename" : "60.png", | |
11 | + "idiom" : "iphone", | |
12 | + "scale" : "3x", | |
13 | + "size" : "20x20" | |
14 | + }, | |
15 | + { | |
16 | + "filename" : "58.png", | |
17 | + "idiom" : "iphone", | |
18 | + "scale" : "2x", | |
19 | + "size" : "29x29" | |
20 | + }, | |
21 | + { | |
22 | + "filename" : "87.png", | |
23 | + "idiom" : "iphone", | |
24 | + "scale" : "3x", | |
25 | + "size" : "29x29" | |
26 | + }, | |
27 | + { | |
28 | + "filename" : "80.png", | |
29 | + "idiom" : "iphone", | |
30 | + "scale" : "2x", | |
31 | + "size" : "40x40" | |
32 | + }, | |
33 | + { | |
34 | + "filename" : "120.png", | |
35 | + "idiom" : "iphone", | |
36 | + "scale" : "3x", | |
37 | + "size" : "40x40" | |
38 | + }, | |
39 | + { | |
40 | + "filename" : "120 1.png", | |
41 | + "idiom" : "iphone", | |
42 | + "scale" : "2x", | |
43 | + "size" : "60x60" | |
44 | + }, | |
45 | + { | |
46 | + "filename" : "180.png", | |
47 | + "idiom" : "iphone", | |
48 | + "scale" : "3x", | |
49 | + "size" : "60x60" | |
50 | + }, | |
51 | + { | |
52 | + "filename" : "1024.png", | |
53 | + "idiom" : "ios-marketing", | |
54 | + "scale" : "1x", | |
55 | + "size" : "1024x1024" | |
56 | + } | |
57 | + ], | |
58 | + "info" : { | |
59 | + "author" : "xcode", | |
60 | + "version" : 1 | |
61 | + } | |
62 | +} |
+++ ios/kic/Images.xcassets/Contents.json
... | ... | @@ -0,0 +1,6 @@ |
1 | +{ | |
2 | + "info" : { | |
3 | + "version" : 1, | |
4 | + "author" : "xcode" | |
5 | + } | |
6 | +} |
+++ ios/kic/Info.plist
... | ... | @@ -0,0 +1,132 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
3 | +<plist version="1.0"> | |
4 | +<dict> | |
5 | + <key>CFBundleDevelopmentRegion</key> | |
6 | + <string>en</string> | |
7 | + <key>CFBundleDisplayName</key> | |
8 | + <string>Send_Location_TA</string> | |
9 | + <key>CFBundleExecutable</key> | |
10 | + <string>$(EXECUTABLE_NAME)</string> | |
11 | + <key>CFBundleIdentifier</key> | |
12 | + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |
13 | + <key>CFBundleInfoDictionaryVersion</key> | |
14 | + <string>6.0</string> | |
15 | + <key>CFBundleName</key> | |
16 | + <string>$(PRODUCT_NAME)</string> | |
17 | + <key>CFBundlePackageType</key> | |
18 | + <string>APPL</string> | |
19 | + <key>CFBundleShortVersionString</key> | |
20 | + <string>$(MARKETING_VERSION)</string> | |
21 | + <key>CFBundleSignature</key> | |
22 | + <string>????</string> | |
23 | + <key>CFBundleVersion</key> | |
24 | + <string>$(CURRENT_PROJECT_VERSION)</string> | |
25 | + <key>LSRequiresIPhoneOS</key> | |
26 | + <true/> | |
27 | + <key>NSAppTransportSecurity</key> | |
28 | + <dict> | |
29 | + <key>NSAllowsArbitraryLoads</key> | |
30 | + <true/> <!-- 모든 HTTP 요청 허용 --> | |
31 | + <key>NSExceptionDomains</key> | |
32 | + <dict> | |
33 | + <key>takensoftai.iptime.org</key> | |
34 | + <dict> | |
35 | + <key>NSExceptionAllowsInsecureHTTPLoads</key> | |
36 | + <true/> | |
37 | + <key>NSExceptionMinimumTLSVersion</key> | |
38 | + <string>TLSv1.2</string> | |
39 | + <key>NSIncludesSubdomains</key> | |
40 | + <true/> | |
41 | + </dict> | |
42 | + </dict> | |
43 | +</dict> | |
44 | + <key>NSAppleMusicUsageDescription</key> | |
45 | + <string>앱이 Apple Music에 접근하여 음악 재생 목록을 관리할 수 있도록 허용해주세요.</string> | |
46 | + <key>NSBluetoothAlwaysUsageDescription</key> | |
47 | + <string>앱이 Bluetooth 장치에 항상 연결될 수 있도록 허용해주세요.</string> | |
48 | + <key>NSBluetoothPeripheralUsageDescription</key> | |
49 | + <string>앱이 Bluetooth 장치에 접근하여 데이터를 송수신할 수 있도록 허용해주세요.</string> | |
50 | + <key>NSCalendarsFullAccessUsageDescription</key> | |
51 | + <string>앱이 캘린더에 완전히 접근하여 일정 관리를 도와줄 수 있도록 허용해주세요.</string> | |
52 | + <key>NSCalendarsUsageDescription</key> | |
53 | + <string>앱이 캘린더에 접근할 수 있도록 허용해주세요.</string> | |
54 | + <key>NSCalendarsWriteOnlyAccessUsageDescription</key> | |
55 | + <string>앱이 캘린더에 일정만 추가할 수 있도록 허용해주세요.</string> | |
56 | + <key>NSCameraUsageDescription</key> | |
57 | + <string>카메라에 접근할 수 있도록 허용해주세요.</string> | |
58 | + <key>NSContactsUsageDescription</key> | |
59 | + <string>앱이 연락처에 접근하여 연락처 정보를 제공할 수 있도록 허용해주세요.</string> | |
60 | + <key>NSFaceIDUsageDescription</key> | |
61 | + <string>앱이 Face ID를 사용하여 안전하게 인증할 수 있도록 허용해주세요.</string> | |
62 | + <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> | |
63 | + <string>앱이 사용자의 위치 정보를 항상 및 사용 중에 접근하여 위치 기반 서비스를 제공할 수 있도록 허용해주세요.</string> | |
64 | + <key>NSLocationAlwaysUsageDescription</key> | |
65 | + <string>앱이 백그라운드에서도 위치 접근을 허용합니다.</string> | |
66 | + <key>NSLocationTemporaryUsageDescriptionDictionary</key> | |
67 | + <dict> | |
68 | + <key>NearbyEvents</key> | |
69 | + <string>앱이 주변 이벤트를 찾기 위해 일시적으로 위치 데이터를 사용합니다.</string> | |
70 | + </dict> | |
71 | + <key>NSLocationWhenInUseUsageDescription</key> | |
72 | + <string>앱을 사용할 때 위치 접근을 허용합니다.</string> | |
73 | + <key>NSMicrophoneUsageDescription</key> | |
74 | + <string>앱이 마이크에 접근하여 음성을 녹음할 수 있도록 허용해주세요.</string> | |
75 | + <key>NSMotionUsageDescription</key> | |
76 | + <string>앱이 모션 데이터를 사용하여 사용자 활동을 추적할 수 있도록 허용해주세요.</string> | |
77 | + <key>NSPhotoLibraryAddUsageDescription</key> | |
78 | + <string>앱이 사진 라이브러리에 사진을 추가할 수 있도록 허용해주세요.</string> | |
79 | + <key>NSPhotoLibraryUsageDescription</key> | |
80 | + <string>앱이 사진 라이브러리에 접근하여 사진을 선택하거나 업로드할 수 있도록 허용해주세요.</string> | |
81 | + <key>NSRemindersFullAccessUsageDescription</key> | |
82 | + <string>앱이 미리 알림에 완전히 접근하여 일정 관리를 도와줄 수 있도록 허용해주세요.</string> | |
83 | + <key>NSSiriUsageDescription</key> | |
84 | + <string>앱이 Siri를 사용하여 음성 명령을 처리할 수 있도록 허용해주세요.</string> | |
85 | + <key>NSSpeechRecognitionUsageDescription</key> | |
86 | + <string>앱이 음성 인식을 사용하여 음성 명령을 처리할 수 있도록 허용해주세요.</string> | |
87 | + <key>NSUserTrackingUsageDescription</key> | |
88 | + <string>앱이 사용자 활동을 추적하여 맞춤형 광고를 제공할 수 있도록 허용해주세요.</string> | |
89 | + <key>UIAppFonts</key> | |
90 | + <array> | |
91 | + <string>AntDesign.ttf</string> | |
92 | + <string>Entypo.ttf</string> | |
93 | + <string>EvilIcons.ttf</string> | |
94 | + <string>Feather.ttf</string> | |
95 | + <string>FontAwesome.ttf</string> | |
96 | + <string>FontAwesome5_Brands.ttf</string> | |
97 | + <string>FontAwesome5_Regular.ttf</string> | |
98 | + <string>FontAwesome5_Solid.ttf</string> | |
99 | + <string>FontAwesome6_Brands.ttf</string> | |
100 | + <string>FontAwesome6_Regular.ttf</string> | |
101 | + <string>FontAwesome6_Solid.ttf</string> | |
102 | + <string>Foundation.ttf</string> | |
103 | + <string>Ionicons.ttf</string> | |
104 | + <string>MaterialIcons.ttf</string> | |
105 | + <string>MaterialCommunityIcons.ttf</string> | |
106 | + <string>SimpleLineIcons.ttf</string> | |
107 | + <string>Octicons.ttf</string> | |
108 | + <string>Zocial.ttf</string> | |
109 | + <string>Fontisto.ttf</string> | |
110 | + </array> | |
111 | + <key>UIBackgroundModes</key> | |
112 | + <array> | |
113 | + <string>location</string> | |
114 | + </array> | |
115 | + <key>UILaunchStoryboardName</key> | |
116 | + <string>LaunchScreen</string> | |
117 | + <key>UIRequiredDeviceCapabilities</key> | |
118 | + <array> | |
119 | + <string>arm64</string> | |
120 | + </array> | |
121 | + <key>UIStatusBarStyle</key> | |
122 | + <string></string> | |
123 | + <key>UISupportedInterfaceOrientations</key> | |
124 | + <array> | |
125 | + <string>UIInterfaceOrientationPortrait</string> | |
126 | + <string>UIInterfaceOrientationLandscapeLeft</string> | |
127 | + <string>UIInterfaceOrientationLandscapeRight</string> | |
128 | + </array> | |
129 | + <key>UIViewControllerBasedStatusBarAppearance</key> | |
130 | + <false/> | |
131 | +</dict> | |
132 | +</plist> |
+++ ios/kic/LaunchScreen.storyboard
... | ... | @@ -0,0 +1,47 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | |
3 | + <device id="retina4_7" orientation="portrait" appearance="light"/> | |
4 | + <dependencies> | |
5 | + <deployment identifier="iOS"/> | |
6 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/> | |
7 | + <capability name="Safe area layout guides" minToolsVersion="9.0"/> | |
8 | + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | |
9 | + </dependencies> | |
10 | + <scenes> | |
11 | + <!--View Controller--> | |
12 | + <scene sceneID="EHf-IW-A2E"> | |
13 | + <objects> | |
14 | + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> | |
15 | + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | |
16 | + <rect key="frame" x="0.0" y="0.0" width="375" height="667"/> | |
17 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |
18 | + <subviews> | |
19 | + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="kic" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb"> | |
20 | + <rect key="frame" x="0.0" y="202" width="375" height="43"/> | |
21 | + <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/> | |
22 | + <nil key="highlightedColor"/> | |
23 | + </label> | |
24 | + <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="MN2-I3-ftu"> | |
25 | + <rect key="frame" x="0.0" y="626" width="375" height="21"/> | |
26 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
27 | + <nil key="highlightedColor"/> | |
28 | + </label> | |
29 | + </subviews> | |
30 | + <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/> | |
31 | + <constraints> | |
32 | + <constraint firstItem="Bcu-3y-fUS" firstAttribute="bottom" secondItem="MN2-I3-ftu" secondAttribute="bottom" constant="20" id="OZV-Vh-mqD"/> | |
33 | + <constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/> | |
34 | + <constraint firstItem="MN2-I3-ftu" firstAttribute="centerX" secondItem="Bcu-3y-fUS" secondAttribute="centerX" id="akx-eg-2ui"/> | |
35 | + <constraint firstItem="MN2-I3-ftu" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" id="i1E-0Y-4RG"/> | |
36 | + <constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/> | |
37 | + <constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" symbolic="YES" id="x7j-FC-K8j"/> | |
38 | + </constraints> | |
39 | + <viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/> | |
40 | + </view> | |
41 | + </viewController> | |
42 | + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | |
43 | + </objects> | |
44 | + <point key="canvasLocation" x="52.173913043478265" y="375"/> | |
45 | + </scene> | |
46 | + </scenes> | |
47 | +</document> |
+++ ios/kic/PrivacyInfo.xcprivacy
... | ... | @@ -0,0 +1,37 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
3 | +<plist version="1.0"> | |
4 | +<dict> | |
5 | + <key>NSPrivacyAccessedAPITypes</key> | |
6 | + <array> | |
7 | + <dict> | |
8 | + <key>NSPrivacyAccessedAPIType</key> | |
9 | + <string>NSPrivacyAccessedAPICategoryFileTimestamp</string> | |
10 | + <key>NSPrivacyAccessedAPITypeReasons</key> | |
11 | + <array> | |
12 | + <string>C617.1</string> | |
13 | + </array> | |
14 | + </dict> | |
15 | + <dict> | |
16 | + <key>NSPrivacyAccessedAPIType</key> | |
17 | + <string>NSPrivacyAccessedAPICategoryUserDefaults</string> | |
18 | + <key>NSPrivacyAccessedAPITypeReasons</key> | |
19 | + <array> | |
20 | + <string>CA92.1</string> | |
21 | + </array> | |
22 | + </dict> | |
23 | + <dict> | |
24 | + <key>NSPrivacyAccessedAPIType</key> | |
25 | + <string>NSPrivacyAccessedAPICategorySystemBootTime</string> | |
26 | + <key>NSPrivacyAccessedAPITypeReasons</key> | |
27 | + <array> | |
28 | + <string>35F9.1</string> | |
29 | + </array> | |
30 | + </dict> | |
31 | + </array> | |
32 | + <key>NSPrivacyCollectedDataTypes</key> | |
33 | + <array/> | |
34 | + <key>NSPrivacyTracking</key> | |
35 | + <false/> | |
36 | +</dict> | |
37 | +</plist> |
+++ ios/kic/main.m
... | ... | @@ -0,0 +1,10 @@ |
1 | +#import <UIKit/UIKit.h> | |
2 | + | |
3 | +#import "AppDelegate.h" | |
4 | + | |
5 | +int main(int argc, char *argv[]) | |
6 | +{ | |
7 | + @autoreleasepool { | |
8 | + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); | |
9 | + } | |
10 | +} |
+++ ios/kicTests/Info.plist
... | ... | @@ -0,0 +1,24 @@ |
1 | +<?xml version="1.0" encoding="UTF-8"?> | |
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | |
3 | +<plist version="1.0"> | |
4 | +<dict> | |
5 | + <key>CFBundleDevelopmentRegion</key> | |
6 | + <string>en</string> | |
7 | + <key>CFBundleExecutable</key> | |
8 | + <string>$(EXECUTABLE_NAME)</string> | |
9 | + <key>CFBundleIdentifier</key> | |
10 | + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | |
11 | + <key>CFBundleInfoDictionaryVersion</key> | |
12 | + <string>6.0</string> | |
13 | + <key>CFBundleName</key> | |
14 | + <string>$(PRODUCT_NAME)</string> | |
15 | + <key>CFBundlePackageType</key> | |
16 | + <string>BNDL</string> | |
17 | + <key>CFBundleShortVersionString</key> | |
18 | + <string>1.0</string> | |
19 | + <key>CFBundleSignature</key> | |
20 | + <string>????</string> | |
21 | + <key>CFBundleVersion</key> | |
22 | + <string>1</string> | |
23 | +</dict> | |
24 | +</plist> |
+++ ios/kicTests/kicTests.m
... | ... | @@ -0,0 +1,66 @@ |
1 | +#import <UIKit/UIKit.h> | |
2 | +#import <XCTest/XCTest.h> | |
3 | + | |
4 | +#import <React/RCTLog.h> | |
5 | +#import <React/RCTRootView.h> | |
6 | + | |
7 | +#define TIMEOUT_SECONDS 600 | |
8 | +#define TEXT_TO_LOOK_FOR @"Welcome to React" | |
9 | + | |
10 | +@interface kicTests : XCTestCase | |
11 | + | |
12 | +@end | |
13 | + | |
14 | +@implementation kicTests | |
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 |
--- jest.config.js
+++ jest.config.js
... | ... | @@ -1,4 +1,3 @@ |
1 |
-module.exports = { |
|
2 |
- preset: 'react-native', |
|
3 |
- setupFiles: ["../../node_modules/react-native-gesture-handler/jestSetup.js"], |
|
4 |
-}; |
|
1 |
+module.exports = { |
|
2 |
+ preset: 'react-native', |
|
3 |
+}; |
--- metro.config.js
+++ metro.config.js
... | ... | @@ -1,11 +1,11 @@ |
1 |
-const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); |
|
2 |
- |
|
3 |
-/** |
|
4 |
- * Metro configuration |
|
5 |
- * https://reactnative.dev/docs/metro |
|
6 |
- * |
|
7 |
- * @type {import('metro-config').MetroConfig} |
|
8 |
- */ |
|
9 |
-const config = {}; |
|
10 |
- |
|
11 |
-module.exports = mergeConfig(getDefaultConfig(__dirname), config); |
|
1 |
+const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config'); |
|
2 |
+ |
|
3 |
+/** |
|
4 |
+ * Metro configuration |
|
5 |
+ * https://reactnative.dev/docs/metro |
|
6 |
+ * |
|
7 |
+ * @type {import('metro-config').MetroConfig} |
|
8 |
+ */ |
|
9 |
+const config = {}; |
|
10 |
+ |
|
11 |
+module.exports = mergeConfig(getDefaultConfig(__dirname), config); |
--- package-lock.json
+++ package-lock.json
This diff is too big to display. |
--- package.json
+++ package.json
... | ... | @@ -1,65 +1,58 @@ |
1 |
-{ |
|
2 |
- "name": "Send_Location_TA", |
|
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 |
- "postinstall": "react-native setup-ios-permissions && pod-install" |
|
12 |
- }, |
|
13 |
- "dependencies": { |
|
14 |
- "@react-native-async-storage/async-storage": "^1.23.1", |
|
15 |
- "@react-native-community/geolocation": "^3.3.0", |
|
16 |
- "@react-navigation/native": "^6.1.17", |
|
17 |
- "@react-navigation/stack": "^6.4.1", |
|
18 |
- "@sayem314/react-native-keep-awake": "^1.2.4", |
|
19 |
- "axios": "^1.7.2", |
|
20 |
- "base64-js": "^1.5.1", |
|
21 |
- "crypto-js": "^4.2.0", |
|
22 |
- "install": "^0.13.0", |
|
23 |
- "react": "18.2.0", |
|
24 |
- "react-native": "^0.74.4", |
|
25 |
- "react-native-background-actions": "^4.0.0", |
|
26 |
- "react-native-chart-kit": "^6.12.0", |
|
27 |
- "react-native-fs": "^2.20.0", |
|
28 |
- "react-native-geolocation-service": "^5.3.1", |
|
29 |
- "react-native-gesture-handler": "^2.17.1", |
|
30 |
- "react-native-gifted-charts": "^1.4.10", |
|
31 |
- "react-native-linear-gradient": "^2.8.3", |
|
32 |
- "react-native-permissions": "^4.1.5", |
|
33 |
- "react-native-reanimated": "^3.11.0", |
|
34 |
- "react-native-safe-area-context": "^4.10.1", |
|
35 |
- "react-native-screens": "^3.31.1", |
|
36 |
- "react-native-shadow-2": "^7.1.0", |
|
37 |
- "react-native-svg": "^15.3.0", |
|
38 |
- "react-native-vector-icons": "^10.1.0", |
|
39 |
- "react-native-vision-camera": "^4.0.5" |
|
40 |
- }, |
|
41 |
- "devDependencies": { |
|
42 |
- "@babel/core": "^7.20.0", |
|
43 |
- "@babel/plugin-transform-export-namespace-from": "^7.24.6", |
|
44 |
- "@babel/preset-env": "^7.20.0", |
|
45 |
- "@babel/runtime": "^7.20.0", |
|
46 |
- "@react-native/babel-preset": "0.74.83", |
|
47 |
- "@react-native/eslint-config": "0.74.83", |
|
48 |
- "@react-native/metro-config": "0.74.83", |
|
49 |
- "@react-native/typescript-config": "0.74.83", |
|
50 |
- "@types/react": "^18.2.6", |
|
51 |
- "@types/react-native-simple-radio-button": "^2.7.7", |
|
52 |
- "@types/react-native-svg-charts": "^5.0.16", |
|
53 |
- "@types/react-native-vector-icons": "^6.4.18", |
|
54 |
- "@types/react-test-renderer": "^18.0.0", |
|
55 |
- "babel-jest": "^29.6.3", |
|
56 |
- "eslint": "^8.19.0", |
|
57 |
- "jest": "^29.6.3", |
|
58 |
- "prettier": "2.8.8", |
|
59 |
- "react-test-renderer": "18.2.0", |
|
60 |
- "typescript": "^5.0.4" |
|
61 |
- }, |
|
62 |
- "engines": { |
|
63 |
- "node": ">=18" |
|
64 |
- } |
|
65 |
-} |
|
1 |
+{ |
|
2 |
+ "name": "kic", |
|
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 |
+ "@bam.tech/react-native-image-resizer": "^3.0.10", |
|
14 |
+ "@react-native-async-storage/async-storage": "^1.23.1", |
|
15 |
+ "@react-navigation/stack": "^6.4.1", |
|
16 |
+ "@sayem314/react-native-keep-awake": "^1.2.4", |
|
17 |
+ "axios": "^1.7.2", |
|
18 |
+ "crypto-js": "^4.2.0", |
|
19 |
+ "react": "18.2.0", |
|
20 |
+ "react-native": "0.74.5", |
|
21 |
+ "react-native-chart-kit": "^6.12.0", |
|
22 |
+ "react-native-exif": "^0.5.0", |
|
23 |
+ "react-native-fs": "^2.20.0", |
|
24 |
+ "react-native-geolocation-service": "^5.3.1", |
|
25 |
+ "react-native-gesture-handler": "^2.17.1", |
|
26 |
+ "react-native-gifted-charts": "^1.4.10", |
|
27 |
+ "react-native-linear-gradient": "^2.8.3", |
|
28 |
+ "react-native-paper": "^5.12.5", |
|
29 |
+ "react-native-permissions": "^4.1.5", |
|
30 |
+ "react-native-reanimated": "^3.11.0", |
|
31 |
+ "react-native-safe-area-context": "^4.10.1", |
|
32 |
+ "react-native-screens": "^3.31.1", |
|
33 |
+ "react-native-shadow-2": "^7.1.0", |
|
34 |
+ "react-native-svg": "^15.7.1", |
|
35 |
+ "react-native-vector-icons": "^10.1.0", |
|
36 |
+ "react-native-vision-camera": "^4.0.5" |
|
37 |
+ }, |
|
38 |
+ "devDependencies": { |
|
39 |
+ "@babel/core": "^7.20.0", |
|
40 |
+ "@babel/preset-env": "^7.20.0", |
|
41 |
+ "@babel/runtime": "^7.20.0", |
|
42 |
+ "@react-native/babel-preset": "0.74.87", |
|
43 |
+ "@react-native/eslint-config": "0.74.87", |
|
44 |
+ "@react-native/metro-config": "0.74.87", |
|
45 |
+ "@react-native/typescript-config": "0.74.87", |
|
46 |
+ "@types/react": "^18.2.6", |
|
47 |
+ "@types/react-test-renderer": "^18.0.0", |
|
48 |
+ "babel-jest": "^29.6.3", |
|
49 |
+ "eslint": "^8.19.0", |
|
50 |
+ "jest": "^29.6.3", |
|
51 |
+ "prettier": "2.8.8", |
|
52 |
+ "react-test-renderer": "18.2.0", |
|
53 |
+ "typescript": "5.0.4" |
|
54 |
+ }, |
|
55 |
+ "engines": { |
|
56 |
+ "node": ">=18" |
|
57 |
+ } |
|
58 |
+} |
--- react-native.config.js
+++ react-native.config.js
... | ... | @@ -1,9 +1,9 @@ |
1 | 1 |
module.exports = { |
2 |
- dependencies: { |
|
3 |
- 'react-native-vector-icons': { |
|
4 |
- platforms: { |
|
5 |
- ios: null, |
|
6 |
- }, |
|
2 |
+ dependencies: { |
|
3 |
+ "react-native-vector-icons": { |
|
4 |
+ platforms: { |
|
5 |
+ ios: null, |
|
7 | 6 |
}, |
8 | 7 |
}, |
9 |
- };(파일 끝에 줄바꿈 문자 없음) |
|
8 |
+ }, |
|
9 |
+};(파일 끝에 줄바꿈 문자 없음) |
--- src/api/ApiUtils.js
+++ src/api/ApiUtils.js
... | ... | @@ -3,11 +3,43 @@ |
3 | 3 |
|
4 | 4 |
// API 인스턴스 생성 |
5 | 5 |
const apiInstance = axios.create({ |
6 |
- baseURL: 'http://takensoftai.iptime.org:15857', |
|
6 |
+ //baseURL: 'http://takensofttesting.iptime.org:27461', |
|
7 |
+ baseURL: 'http://takensoftai.iptime.org:27461', |
|
7 | 8 |
headers: { |
8 | 9 |
'Content-Type': 'application/json', |
9 |
- } |
|
10 |
+ }, |
|
10 | 11 |
}); |
12 |
+ |
|
13 |
+// 토큰 가져오기 함수 |
|
14 |
+const getAccessToken = async (navigation) => { |
|
15 |
+ try { |
|
16 |
+ const tokenString = await AsyncStorage.getItem('token'); |
|
17 |
+ if (tokenString) { |
|
18 |
+ const tokenObject = JSON.parse(tokenString); |
|
19 |
+ const accessToken = tokenObject?.accessToken; |
|
20 |
+ |
|
21 |
+ |
|
22 |
+ if (!accessToken) { |
|
23 |
+ await AsyncStorage.removeItem('token'); |
|
24 |
+ navigation.navigate('Login'); |
|
25 |
+ return null; |
|
26 |
+ } |
|
27 |
+ |
|
28 |
+ return accessToken; |
|
29 |
+ } else { |
|
30 |
+ console.log("토큰이 스토리지에 없습니다."); |
|
31 |
+ navigation.navigate('Login'); |
|
32 |
+ return null; |
|
33 |
+ } |
|
34 |
+ } catch (error) { |
|
35 |
+ console.error('토큰 처리 오류:', error.message); |
|
36 |
+ navigation.navigate('Login'); |
|
37 |
+ return null; |
|
38 |
+ } |
|
39 |
+}; |
|
40 |
+ |
|
41 |
+ |
|
42 |
+ |
|
11 | 43 |
|
12 | 44 |
const ApiUtils = { |
13 | 45 |
register: async (userData) => { |
... | ... | @@ -30,16 +62,83 @@ |
30 | 62 |
} |
31 | 63 |
}, |
32 | 64 |
|
65 |
+ saveTripLog: async (data, navigation) => { |
|
66 |
+ try { |
|
67 |
+ // getAccessToken 함수 호출 |
|
68 |
+ const accessToken = await getAccessToken(navigation); |
|
69 |
+ |
|
70 |
+ // accessToken이 없으면 중단 |
|
71 |
+ if (!accessToken) return; |
|
72 |
+ |
|
73 |
+ // 데이터 전송 |
|
74 |
+ const response = await apiInstance.post('/action/gps_update', data, { |
|
75 |
+ headers: { |
|
76 |
+ 'Content-Type': 'application/json', |
|
77 |
+ Authorization: accessToken, // 토큰을 헤더에 포함 |
|
78 |
+ }, |
|
79 |
+ }); |
|
80 |
+ |
|
81 |
+ return response.data; |
|
82 |
+ } catch (error) { |
|
83 |
+ console.error('save trip log error:', error.response?.status, error.response?.data || error.message); |
|
84 |
+ throw error.response?.data || error; |
|
85 |
+ } |
|
86 |
+ }, |
|
87 |
+ |
|
88 |
+ saveResult: async (result, navigation) => { |
|
89 |
+ try { |
|
90 |
+ // getAccessToken 함수 호출 |
|
91 |
+ const accessToken = await getAccessToken(navigation); |
|
92 |
+ |
|
93 |
+ // accessToken이 없으면 중단 |
|
94 |
+ if (!accessToken) return; |
|
95 |
+ |
|
96 |
+ const response = await apiInstance.post('/action/trip_and_score_update', result, { |
|
97 |
+ headers: { |
|
98 |
+ 'Content-Type': 'application/json', |
|
99 |
+ Authorization: accessToken, |
|
100 |
+ }, |
|
101 |
+ }); |
|
102 |
+ return response.data; |
|
103 |
+ } catch (error) { |
|
104 |
+ console.error('result save error:', error.response?.status, error.response?.data || error.message); |
|
105 |
+ throw error.response?.data || error; |
|
106 |
+ } |
|
107 |
+ }, |
|
108 |
+ |
|
109 |
+ getHistory: async (result, navigation) => { |
|
110 |
+ try { |
|
111 |
+ // getAccessToken 함수 호출 |
|
112 |
+ const accessToken = await getAccessToken(navigation); |
|
113 |
+ |
|
114 |
+ // accessToken이 없으면 중단 |
|
115 |
+ if (!accessToken) return; |
|
116 |
+ |
|
117 |
+ const response = await apiInstance.post('/action/get_history', result, { |
|
118 |
+ headers: { |
|
119 |
+ 'Content-Type': 'application/json', |
|
120 |
+ Authorization: accessToken, |
|
121 |
+ }, |
|
122 |
+ }); |
|
123 |
+ console.log(response.data.data) |
|
124 |
+ return response.data; |
|
125 |
+ } catch (error) { |
|
126 |
+ console.error('getHistory error:', error.response?.status, error.response?.data || error.message); |
|
127 |
+ throw error.response?.data || error; |
|
128 |
+ } |
|
129 |
+ }, |
|
130 |
+ |
|
131 |
+ // 외부 API |
|
33 | 132 |
uploadPhoto: async (uri) => { |
34 | 133 |
const formData = new FormData(); |
35 |
- formData.append('photo', { |
|
134 |
+ formData.append('file', { |
|
36 | 135 |
uri, |
37 | 136 |
type: 'image/jpeg', |
38 | 137 |
name: 'photo.jpg', |
39 | 138 |
}); |
40 | 139 |
|
41 | 140 |
try { |
42 |
- const response = await apiInstance.post('/upload', formData, { |
|
141 |
+ const response = await apiInstance.post('http://121.181.165.130:8077/predict', formData, { |
|
43 | 142 |
headers: { |
44 | 143 |
'Content-Type': 'multipart/form-data', |
45 | 144 |
}, |
... | ... | @@ -51,47 +150,21 @@ |
51 | 150 |
} |
52 | 151 |
}, |
53 | 152 |
|
54 |
- sendTripLog: async (data, navigation) => { |
|
55 |
- console.log(data); |
|
153 |
+ sendTripLog: async (data) => { |
|
154 |
+ console.log("보낸값",data) |
|
56 | 155 |
try { |
57 |
- // AsyncStorage에서 토큰 가져오기 |
|
58 |
- const tokenString = await AsyncStorage.getItem('token'); |
|
59 |
- if (tokenString) { |
|
60 |
- const tokenObject = JSON.parse(tokenString); |
|
61 |
- const accessToken = tokenObject.accessToken; |
|
62 |
- |
|
63 |
- if (!accessToken) { |
|
64 |
- await AsyncStorage.removeItem('token'); |
|
65 |
- // 로그인 페이지로 리디렉션 |
|
66 |
- navigation.navigate('Login'); |
|
67 |
- return; |
|
68 |
- } |
|
69 |
- |
|
70 |
- // 데이터 전송 |
|
71 |
- try { |
|
72 |
- const response = await apiInstance.post('/action/gps_update', data, { |
|
73 |
- headers: { |
|
74 |
- 'Content-Type': 'application/json', |
|
75 |
- Authorization: `${accessToken}`, // Bearer 스키마를 사용하도록 수정 |
|
76 |
- }, |
|
77 |
- }); |
|
78 |
- return response.data; |
|
79 |
- } catch (error) { |
|
80 |
- console.error('Send trip log error:', error.response?.status, error.response?.data || error.message); |
|
81 |
- throw error.response?.data || error; |
|
82 |
- } |
|
83 |
- } else { |
|
84 |
- console.log("토큰이 스토리지에 없습니다."); |
|
85 |
- // 로그인 페이지로 리디렉션 |
|
86 |
- navigation.navigate('Login'); |
|
87 |
- } |
|
156 |
+ const response = await axios.post('http://121.181.165.130:8077/calculate_safety_score', data, { |
|
157 |
+ headers: { |
|
158 |
+ 'Content-Type': 'application/json', |
|
159 |
+ }, |
|
160 |
+ }); |
|
161 |
+ console.log("결과값",response.data) |
|
162 |
+ return response.data; |
|
88 | 163 |
} catch (error) { |
89 |
- console.error('Token retrieval error:', error.message); |
|
90 |
- // 로그인 페이지로 리디렉션 |
|
91 |
- navigation.navigate('Login'); |
|
164 |
+ console.error('Send trip log error:', error.response?.status, error.response?.data || error.message); |
|
165 |
+ throw error.response?.data || error; |
|
92 | 166 |
} |
93 |
- } |
|
94 |
- |
|
167 |
+ }, |
|
95 | 168 |
}; |
96 | 169 |
|
97 | 170 |
export default ApiUtils; |
+++ src/asset/helmet_off.png
Binary file is not shown |
+++ src/asset/helmet_on.png
Binary file is not shown |
+++ src/context/AuthContext.js
... | ... | @@ -0,0 +1,62 @@ |
1 | +import React, { createContext, useState, useEffect } from 'react'; | |
2 | +import AsyncStorage from '@react-native-async-storage/async-storage'; | |
3 | +import { useLocation } from './LocationProvider'; | |
4 | + | |
5 | +export const AuthContext = createContext(); | |
6 | + | |
7 | +export const AuthProvider = ({ children }) => { | |
8 | + const [isLoggedIn, setIsLoggedIn] = useState(false); | |
9 | + const [loading, setLoading] = useState(true); | |
10 | + const { startLocationTracking } = useLocation(); | |
11 | + | |
12 | + useEffect(() => { | |
13 | + const checkToken = async () => { | |
14 | + try { | |
15 | + const tokenString = await AsyncStorage.getItem('token'); | |
16 | + if (tokenString) { | |
17 | + // Token이 존재하면 로그인 상태를 true로 설정 | |
18 | + setIsLoggedIn(true); | |
19 | + // Token이 존재할 때 위치 추적 시작 | |
20 | + startLocationTracking(); | |
21 | + } else { | |
22 | + // Token이 없으면 로그인 상태를 false로 설정 | |
23 | + setIsLoggedIn(false); | |
24 | + } | |
25 | + } catch (error) { | |
26 | + // Token을 가져오는 도중 에러가 발생하면 에러를 콘솔에 출력 | |
27 | + console.error('Token check error:', error); | |
28 | + setIsLoggedIn(false); | |
29 | + } finally { | |
30 | + // Token 확인이 끝난 후에는 로딩 상태를 false로 설정 | |
31 | + setLoading(false); | |
32 | + } | |
33 | + }; | |
34 | + | |
35 | + // 컴포넌트가 마운트될 때 checkToken 함수를 호출 | |
36 | + checkToken(); | |
37 | + }, []); | |
38 | + | |
39 | + const login = async (token) => { | |
40 | + try { | |
41 | + await AsyncStorage.setItem('token', JSON.stringify({ accessToken: token })) | |
42 | + setIsLoggedIn(true); | |
43 | + } catch (error) { | |
44 | + console.error('Login error:', error); | |
45 | + } | |
46 | + }; | |
47 | + | |
48 | + const logout = async () => { | |
49 | + try { | |
50 | + await AsyncStorage.removeItem('token'); | |
51 | + setIsLoggedIn(false); | |
52 | + } catch (error) { | |
53 | + console.error('Logout error:', error); | |
54 | + } | |
55 | + }; | |
56 | + | |
57 | + return ( | |
58 | + <AuthContext.Provider value={{ isLoggedIn, loading, login, logout }}> | |
59 | + {children} | |
60 | + </AuthContext.Provider> | |
61 | + ); | |
62 | +}; |
+++ src/context/LocationProvider.js
... | ... | @@ -0,0 +1,82 @@ |
1 | +import React, { createContext, useState, useContext, useEffect } from 'react'; | |
2 | +import Geolocation from 'react-native-geolocation-service'; | |
3 | + | |
4 | +const LocationContext = createContext(); | |
5 | + | |
6 | +export const LocationProvider = ({ children }) => { | |
7 | + const [watchId, setWatchId] = useState(null); | |
8 | + const [locationData, setLocationData] = useState({ latitude: [], longitude: [], timestamp: [] }); | |
9 | + | |
10 | + useEffect(() => { | |
11 | + // 컴포넌트 언마운트 시 위치 감시 중단 | |
12 | + return () => { | |
13 | + if (watchId !== null) { | |
14 | + Geolocation.clearWatch(watchId); | |
15 | + console.log('위치서비스 종료'); | |
16 | + } | |
17 | + }; | |
18 | + }, []); | |
19 | + | |
20 | + const startLocationTracking = () => { | |
21 | + if (watchId !== null) { | |
22 | + Geolocation.clearWatch(watchId); // 기존 감시 중단 | |
23 | + } | |
24 | + | |
25 | + const id = Geolocation.watchPosition( | |
26 | + (position) => { | |
27 | + const { latitude, longitude } = position.coords; | |
28 | + const time = new Date().toISOString(); | |
29 | + const timestamp = formatDate(time); | |
30 | + | |
31 | + console.log('위치 업데이트:', { latitude, longitude, timestamp }); | |
32 | + | |
33 | + setLocationData((prevData) => ({ | |
34 | + latitude: [...prevData.latitude, latitude], | |
35 | + longitude: [...prevData.longitude, longitude], | |
36 | + timestamp: [...prevData.timestamp, timestamp], | |
37 | + })); | |
38 | + }, | |
39 | + (error) => { | |
40 | + console.error('위치 감시 중 오류:', error); | |
41 | + }, | |
42 | + { | |
43 | + enableHighAccuracy: true, | |
44 | + distanceFilter: 0, | |
45 | + interval: 1000, | |
46 | + fastestInterval: 1000, | |
47 | + forceRequestLocation: true, | |
48 | + } | |
49 | + ); | |
50 | + | |
51 | + setWatchId(id); | |
52 | + }; | |
53 | + | |
54 | + // const stopLocationTracking = () => { | |
55 | + // if (watchId !== null) { | |
56 | + // Geolocation.clearWatch(watchId); // 감시 중단 | |
57 | + // setWatchId(null); // watchId 초기화 | |
58 | + // console.log('위치 추적 중단'); | |
59 | + // } | |
60 | + // }; | |
61 | + | |
62 | + const formatDate = (time) => { | |
63 | + const date = new Date(time); | |
64 | + const year = date.getFullYear(); | |
65 | + const month = `0${date.getMonth() + 1}`.slice(-2); | |
66 | + const day = `0${date.getDate()}`.slice(-2); | |
67 | + const hours = `0${date.getHours()}`.slice(-2); | |
68 | + const minutes = `0${date.getMinutes()}`.slice(-2); | |
69 | + const seconds = `0${date.getSeconds()}`.slice(-2); | |
70 | + const milliseconds = `00${date.getMilliseconds()}`.slice(-3); | |
71 | + | |
72 | + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`; | |
73 | + }; | |
74 | + | |
75 | + return ( | |
76 | + <LocationContext.Provider value={{ startLocationTracking, locationData, setLocationData }}> | |
77 | + {children} | |
78 | + </LocationContext.Provider> | |
79 | + ); | |
80 | +}; | |
81 | + | |
82 | +export const useLocation = () => useContext(LocationContext); |
--- src/screen/AgreementScreen.js
+++ src/screen/AgreementScreen.js
... | ... | @@ -18,14 +18,14 @@ |
18 | 18 |
id: '', |
19 | 19 |
password: '', |
20 | 20 |
email: '', |
21 |
- sex: null, |
|
21 |
+ // sex: null, |
|
22 | 22 |
phone: '', |
23 | 23 |
}); |
24 | 24 |
|
25 |
- const radio_props = [ |
|
26 |
- { label: '여성', value: '여성' }, |
|
27 |
- { label: '남성', value: '남성' }, |
|
28 |
- ]; |
|
25 |
+ // const radio_props = [ |
|
26 |
+ // { label: '여성', value: '여성' }, |
|
27 |
+ // { label: '남성', value: '남성' }, |
|
28 |
+ // ]; |
|
29 | 29 |
|
30 | 30 |
const handleInputChange = (field, value) => { |
31 | 31 |
setAgreement(prevAgreement => ({ |
... | ... | @@ -93,7 +93,7 @@ |
93 | 93 |
onChangeText={text => handleInputChange('email', text)} |
94 | 94 |
/> |
95 | 95 |
</View> |
96 |
- <View style={styles.formGroup}> |
|
96 |
+ {/* <View style={styles.formGroup}> |
|
97 | 97 |
<Text style={styles.inputLabel}>성별</Text> |
98 | 98 |
<View style={styles.radioForm}> |
99 | 99 |
{radio_props.map((radio, index) => ( |
... | ... | @@ -109,7 +109,7 @@ |
109 | 109 |
</RadioButton> |
110 | 110 |
))} |
111 | 111 |
</View> |
112 |
- </View> |
|
112 |
+ </View> */} |
|
113 | 113 |
<View style={styles.formGroup}> |
114 | 114 |
<Text style={styles.inputLabel}>전화번호</Text> |
115 | 115 |
<TextInput |
... | ... | @@ -143,6 +143,7 @@ |
143 | 143 |
color: '#007AFF', |
144 | 144 |
fontWeight: 'bold', |
145 | 145 |
marginVertical: 20, |
146 |
+ padding:15 |
|
146 | 147 |
}, |
147 | 148 |
formGroup: { |
148 | 149 |
width: '100%', |
--- src/screen/AnalysisScreen.js
+++ src/screen/AnalysisScreen.js
... | ... | @@ -1,64 +1,73 @@ |
1 | 1 |
import { StyleSheet, View, Text, Image } from 'react-native'; |
2 | 2 |
import React from 'react'; |
3 |
-import AnalysisComponent from '../component/AnalysisComponent'; |
|
4 | 3 |
|
5 |
-// 더미데이터 |
|
6 |
-const data = { |
|
7 |
- score: 95, |
|
8 |
- distance: 36, |
|
9 |
- time: 100, |
|
10 |
-}; |
|
4 |
+export default function AnalysisScreen({ route }) { |
|
5 |
+ const { result } = route.params; |
|
11 | 6 |
|
12 |
-export default function AnalysisScreen() { |
|
7 |
+ console.log(result.helmet_on); |
|
8 |
+ |
|
9 |
+ // 운행 거리를 km 혹은 m로 변환하는 함수 |
|
10 |
+ const formatDistance = (distance) => { |
|
11 |
+ if (distance >= 1000) { |
|
12 |
+ return (distance / 1000).toFixed(2) + ' km'; // 소수점 2자리까지 표시 |
|
13 |
+ } else { |
|
14 |
+ return distance.toFixed(2) + ' m'; |
|
15 |
+ } |
|
16 |
+ }; |
|
17 |
+ |
|
13 | 18 |
return ( |
14 | 19 |
<View style={styles.container}> |
15 |
- <Score score={data.score} distance={data.distance} time={data.time} /> |
|
16 |
- <View style={styles.totalBoxView}> |
|
17 |
- <TotalBox distance={data.distance} /> |
|
18 |
- <TotalBox time={data.time} /> |
|
19 |
- </View> |
|
20 |
- <View style={styles.summaryContainer}> |
|
21 |
- <AnalysisComponent /> |
|
22 |
- </View> |
|
23 |
- </View> |
|
24 |
- ); |
|
25 |
-} |
|
26 | 20 |
|
27 |
-// 운행 점수 컴포넌트 |
|
28 |
-function Score({ score }) { |
|
29 |
- return ( |
|
30 |
- <View style={styles.scoreContainer}> |
|
31 |
- <View style={styles.scoreTextBox}> |
|
32 |
- <Text style={styles.scoreText}>'이용자'님의 운행 점수</Text> |
|
33 |
- <Text style={styles.score}> |
|
34 |
- <Text style={styles.boldText}>{score}</Text> 점 |
|
35 |
- </Text> |
|
36 |
- </View> |
|
37 |
- <Image source={require('../asset/bicycle.png')} style={styles.image} /> |
|
38 |
- </View> |
|
39 |
- ); |
|
40 |
-} |
|
21 |
+ <View style={styles.scoreContainer}> |
|
22 |
+ {/* 안전운행 점수 */} |
|
23 |
+ <View style={styles.scoreSection}> |
|
24 |
+ <Text style={styles.sectionTitle}>안전운행 점수</Text> |
|
25 |
+ <Text style={styles.scoreText}>{result.final_score}</Text> |
|
26 |
+ </View> |
|
41 | 27 |
|
42 |
-// 총 이동거리, 주행시간 컴포넌트 |
|
43 |
-function TotalBox({ distance, time }) { |
|
44 |
- return ( |
|
45 |
- <View style={styles.totalBoxContainer}> |
|
46 |
- <View style={styles.totalBoxLabelContainer}> |
|
47 |
- {distance !== undefined ? ( |
|
48 |
- <> |
|
49 |
- <Text style={styles.totalBoxLabel}>총 이동거리</Text> |
|
50 |
- <Text style={styles.totalBoxValue}> |
|
51 |
- {distance} <Text style={styles.totalBoxLabel}> km</Text> |
|
52 |
- </Text> |
|
53 |
- </> |
|
54 |
- ) : ( |
|
55 |
- <> |
|
56 |
- <Text style={styles.totalBoxLabel}>총 주행시간</Text> |
|
57 |
- <Text style={styles.totalBoxValue}> |
|
58 |
- {time} <Text style={styles.totalBoxLabel}> 시간</Text> |
|
59 |
- </Text> |
|
60 |
- </> |
|
61 |
- )} |
|
28 |
+ {/* 운행 거리 */} |
|
29 |
+ <View style={styles.helmetSection}> |
|
30 |
+ <Text style={styles.distanceTitle}>운행 거리</Text> |
|
31 |
+ <Text style={styles.distanceValue}>{formatDistance(result.total_distance_m)}</Text> |
|
32 |
+ </View> |
|
33 |
+ |
|
34 |
+ {/* 안전모 착용 여부 */} |
|
35 |
+ <View style={styles.helmetSection}> |
|
36 |
+ <Text style={styles.sectionTitle}>안전모 착용 여부</Text> |
|
37 |
+ { |
|
38 |
+ result.helmet_on === "true" ? |
|
39 |
+ <Image |
|
40 |
+ source={require('../asset/helmet_on.png')} |
|
41 |
+ style={styles.helmetImage} |
|
42 |
+ alt="Helmet On" |
|
43 |
+ /> : |
|
44 |
+ <Image |
|
45 |
+ source={require('../asset/helmet_off.png')} |
|
46 |
+ style={styles.helmetImage} |
|
47 |
+ alt="Helmet Off" |
|
48 |
+ /> |
|
49 |
+ } |
|
50 |
+ </View> |
|
51 |
+ </View> |
|
52 |
+ |
|
53 |
+ {/* 급가속, 급감속, 급발진, 급정지 - 4분할 박스 */} |
|
54 |
+ <View style={styles.boxContainer}> |
|
55 |
+ <View style={styles.halfBox}> |
|
56 |
+ <Text style={styles.boxTitle}>급가속</Text> |
|
57 |
+ <Text style={styles.boxValue}>{result.abrupt_acceleration_count}</Text> |
|
58 |
+ </View> |
|
59 |
+ <View style={styles.halfBox}> |
|
60 |
+ <Text style={styles.boxTitle}>급감속</Text> |
|
61 |
+ <Text style={styles.boxValue}>{result.abrupt_deceleration_count}</Text> |
|
62 |
+ </View> |
|
63 |
+ <View style={styles.halfBox}> |
|
64 |
+ <Text style={styles.boxTitle}>급발진</Text> |
|
65 |
+ <Text style={styles.boxValue}>{result.abrupt_start_count}</Text> |
|
66 |
+ </View> |
|
67 |
+ <View style={styles.halfBox}> |
|
68 |
+ <Text style={styles.boxTitle}>급정지</Text> |
|
69 |
+ <Text style={styles.boxValue}>{result.abrupt_stop_count}</Text> |
|
70 |
+ </View> |
|
62 | 71 |
</View> |
63 | 72 |
</View> |
64 | 73 |
); |
... | ... | @@ -67,73 +76,98 @@ |
67 | 76 |
const styles = StyleSheet.create({ |
68 | 77 |
container: { |
69 | 78 |
flex: 1, |
70 |
- backgroundColor: '#ffffff', |
|
79 |
+ justifyContent: 'center', // 수직 가운데 정렬 |
|
80 |
+ alignItems: 'center', // 수평 가운데 정렬 |
|
81 |
+ backgroundColor: '#f7f7f7', |
|
71 | 82 |
padding: 20, |
72 | 83 |
}, |
73 | 84 |
scoreContainer: { |
74 | 85 |
width: '100%', |
75 |
- marginTop: 20, |
|
76 |
- backgroundColor: '#5488FF', |
|
77 |
- borderRadius: 10, |
|
78 |
- paddingVertical: 15, |
|
79 |
- paddingHorizontal: 20, |
|
80 |
- flexDirection: 'row', |
|
81 |
- alignItems: 'center', |
|
82 |
- justifyContent: 'space-between', |
|
83 | 86 |
}, |
84 |
- scoreTextBox: { |
|
85 |
- flexDirection: 'column', |
|
86 |
- justifyContent: 'space-between', |
|
87 |
- }, |
|
88 |
- scoreText: { |
|
89 |
- fontSize: 20, |
|
90 |
- color: '#ffffff', |
|
91 |
- }, |
|
92 |
- boldText: { |
|
93 |
- fontSize: 65, |
|
94 |
- fontWeight: 'bold', |
|
95 |
- }, |
|
96 |
- score: { |
|
97 |
- color: '#ffffff', |
|
98 |
- fontSize: 40, |
|
99 |
- fontWeight: 'bold', |
|
100 |
- }, |
|
101 |
- image: { |
|
102 |
- width: 120, |
|
103 |
- height: 130, |
|
104 |
- marginLeft: 10, |
|
105 |
- }, |
|
106 |
- totalBoxView: { |
|
107 |
- flexDirection: 'row', |
|
108 |
- justifyContent: 'space-between', |
|
109 |
- flexWrap: 'wrap', |
|
110 |
- }, |
|
111 |
- totalBoxContainer: { |
|
112 |
- marginVertical: 20, |
|
113 |
- paddingHorizontal: 10, |
|
114 |
- paddingVertical: 10, |
|
87 |
+ scoreSection: { |
|
88 |
+ padding: 20, |
|
89 |
+ marginBottom: 20, |
|
90 |
+ alignItems: 'center', // 가운데 정렬 |
|
115 | 91 |
backgroundColor: '#ffffff', |
116 | 92 |
borderRadius: 10, |
117 |
- elevation: 5, |
|
118 |
- width: '48%', |
|
93 |
+ shadowColor: '#000', |
|
94 |
+ shadowOffset: { width: 0, height: 2 }, |
|
95 |
+ shadowOpacity: 0.1, |
|
96 |
+ shadowRadius: 5, |
|
97 |
+ elevation: 3, // Android에서 그림자 효과 |
|
119 | 98 |
}, |
120 |
- totalBoxLabelContainer: { |
|
121 |
- flexDirection: 'column', |
|
122 |
- justifyContent: 'space-between', |
|
123 |
- alignItems: 'flex-start', |
|
99 |
+ sectionTitle: { |
|
100 |
+ fontSize: 18, |
|
101 |
+ fontWeight: 'bold', |
|
102 |
+ marginBottom: 10, |
|
103 |
+ color: '#333', |
|
124 | 104 |
}, |
125 |
- totalBoxLabel: { |
|
126 |
- color: '#000000', |
|
127 |
- fontSize: 16, |
|
105 |
+ scoreText: { |
|
106 |
+ fontSize: 72, // 3배 크기 |
|
107 |
+ fontWeight: '600', |
|
108 |
+ color: '#007AFF', |
|
128 | 109 |
}, |
129 |
- totalBoxValue: { |
|
130 |
- color: '#5488FF', |
|
110 |
+ distanceContainer: { |
|
111 |
+ flexDirection: 'row', // 수평 정렬 |
|
112 |
+ justifyContent: 'space-between', // 공간을 양쪽에 배치 |
|
113 |
+ alignItems: 'center', |
|
114 |
+ padding: 20, |
|
115 |
+ marginBottom: 20, |
|
116 |
+ }, |
|
117 |
+ distanceTitle: { |
|
118 |
+ fontSize: 18, |
|
119 |
+ fontWeight: 'bold', |
|
120 |
+ color: '#333', |
|
121 |
+ }, |
|
122 |
+ distanceValue: { |
|
131 | 123 |
fontSize: 24, |
132 | 124 |
fontWeight: '600', |
133 |
- textAlign: 'left', |
|
125 |
+ color: '#007AFF', |
|
134 | 126 |
}, |
135 |
- summaryContainer: { |
|
136 |
- flex: 4, |
|
137 |
- marginTop: 10, |
|
127 |
+ helmetSection: { |
|
128 |
+ padding: 20, |
|
129 |
+ marginBottom: 20, |
|
130 |
+ flexDirection: 'row', // 수평 정렬 |
|
131 |
+ justifyContent: 'space-between', // 양쪽 끝에 배치 |
|
132 |
+ alignItems: 'center', |
|
133 |
+ backgroundColor: '#ffffff', |
|
134 |
+ borderRadius: 10, |
|
135 |
+ shadowColor: '#000', |
|
136 |
+ shadowOffset: { width: 0, height: 2 }, |
|
137 |
+ shadowOpacity: 0.1, |
|
138 |
+ shadowRadius: 5, |
|
139 |
+ elevation: 3, // Android에서 그림자 효과 |
|
140 |
+ }, |
|
141 |
+ boxContainer: { |
|
142 |
+ flexDirection: 'row', |
|
143 |
+ flexWrap: 'wrap', |
|
144 |
+ justifyContent: 'space-between', |
|
145 |
+ width: '100%', |
|
146 |
+ marginBottom: 20, |
|
147 |
+ }, |
|
148 |
+ halfBox: { |
|
149 |
+ backgroundColor: '#ffffff', |
|
150 |
+ width: '48%', |
|
151 |
+ padding: 20, |
|
152 |
+ borderRadius: 10, |
|
153 |
+ marginBottom: 10, |
|
154 |
+ alignItems: 'center', |
|
155 |
+ justifyContent: 'center', |
|
156 |
+ shadowColor: '#000', |
|
157 |
+ shadowOffset: { width: 0, height: 2 }, |
|
158 |
+ shadowOpacity: 0.1, |
|
159 |
+ shadowRadius: 5, |
|
160 |
+ elevation: 3, // Android에서 그림자 효과 |
|
161 |
+ }, |
|
162 |
+ boxTitle: { |
|
163 |
+ fontSize: 16, |
|
164 |
+ fontWeight: 'bold', |
|
165 |
+ marginBottom: 8, |
|
166 |
+ color: '#333', |
|
167 |
+ }, |
|
168 |
+ boxValue: { |
|
169 |
+ fontSize: 20, |
|
170 |
+ fontWeight: '600', |
|
171 |
+ color: '#007AFF', |
|
138 | 172 |
}, |
139 | 173 |
}); |
--- src/screen/CameraScreen.js
+++ src/screen/CameraScreen.js
... | ... | @@ -2,6 +2,7 @@ |
2 | 2 |
import { View, Button, StyleSheet, Alert, Text, Linking, TouchableOpacity } from 'react-native'; |
3 | 3 |
import { Camera, useCameraDevice } from 'react-native-vision-camera'; |
4 | 4 |
import { useNavigation } from '@react-navigation/native'; |
5 |
+import AsyncStorage from '@react-native-async-storage/async-storage'; |
|
5 | 6 |
import Api from '../api/ApiUtils' |
6 | 7 |
|
7 | 8 |
const CameraScreen = () => { |
... | ... | @@ -15,7 +16,6 @@ |
15 | 16 |
const checkPermission = async () => { |
16 | 17 |
try { |
17 | 18 |
const cameraPermission = await Camera.getCameraPermissionStatus(); |
18 |
- console.log('Current permission status:', cameraPermission); |
|
19 | 19 |
|
20 | 20 |
if (cameraPermission === 'granted') { |
21 | 21 |
setHasPermission(true); |
... | ... | @@ -50,8 +50,6 @@ |
50 | 50 |
}, []); |
51 | 51 |
|
52 | 52 |
useEffect(() => { |
53 |
- // Debugging: Check if device is defined and ready |
|
54 |
- console.log('Device:', device); |
|
55 | 53 |
if (device) { |
56 | 54 |
setIsDeviceReady(true); |
57 | 55 |
} else { |
... | ... | @@ -66,23 +64,69 @@ |
66 | 64 |
flash: 'off', |
67 | 65 |
qualityPrioritization: 'speed', |
68 | 66 |
}); |
69 |
- navigation.navigate('Gps'); |
|
70 |
- // // API 호출을 비동기로 처리 |
|
71 |
- // const response = await Api.uploadPhoto(uri); |
|
72 | 67 |
|
73 |
- // // 응답 상태 코드가 200일 경우 페이지 이동 |
|
74 |
- // if (response.status === 200) { |
|
75 |
- // navigation.navigate('Gps'); |
|
76 |
- // } else { |
|
77 |
- // // 상태 코드가 200이 아닐 경우 에러 메시지 표시 |
|
78 |
- // Alert.alert('업로드 실패', '사진 업로드에 실패했습니다.'); |
|
79 |
- // } |
|
68 |
+ const uri = photo.path; |
|
69 |
+ // API 호출을 비동기로 처리 |
|
70 |
+ const response = await Api.uploadPhoto(uri); |
|
71 |
+ |
|
72 |
+ // 응답 상태 코드에 따른 처리 |
|
73 |
+ if (response.class_id !== 1) { |
|
74 |
+ let alertMessage = ''; |
|
75 |
+ let alertTitle = '분석 실패'; |
|
76 |
+ |
|
77 |
+ // 클래스 ID에 따른 메시지 설정 |
|
78 |
+ switch (response.class_id) { |
|
79 |
+ case 0: |
|
80 |
+ alertMessage = '헬멧을 찾을 수 없습니다. 사진을 다시 찍으시겠습니까? 아니면 감점을 받고 넘어가시겠습니까?'; |
|
81 |
+ break; |
|
82 |
+ case 2: |
|
83 |
+ alertMessage = '사용자를 찾을 수 없습니다. 사진을 다시 찍으시겠습니까? 아니면 감점을 받고 넘어가시겠습니까?'; |
|
84 |
+ break; |
|
85 |
+ default: |
|
86 |
+ alertMessage = '사진 분석에 실패했습니다. 사진을 다시 찍으시겠습니까? 아니면 감점을 받고 넘어가시겠습니까?'; |
|
87 |
+ } |
|
88 |
+ |
|
89 |
+ Alert.alert( |
|
90 |
+ alertTitle, |
|
91 |
+ alertMessage, |
|
92 |
+ [ |
|
93 |
+ { |
|
94 |
+ text: '사진 다시 찍기', |
|
95 |
+ onPress: () => { } // 사진을 다시 찍는 함수 호출 |
|
96 |
+ }, |
|
97 |
+ { |
|
98 |
+ text: '다음으로 넘어가기', |
|
99 |
+ onPress: async () => { // onPress 핸들러를 async로 정의 |
|
100 |
+ try { |
|
101 |
+ await AsyncStorage.setItem('safty_helmet_on', JSON.stringify(false)); |
|
102 |
+ // 점수 감점 처리 로직 (필요시 추가) |
|
103 |
+ navigation.navigate('Gps'); // 다음 스텝으로 이동 |
|
104 |
+ } catch (error) { |
|
105 |
+ console.error('AsyncStorage error:', error); |
|
106 |
+ } |
|
107 |
+ }, |
|
108 |
+ style: 'destructive' |
|
109 |
+ } |
|
110 |
+ ] |
|
111 |
+ ); |
|
112 |
+ } else { |
|
113 |
+ try { |
|
114 |
+ await AsyncStorage.setItem('safty_helmet_on', JSON.stringify(true)); |
|
115 |
+ // 응답 상태 코드가 1일 경우 다음 페이지로 이동 |
|
116 |
+ navigation.navigate('Gps'); |
|
117 |
+ } catch (error) { |
|
118 |
+ console.error('AsyncStorage error:', error); |
|
119 |
+ } |
|
120 |
+ } |
|
80 | 121 |
} catch (error) { |
81 | 122 |
console.error('Photo capture error:', error.message); |
82 | 123 |
Alert.alert('오류', '사진 캡처 중 오류가 발생했습니다.'); |
83 | 124 |
} |
84 | 125 |
} |
85 | 126 |
}; |
127 |
+ |
|
128 |
+ |
|
129 |
+ |
|
86 | 130 |
|
87 | 131 |
if (hasPermission === null) { |
88 | 132 |
return ( |
--- src/screen/GpsScreen.js
+++ src/screen/GpsScreen.js
... | ... | @@ -1,27 +1,25 @@ |
1 |
-import React, { useState, useEffect } from 'react'; |
|
2 |
-import { View, Text, StyleSheet, Alert, TouchableOpacity, Platform } from 'react-native'; |
|
1 |
+import React, { useState, useEffect, useContext } from 'react'; |
|
2 |
+import { View, Text, StyleSheet, Alert, TouchableOpacity } from 'react-native'; |
|
3 | 3 |
import AsyncStorage from '@react-native-async-storage/async-storage'; |
4 | 4 |
import crypto from 'crypto-js'; |
5 | 5 |
import Api from '../api/ApiUtils'; |
6 | 6 |
import { useNavigation } from '@react-navigation/native'; |
7 | 7 |
import MaterialIcons from 'react-native-vector-icons/MaterialIcons'; |
8 |
-import Geolocation from 'react-native-geolocation-service'; |
|
9 | 8 |
import { useKeepAwake } from '@sayem314/react-native-keep-awake'; |
10 |
-import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions'; |
|
9 |
+import { useLocation } from '../context/LocationProvider'; |
|
10 |
+import { AuthContext } from '../context/AuthContext'; |
|
11 | 11 |
|
12 | 12 |
const GpsScreen = () => { |
13 | 13 |
const [isMeasuring, setIsMeasuring] = useState(false); |
14 | 14 |
const [elapsedTime, setElapsedTime] = useState(0); |
15 | 15 |
const [tripId, setTripId] = useState(''); |
16 | 16 |
const [userId, setUserId] = useState(''); |
17 |
- const [locationData, setLocationData] = useState({ |
|
18 |
- latitude: [], |
|
19 |
- longitude: [], |
|
20 |
- timestamp: [] |
|
21 |
- }); |
|
22 |
- const [watchId, setWatchId] = useState(null); |
|
17 |
+ const [safty, setSafty] = useState(''); |
|
18 |
+ const [startTimestamp, setStartTimestamp] = useState(null); |
|
19 |
+ const { locationData, setLocationData } = useLocation(); |
|
20 |
+ const [resultData, setResultData] = useState(null); |
|
23 | 21 |
const navigation = useNavigation(); |
24 |
- |
|
22 |
+ const { logout } = useContext(AuthContext); |
|
25 | 23 |
useKeepAwake(); |
26 | 24 |
|
27 | 25 |
useEffect(() => { |
... | ... | @@ -44,18 +42,19 @@ |
44 | 42 |
const fetchUserId = async () => { |
45 | 43 |
try { |
46 | 44 |
const storedUserId = await AsyncStorage.getItem('user_id'); |
45 |
+ const storedSafty = await AsyncStorage.getItem('safty_helmet_on'); |
|
46 |
+ //헬멧 착용여부 가져와서 저장 |
|
47 |
+ setSafty(storedSafty); |
|
48 |
+ //사용자 아이디 가져와서 저장 |
|
47 | 49 |
if (storedUserId !== null) { |
48 | 50 |
setUserId(storedUserId); |
49 | 51 |
} |
50 | 52 |
} catch (error) { |
51 |
- console.error('Error fetching user_id from AsyncStorage:', error); |
|
53 |
+ console.error('Error fetching user_id, safty_helmet_on from AsyncStorage:', error); |
|
52 | 54 |
} |
53 | 55 |
}; |
54 | 56 |
|
55 | 57 |
fetchUserId(); |
56 |
- |
|
57 |
- // 처음 로드될 때 위치 권한 요청 |
|
58 |
- requestLocationPermission(); |
|
59 | 58 |
}, []); |
60 | 59 |
|
61 | 60 |
const generateTripId = () => { |
... | ... | @@ -65,117 +64,138 @@ |
65 | 64 |
return sha256Hash; |
66 | 65 |
}; |
67 | 66 |
|
68 |
- const requestLocationPermission = async () => { |
|
69 |
- if (Platform.OS === 'ios') { |
|
70 |
- const status = await request(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE); |
|
71 |
- console.log("권한요청:",status) |
|
72 |
- if (status !== RESULTS.GRANTED) { |
|
73 |
- Alert.alert('위치 권한 오류', '위치 권한을 허용해야 합니다.'); |
|
74 |
- } |
|
75 |
- } else if (Platform.OS === 'android') { |
|
76 |
- const status = await request(PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION); |
|
77 |
- if (status !== RESULTS.GRANTED) { |
|
78 |
- Alert.alert('위치 권한 오류', '위치 권한을 허용해야 합니다.'); |
|
79 |
- } |
|
80 |
- } |
|
81 |
- }; |
|
82 |
- |
|
83 |
- const handleStart = async () => { |
|
84 |
- const permissionGranted = await check( |
|
85 |
- Platform.OS === 'ios' |
|
86 |
- ? PERMISSIONS.IOS.LOCATION_WHEN_IN_USE |
|
87 |
- : PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION |
|
88 |
- ); |
|
89 |
- |
|
90 |
- console.log(permissionGranted); |
|
91 |
- |
|
92 |
- if (permissionGranted !== RESULTS.GRANTED) { |
|
93 |
- Alert.alert('위치 권한 오류', '위치 권한을 허용해야 합니다.'); |
|
94 |
- requestLocationPermission(); |
|
95 |
- return; |
|
96 |
- } |
|
97 |
- |
|
98 |
- try { |
|
99 |
- const newTripId = generateTripId(); |
|
100 |
- setTripId(newTripId); |
|
101 |
- setIsMeasuring(true); |
|
102 |
- startLocationTracking(); |
|
103 |
- } catch (error) { |
|
104 |
- console.error('Error starting location tracking:', error); |
|
105 |
- Alert.alert('오류', '위치 추적을 시작할 수 없습니다.'); |
|
106 |
- setIsMeasuring(false); |
|
107 |
- } |
|
67 |
+ const handleStart = () => { |
|
68 |
+ const time = new Date().toISOString(); |
|
69 |
+ const timestamp = formatDate(time); |
|
70 |
+ setStartTimestamp(timestamp); |
|
71 |
+ setIsMeasuring(true); |
|
72 |
+ setTripId(generateTripId()); |
|
108 | 73 |
}; |
109 | 74 |
|
110 | 75 |
const handleStop = async () => { |
111 |
- setIsMeasuring(false); |
|
112 |
- setElapsedTime(0); |
|
113 |
- |
|
114 |
- setLocationData({ |
|
115 |
- latitude: [], |
|
116 |
- longitude: [], |
|
117 |
- timestamp: [] |
|
118 |
- }); |
|
119 |
- |
|
120 |
- if (watchId !== null) { |
|
121 |
- Geolocation.clearWatch(watchId); |
|
122 |
- setWatchId(null); |
|
123 |
- } |
|
124 |
- |
|
125 |
- try { |
|
126 |
- const dataToSend = { |
|
127 |
- user_id: userId, |
|
128 |
- trip_id: tripId, |
|
129 |
- trip_log: locationData, |
|
130 |
- }; |
|
131 |
- |
|
132 |
- console.log('Data to send:', dataToSend); |
|
133 |
- |
|
134 |
- try { |
|
135 |
- const response = await Api.sendTripLog(dataToSend, navigation); |
|
136 |
- console.log("Response:", response); |
|
137 |
- } catch (error) { |
|
138 |
- Alert.alert('로그인 실패', error.message); |
|
139 |
- } |
|
140 |
- |
|
141 |
- } catch (error) { |
|
142 |
- console.error('Error stopping location tracking:', error); |
|
143 |
- } |
|
76 |
+ Alert.alert( |
|
77 |
+ '운행 종료', |
|
78 |
+ '운행을 종료하시겠습니까?', |
|
79 |
+ [ |
|
80 |
+ { |
|
81 |
+ text: '아니요', |
|
82 |
+ style: 'cancel', // 취소 스타일 |
|
83 |
+ onPress: () => { |
|
84 |
+ console.log('운행 계속'); |
|
85 |
+ }, |
|
86 |
+ }, |
|
87 |
+ { |
|
88 |
+ text: '네', |
|
89 |
+ onPress: async () => { |
|
90 |
+ setIsMeasuring(false); |
|
91 |
+ setStartTimestamp(null); |
|
92 |
+ const time = new Date().toISOString(); |
|
93 |
+ const stopTimestamp = formatDate(time); // 종료 타임스탬프 설정 |
|
94 |
+ setElapsedTime(0); |
|
95 |
+ |
|
96 |
+ // 측정 시작 시점 이후의 위치 데이터만 필터링 |
|
97 |
+ const filteredData = { |
|
98 |
+ latitude: [], |
|
99 |
+ longitude: [], |
|
100 |
+ timestamp: [] |
|
101 |
+ }; |
|
102 |
+ |
|
103 |
+ locationData.timestamp.forEach((time, index) => { |
|
104 |
+ if (time >= startTimestamp && time <= stopTimestamp) { // 범위 내의 데이터만 선택 |
|
105 |
+ filteredData.latitude.push(locationData.latitude[index]); |
|
106 |
+ filteredData.longitude.push(locationData.longitude[index]); |
|
107 |
+ filteredData.timestamp.push(time); |
|
108 |
+ } |
|
109 |
+ }); |
|
110 |
+ |
|
111 |
+ // 필터링된 데이터를 서버로 전송 |
|
112 |
+ try { |
|
113 |
+ console.log("safty_helmet_on",safty) |
|
114 |
+ const dataToSend = { |
|
115 |
+ user_id: userId, |
|
116 |
+ trip_id: tripId, |
|
117 |
+ safty_helmet_on: safty, |
|
118 |
+ trip_log: filteredData, |
|
119 |
+ }; |
|
120 |
+ |
|
121 |
+ // 한 개의 API로 데이터 전송 |
|
122 |
+ try { |
|
123 |
+ const [send, save] = await Promise.all([ |
|
124 |
+ Api.sendTripLog(dataToSend), // 첫 번째 API 호출 |
|
125 |
+ Api.saveTripLog(dataToSend, navigation) // 두 번째 API 호출 |
|
126 |
+ ]); |
|
127 |
+ |
|
128 |
+ |
|
129 |
+ // 응답 데이터를 기반으로 저장 |
|
130 |
+ setResultData(send); |
|
131 |
+ |
|
132 |
+ try { |
|
133 |
+ const saveResponse = await Api.saveResult(send); |
|
134 |
+ console.log("Save Result Response:", saveResponse); |
|
135 |
+ } catch (error) { |
|
136 |
+ Alert.alert('서버 오류', '결과를 저장할 수 없습니다.'); |
|
137 |
+ } |
|
138 |
+ |
|
139 |
+ if (send.final_score) { |
|
140 |
+ navigation.navigate('Analysis', { result: send }); |
|
141 |
+ } else { |
|
142 |
+ Alert.alert( |
|
143 |
+ '분석결과 없음', |
|
144 |
+ '운행 점수를 측정할 수 없습니다.', |
|
145 |
+ [{ text: 'OK' }] |
|
146 |
+ ); |
|
147 |
+ } |
|
148 |
+ } catch (error) { |
|
149 |
+ Alert.alert('서버 오류', '서버로 데이터를 전송할 수 없습니다.'); |
|
150 |
+ } |
|
151 |
+ |
|
152 |
+ } catch (error) { |
|
153 |
+ console.error('Error stopping location tracking:', error); |
|
154 |
+ } |
|
155 |
+ |
|
156 |
+ // 위치 데이터 초기화 |
|
157 |
+ setLocationData({ |
|
158 |
+ latitude: [], |
|
159 |
+ longitude: [], |
|
160 |
+ timestamp: [] |
|
161 |
+ }); |
|
162 |
+ }, |
|
163 |
+ }, |
|
164 |
+ ], |
|
165 |
+ { cancelable: false } // 이 옵션을 사용하면 alert 밖을 클릭해도 취소되지 않음 |
|
166 |
+ ); |
|
144 | 167 |
}; |
145 | 168 |
|
146 |
- const handleLogout = () => { |
|
147 |
- AsyncStorage.removeItem('token'); |
|
148 |
- navigation.navigate('Login'); |
|
149 |
- Alert.alert('로그아웃', '로그아웃되었습니다.'); |
|
150 |
- }; |
|
169 |
+ |
|
170 |
+ |
|
171 |
+ const handleLogout = async () => { |
|
172 |
+ await logout(); |
|
173 |
+ navigation.navigate('Login'); // Ensure 'Login' is defined in AuthNavigator |
|
174 |
+ }; |
|
175 |
+ |
|
151 | 176 |
|
152 | 177 |
const handleHistory = () => { |
153 |
- navigation.navigate('Analysis'); |
|
154 |
- Alert.alert('히스토리', '히스토리 화면으로 이동합니다.'); |
|
178 |
+ if (resultData) { |
|
179 |
+ Alert.alert( |
|
180 |
+ '분석결과', |
|
181 |
+ '분석결과 화면으로 이동합니다.', |
|
182 |
+ [ |
|
183 |
+ { |
|
184 |
+ text: 'OK', |
|
185 |
+ onPress: () => navigation.navigate('Analysis', { result: resultData }) |
|
186 |
+ } |
|
187 |
+ ] |
|
188 |
+ ); |
|
189 |
+ } else { |
|
190 |
+ Alert.alert( |
|
191 |
+ '분석결과 없음', |
|
192 |
+ '운행 분석 결과가 없습니다.', |
|
193 |
+ [{ text: 'OK' }] |
|
194 |
+ ); |
|
195 |
+ } |
|
155 | 196 |
}; |
156 | 197 |
|
157 |
- const startLocationTracking = () => { |
|
158 |
- const id = Geolocation.watchPosition( |
|
159 |
- (position) => { |
|
160 |
- const { latitude, longitude } = position.coords; |
|
161 |
- const time = new Date().toISOString(); |
|
162 |
- const timestamp = formatDate(time); |
|
163 |
- setLocationData(prevData => ({ |
|
164 |
- latitude: [...prevData.latitude, latitude], |
|
165 |
- longitude: [...prevData.longitude, longitude], |
|
166 |
- timestamp: [...prevData.timestamp, timestamp] |
|
167 |
- })); |
|
168 | 198 |
|
169 |
- console.log('위치 업데이트:', { latitude, longitude, timestamp: timestamp }); |
|
170 |
- }, |
|
171 |
- (error) => { |
|
172 |
- console.error('위치 감시 중 오류:', error); |
|
173 |
- }, |
|
174 |
- { enableHighAccuracy: true, distanceFilter: 0, interval: 1000, fastestInterval: 1000, forceRequestLocation:true } |
|
175 |
- ); |
|
176 |
- |
|
177 |
- setWatchId(id); |
|
178 |
- }; |
|
179 | 199 |
|
180 | 200 |
const formatTime = (seconds) => { |
181 | 201 |
const hours = Math.floor(seconds / 3600); |
... | ... | @@ -196,8 +216,6 @@ |
196 | 216 |
|
197 | 217 |
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`; |
198 | 218 |
}; |
199 |
- |
|
200 |
- |
|
201 | 219 |
|
202 | 220 |
return ( |
203 | 221 |
<View style={styles.container}> |
... | ... | @@ -246,7 +264,7 @@ |
246 | 264 |
justifyContent: 'center', |
247 | 265 |
alignItems: 'center', |
248 | 266 |
padding: 20, |
249 |
- backgroundColor: '#F7F7F7', // 배경색 |
|
267 |
+ backgroundColor: '#F7F7F7', |
|
250 | 268 |
}, |
251 | 269 |
timerContainer: { |
252 | 270 |
marginVertical: 30, |
... | ... | @@ -258,7 +276,7 @@ |
258 | 276 |
time: { |
259 | 277 |
fontSize: 65, |
260 | 278 |
fontWeight: 'bold', |
261 |
- color: '#007AFF', // 타이머 색상 |
|
279 |
+ color: '#007AFF', |
|
262 | 280 |
}, |
263 | 281 |
buttonRowContainer: { |
264 | 282 |
flexDirection: 'row', |
... | ... | @@ -273,13 +291,13 @@ |
273 | 291 |
borderRadius: 10, |
274 | 292 |
marginHorizontal: 5, |
275 | 293 |
alignItems: 'center', |
276 |
- justifyContent: 'center', // 중앙 정렬 |
|
294 |
+ justifyContent: 'center', |
|
277 | 295 |
}, |
278 | 296 |
startButton: { |
279 |
- backgroundColor: '#007AFF', // 시작 버튼 색상 |
|
297 |
+ backgroundColor: '#007AFF', |
|
280 | 298 |
}, |
281 | 299 |
stopButton: { |
282 |
- backgroundColor: '#FF3B30', // 종료 버튼 색상 |
|
300 |
+ backgroundColor: '#FF3B30', |
|
283 | 301 |
}, |
284 | 302 |
fullWidthButtonContainer: { |
285 | 303 |
width: '100%', |
... | ... | @@ -292,10 +310,10 @@ |
292 | 310 |
alignItems: 'center', |
293 | 311 |
}, |
294 | 312 |
logoutButton: { |
295 |
- backgroundColor: '#eeeeee', // 로그아웃 버튼 색상 (연한 무채색) |
|
313 |
+ backgroundColor: '#eeeeee', |
|
296 | 314 |
}, |
297 | 315 |
historyButton: { |
298 |
- backgroundColor: '#CAF4FF', // 분석결과 버튼 색상 (연한 파란색) |
|
316 |
+ backgroundColor: '#CAF4FF', |
|
299 | 317 |
}, |
300 | 318 |
buttonText: { |
301 | 319 |
color: '#FFFFFF', |
... | ... | @@ -305,7 +323,6 @@ |
305 | 323 |
blackbuttonText: { |
306 | 324 |
fontWeight: 'bold', |
307 | 325 |
fontSize: 16, |
308 |
- |
|
309 | 326 |
}, |
310 | 327 |
fullWidthButtonText: { |
311 | 328 |
color: '#007AFF', |
+++ src/screen/History.js
... | ... | @@ -0,0 +1,266 @@ |
1 | +import React, { useState, useEffect } from 'react'; | |
2 | +import { View, Text, TouchableOpacity, StyleSheet, ScrollView, ActivityIndicator, Dimensions } from 'react-native'; | |
3 | +import { BarChart } from 'react-native-gifted-charts'; // BarChart 컴포넌트 임포트 | |
4 | +import Api from '../api/ApiUtils'; // API 호출 함수 임포트 | |
5 | +import AsyncStorage from '@react-native-async-storage/async-storage'; | |
6 | + | |
7 | +export default function History() { | |
8 | + const [selectedTab, setSelectedTab] = useState('safeDrivingScore'); | |
9 | + | |
10 | + return ( | |
11 | + <View style={styles.container}> | |
12 | + {/* 탭 메뉴 */} | |
13 | + <View style={styles.tabContainer}> | |
14 | + <TouchableOpacity | |
15 | + style={[styles.tabButton, selectedTab === 'safeDrivingScore' && styles.activeTab]} | |
16 | + onPress={() => setSelectedTab('safeDrivingScore')} | |
17 | + > | |
18 | + <Text style={styles.tabText}>안전운행 점수</Text> | |
19 | + </TouchableOpacity> | |
20 | + <TouchableOpacity | |
21 | + style={[styles.tabButton, selectedTab === 'details' && styles.activeTab]} | |
22 | + onPress={() => setSelectedTab('details')} | |
23 | + > | |
24 | + <Text style={styles.tabText}>세부사항</Text> | |
25 | + </TouchableOpacity> | |
26 | + </View> | |
27 | + | |
28 | + {/* 선택된 탭에 따른 컨텐츠 렌더링 */} | |
29 | + <View style={styles.contentContainer}> | |
30 | + {selectedTab === 'safeDrivingScore' ? <SafeDrivingScoreTab /> : <DetailsTab />} | |
31 | + </View> | |
32 | + </View> | |
33 | + ); | |
34 | +} | |
35 | + | |
36 | +function SafeDrivingScoreTab() { | |
37 | + const [hdata, sethData] = useState([]); | |
38 | + const [loading, setLoading] = useState(true); | |
39 | + const [error, setError] = useState(null); | |
40 | + const [chartData, setChartData] = useState(); | |
41 | + | |
42 | + useEffect(() => { | |
43 | + const fetchData = async () => { | |
44 | + try { | |
45 | + const storedUserId = await AsyncStorage.getItem('user_id'); | |
46 | + const userData = { user_id: storedUserId }; | |
47 | + const response = await Api.getHistory(userData); // 실제 API 호출 | |
48 | + const responseData = JSON.parse(response.data); | |
49 | + | |
50 | + sethData(responseData); | |
51 | + | |
52 | + const chartData = responseData.map(item => { | |
53 | + const date = new Date(item.timestamp); // Create a Date object from the timestamp | |
54 | + const formattedDate = date.toISOString().split('T')[0]; // Format it to YYYY-MM-DD | |
55 | + return { | |
56 | + label: formattedDate, // Use the formatted date as the label | |
57 | + value: item.final_score, | |
58 | + }; | |
59 | + }); | |
60 | + | |
61 | + setChartData(chartData); | |
62 | + | |
63 | + setLoading(false); | |
64 | + } catch (error) { | |
65 | + console.log(error); | |
66 | + setError(error); | |
67 | + setLoading(false); | |
68 | + } | |
69 | + }; | |
70 | + | |
71 | + fetchData(); | |
72 | + }, []); | |
73 | + | |
74 | + if (loading) { | |
75 | + return <ActivityIndicator size="large" color="#0000ff" />; | |
76 | + } | |
77 | + | |
78 | + if (error) { | |
79 | + return ( | |
80 | + <View> | |
81 | + <Text>데이터를 불러오는 중 오류가 발생했습니다.</Text> | |
82 | + </View> | |
83 | + ); | |
84 | + } | |
85 | + | |
86 | + // 데이터가 없는 경우 | |
87 | + if (hdata.length === 0) { | |
88 | + return ( | |
89 | + <View> | |
90 | + <Text>히스토리가 없습니다.</Text> | |
91 | + </View> | |
92 | + ); | |
93 | + } | |
94 | + | |
95 | + return ( | |
96 | + <ScrollView> | |
97 | + <View style={styles.padding}> | |
98 | + <BarChart | |
99 | + data={chartData} | |
100 | + initialSpacing={0} | |
101 | + spacing={100} | |
102 | + hideDataPoints | |
103 | + thickness={3} | |
104 | + hideRules | |
105 | + showVerticalLines | |
106 | + height={400} | |
107 | + disablePress | |
108 | + yAxisThickness={1} // 메인 y축 | |
109 | + noOfSections={3} // 가로 회색줄 갯수 | |
110 | + frontColor={'#177AD5'} | |
111 | + barWidth={50} | |
112 | + barBorderRadius={4} | |
113 | + maxValue={100} | |
114 | + autoShiftLabels={false} | |
115 | + /> | |
116 | + </View> | |
117 | + </ScrollView> | |
118 | + ); | |
119 | +} | |
120 | + | |
121 | +function DetailsTab({ navigation }) { | |
122 | + const [hdata, sethData] = useState([]); | |
123 | + const [loading, setLoading] = useState(true); | |
124 | + const [error, setError] = useState(null); | |
125 | + | |
126 | + useEffect(() => { | |
127 | + const fetchData = async () => { | |
128 | + try { | |
129 | + const storedUserId = await AsyncStorage.getItem('user_id'); // 필요한 파라미터 | |
130 | + const userData = { | |
131 | + user_id: storedUserId, | |
132 | + }; | |
133 | + const response = await Api.getHistory(userData, navigation); | |
134 | + const responseData = JSON.parse(response.data); | |
135 | + sethData(responseData); | |
136 | + setLoading(false); | |
137 | + } catch (error) { | |
138 | + console.log(error); | |
139 | + setError(error); | |
140 | + setLoading(false); | |
141 | + } | |
142 | + }; | |
143 | + | |
144 | + fetchData(); | |
145 | + }, []); | |
146 | + | |
147 | + if (loading) { | |
148 | + return <ActivityIndicator size="large" color="#0000ff" />; | |
149 | + } | |
150 | + | |
151 | + if (error) { | |
152 | + return ( | |
153 | + <View> | |
154 | + <Text>데이터를 불러오는 중 오류가 발생했습니다.</Text> | |
155 | + </View> | |
156 | + ); | |
157 | + } | |
158 | + | |
159 | + // 데이터가 없는 경우 | |
160 | + if (hdata.length === 0) { | |
161 | + return ( | |
162 | + <View> | |
163 | + <Text>히스토리가 없습니다.</Text> | |
164 | + </View> | |
165 | + ); | |
166 | + } | |
167 | + | |
168 | + return ( | |
169 | + <ScrollView> | |
170 | + <View style={styles.table}> | |
171 | + <View style={styles.tableHeader}> | |
172 | + <Text style={styles.tableHeaderText}>날짜</Text> | |
173 | + <Text style={styles.tableHeaderText}>총점수</Text> | |
174 | + <Text style={styles.tableHeaderText}>급가속</Text> | |
175 | + <Text style={styles.tableHeaderText}>급감속</Text> | |
176 | + <Text style={styles.tableHeaderText}>급발진</Text> | |
177 | + <Text style={styles.tableHeaderText}>급정지</Text> | |
178 | + <Text style={styles.tableHeaderText}>안전모</Text> | |
179 | + </View> | |
180 | + {hdata.map((item, index) => ( | |
181 | + <View key={index} style={styles.tableRow}> | |
182 | + <Text style={styles.tableCell}>{formatDate(item.timestamp)}</Text> | |
183 | + <Text style={styles.tableCell}>{item.final_score}</Text> | |
184 | + <Text style={styles.tableCell}>{item.abrupt_acceleration_count}</Text> | |
185 | + <Text style={styles.tableCell}>{item.abrupt_deceleration_count}</Text> | |
186 | + <Text style={styles.tableCell}>{item.abrupt_start_count}</Text> | |
187 | + <Text style={styles.tableCell}>{item.abrupt_stop_count}</Text> | |
188 | + <Text style={styles.tableCell}>{item.helmet_on ? "착용":"미착용"}</Text> | |
189 | + </View> | |
190 | + ))} | |
191 | + </View> | |
192 | + </ScrollView> | |
193 | + ); | |
194 | +} | |
195 | + | |
196 | +// 날짜 포맷팅 함수 | |
197 | +const formatDate = (timestamp) => { | |
198 | + const date = new Date(timestamp); | |
199 | + return date.toISOString().split('T')[0]; // YYYY-MM-DD 형식으로 변환 | |
200 | +}; | |
201 | + | |
202 | +const styles = StyleSheet.create({ | |
203 | + container: { | |
204 | + flex: 1, | |
205 | + backgroundColor:"#ffffff", | |
206 | + paddingBottom:10, | |
207 | + paddingTop:10 | |
208 | + }, | |
209 | + tabContainer: { | |
210 | + flexDirection: 'row', | |
211 | + borderBottomWidth: 1, | |
212 | + borderBottomColor: '#ccc', | |
213 | + }, | |
214 | + tabButton: { | |
215 | + flex: 1, | |
216 | + padding: 16, | |
217 | + alignItems: 'center', | |
218 | + }, | |
219 | + activeTab: { | |
220 | + borderBottomWidth: 2, | |
221 | + borderBottomColor: 'blue', | |
222 | + }, | |
223 | + tabText: { | |
224 | + fontSize: 16, | |
225 | + fontWeight: 'bold', | |
226 | + }, | |
227 | + contentContainer: { | |
228 | + flex: 1, | |
229 | + padding: 16, | |
230 | + }, | |
231 | + title: { | |
232 | + fontSize: 24, | |
233 | + fontWeight: 'bold', | |
234 | + marginBottom: 16, | |
235 | + }, | |
236 | + table: { | |
237 | + borderWidth: 1, | |
238 | + borderColor: '#ccc', | |
239 | + }, | |
240 | + tableHeader: { | |
241 | + flexDirection: 'row', | |
242 | + backgroundColor: '#f1f1f1', | |
243 | + }, | |
244 | + tableHeaderText: { | |
245 | + flex: 1, | |
246 | + padding: 8, | |
247 | + fontWeight: 'bold', | |
248 | + borderWidth: 1, | |
249 | + borderColor: '#ccc', | |
250 | + textAlign: 'center', | |
251 | + }, | |
252 | + tableRow: { | |
253 | + flexDirection: 'row', | |
254 | + }, | |
255 | + tableCell: { | |
256 | + flex: 1, | |
257 | + padding: 8, | |
258 | + borderWidth: 1, | |
259 | + borderColor: '#ccc', | |
260 | + textAlign: 'center', | |
261 | + }, | |
262 | + padding:{ | |
263 | + paddingTop:30, | |
264 | + } | |
265 | +}); | |
266 | + |
--- src/screen/LoginScreen.js
+++ src/screen/LoginScreen.js
... | ... | @@ -1,31 +1,55 @@ |
1 |
-import React, { useState } from 'react'; |
|
2 |
-import { View, TextInput, Text, TouchableOpacity, Alert, StyleSheet } from 'react-native'; |
|
1 |
+import React, { useState, useEffect, useContext } from 'react'; |
|
2 |
+import { View, TextInput, Text, TouchableOpacity, Alert, StyleSheet, Platform } from 'react-native'; |
|
3 | 3 |
import Api from '../api/ApiUtils'; |
4 | 4 |
import AsyncStorage from '@react-native-async-storage/async-storage'; |
5 |
-import { useNavigation } from '@react-navigation/native'; |
|
5 |
+import { useNavigation, CommonActions } from '@react-navigation/native'; |
|
6 |
+import { request, PERMISSIONS, RESULTS } from 'react-native-permissions'; |
|
7 |
+import { useLocation } from '../context/LocationProvider'; // Context import |
|
8 |
+import { AuthContext } from '../context/AuthContext'; |
|
6 | 9 |
|
7 | 10 |
const LoginScreen = () => { |
8 | 11 |
const [userId, setUserId] = useState(''); |
9 | 12 |
const [password, setPassword] = useState(''); |
10 | 13 |
const navigation = useNavigation(); |
14 |
+ const { startLocationTracking } = useLocation(); |
|
15 |
+ const { login } = useContext(AuthContext); |
|
16 |
+ |
|
17 |
+ useEffect(() => { |
|
18 |
+ requestLocationPermission(); |
|
19 |
+ }, []); |
|
20 |
+ |
|
21 |
+ const requestLocationPermission = async () => { |
|
22 |
+ let status; |
|
23 |
+ if (Platform.OS === 'ios') { |
|
24 |
+ status = await request(PERMISSIONS.IOS.LOCATION_WHEN_IN_USE); |
|
25 |
+ } else if (Platform.OS === 'android') { |
|
26 |
+ status = await request(PERMISSIONS.ANDROID.ACCESS_FINE_LOCATION); |
|
27 |
+ } |
|
28 |
+ |
|
29 |
+ if (status !== RESULTS.GRANTED) { |
|
30 |
+ Alert.alert('위치 권한 오류', '위치 권한을 허용해야 합니다.'); |
|
31 |
+ } |
|
32 |
+ }; |
|
11 | 33 |
|
12 | 34 |
const handleLogin = async () => { |
13 | 35 |
const credentials = { |
14 | 36 |
id: userId, |
15 | 37 |
password: password, |
16 | 38 |
}; |
39 |
+ |
|
17 | 40 |
try { |
18 | 41 |
const response = await Api.login(credentials); |
19 | 42 |
console.log(response); |
20 |
- if(response.result === 'success'){ |
|
21 |
- await AsyncStorage.setItem('token', JSON.stringify({accessToken:response.token})); |
|
22 |
- await AsyncStorage.setItem('user_id', credentials.id); |
|
23 |
- navigation.navigate('Selection'); |
|
24 |
- }else{ |
|
25 |
- Alert.alert('로그인 정보를 다시 한번 확인해주세요.'); |
|
26 |
- } |
|
27 |
- |
|
28 |
- |
|
43 |
+ if (response.result === 'success') { |
|
44 |
+ console.log('response::::',response) |
|
45 |
+ await login(response.token); |
|
46 |
+ await AsyncStorage.setItem('user_id', credentials.id); |
|
47 |
+ // 로그인 성공 후 위치 수집 시작 |
|
48 |
+ startLocationTracking(); |
|
49 |
+ navigation.navigate('Selection'); |
|
50 |
+ } else { |
|
51 |
+ Alert.alert('로그인 정보를 다시 한번 확인해주세요.'); |
|
52 |
+ } |
|
29 | 53 |
} catch (error) { |
30 | 54 |
Alert.alert('로그인 실패', error.message); |
31 | 55 |
} |
... | ... | @@ -53,9 +77,7 @@ |
53 | 77 |
<Text style={styles.buttonText}>로그인</Text> |
54 | 78 |
</TouchableOpacity> |
55 | 79 |
<View style={styles.footer}> |
56 |
- <TouchableOpacity |
|
57 |
- onPress={() => navigation.navigate('Agreement')} |
|
58 |
- > |
|
80 |
+ <TouchableOpacity onPress={() => navigation.navigate('Agreement')}> |
|
59 | 81 |
<Text style={styles.footerText}>회원가입</Text> |
60 | 82 |
</TouchableOpacity> |
61 | 83 |
</View> |
... | ... | @@ -86,7 +108,7 @@ |
86 | 108 |
marginBottom: 15, |
87 | 109 |
backgroundColor: '#FFFFFF', |
88 | 110 |
fontSize: 16, |
89 |
- color:'#000' |
|
111 |
+ color: '#000', |
|
90 | 112 |
}, |
91 | 113 |
button: { |
92 | 114 |
backgroundColor: '#007AFF', |
... | ... | @@ -109,7 +131,6 @@ |
109 | 131 |
color: '#666', |
110 | 132 |
marginBottom: 10, |
111 | 133 |
}, |
112 |
- |
|
113 | 134 |
}); |
114 | 135 |
|
115 | 136 |
export default LoginScreen; |
--- src/screen/SelectionScreen.js
+++ src/screen/SelectionScreen.js
... | ... | @@ -1,14 +1,28 @@ |
1 |
-import React from 'react'; |
|
1 |
+import React, { useContext } from 'react'; |
|
2 | 2 |
import { View, Text, TouchableOpacity, StyleSheet, Platform } from 'react-native'; |
3 |
+import { AuthContext } from '../context/AuthContext'; |
|
4 |
+ |
|
3 | 5 |
|
4 | 6 |
const SelectionScreen = ({ navigation }) => { |
7 |
+ const { logout } = useContext(AuthContext); |
|
8 |
+ const handleLogout = async () => { |
|
9 |
+ await logout(); |
|
10 |
+ navigation.navigate('Login'); // Ensure 'Login' is defined in AuthNavigator |
|
11 |
+ }; |
|
12 |
+ |
|
5 | 13 |
return ( |
6 | 14 |
<View style={styles.container}> |
7 | 15 |
<TouchableOpacity style={styles.startButton} onPress={() => navigation.navigate('Camera')}> |
8 | 16 |
<Text style={styles.buttonText}>운행시작</Text> |
9 | 17 |
</TouchableOpacity> |
10 |
- <TouchableOpacity style={styles.historyButton} onPress={() => navigation.navigate('Analysis')}> |
|
18 |
+ <TouchableOpacity style={styles.historyButton} onPress={() => navigation.navigate('History')}> |
|
11 | 19 |
<Text style={styles.blueButtonText}>히스토리</Text> |
20 |
+ </TouchableOpacity> |
|
21 |
+ <TouchableOpacity |
|
22 |
+ style={[styles.fullWidthButton, styles.logoutButton]} |
|
23 |
+ onPress={handleLogout} |
|
24 |
+ > |
|
25 |
+ <Text style={styles.blackbuttonText}>로그아웃</Text> |
|
12 | 26 |
</TouchableOpacity> |
13 | 27 |
</View> |
14 | 28 |
); |
... | ... | @@ -30,7 +44,7 @@ |
30 | 44 |
marginVertical: 10, // 버튼 간격 |
31 | 45 |
}, |
32 | 46 |
historyButton: { |
33 |
- backgroundColor: '#CAF4FF', |
|
47 |
+ backgroundColor: '#CAF4FF', |
|
34 | 48 |
borderRadius: 10, |
35 | 49 |
padding: 15, |
36 | 50 |
width: '80%', // 버튼 너비 |
... | ... | @@ -48,6 +62,20 @@ |
48 | 62 |
fontSize: 18, |
49 | 63 |
fontWeight: '600', // 텍스트 두께 |
50 | 64 |
}, |
65 |
+ fullWidthButton: { |
|
66 |
+ paddingVertical: 15, |
|
67 |
+ borderRadius: 10, |
|
68 |
+ marginVertical: 5, |
|
69 |
+ alignItems: 'center', |
|
70 |
+ width: '80%', // 버튼 너비 |
|
71 |
+ }, |
|
72 |
+ logoutButton: { |
|
73 |
+ backgroundColor: '#eeeeee', |
|
74 |
+ }, |
|
75 |
+ blackbuttonText: { |
|
76 |
+ fontWeight: 'bold', |
|
77 |
+ fontSize: 16, |
|
78 |
+ }, |
|
51 | 79 |
}); |
52 | 80 |
|
53 | 81 |
export default SelectionScreen; |
--- tsconfig.json
+++ tsconfig.json
... | ... | @@ -1,3 +1,3 @@ |
1 |
-{ |
|
2 |
- "extends": "@react-native/typescript-config/tsconfig.json" |
|
3 |
-} |
|
1 |
+{ |
|
2 |
+ "extends": "@react-native/typescript-config/tsconfig.json" |
|
3 |
+} |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?