A repository for KeyBox Mobile App
Note: This manual assumes that you are familiar with React Native and Expo
^ -> or higher
- react -
18.2.0^
- react-hook-form -
7.45.1^
- @hookform/resolvers -
3.1.1^
- react-native -
0.72.1^
- react-native-paper -
5.9.1^
- react-native-reanimated -
3.3.0^
- react-native-gesture-handler -
2.12.0^
- react-native-drawer-layout -
3.2.1^
- react-native-safe-area-context -
4.6.3^
- react-native-screens -
3.22.0^
- react-native-vector-icons -
9.2.0^
- react-native-uuid -
2.0.1^
- react-native-select-dropdown -
3.3.4^
- react-native-switch-selector -
2.3.0^
- @react-native-community/google-signin -
5.0.0^
- @react-native-community/masked-view -
0.1.11^
- @react-navigation/native -
6.1.7
- @react-navigation/native-stack -
6.9.13^
- @react-navigation/drawer -
6.6.3
- expo -
49.0.0^
- expo-google-app-auth -
10.0.0^
- expo-status-bar -
1.6.0^
- expo-sensors -
12.3.0
- firebase -
9.23.0^
- react-native-firebase -
5.6.0
- @react-native-firebase/app -
18.3.0^
- @react-native-firebase/auth -
18.1.0^
- @react-native-firebase/firestore -
18.1.0^
- @react-native-google-signin/google-signin -
10.0.1^
- yup -
1.2.0^
- dotenv -
16.3.1^
- @babel/core -
7.20.0^
- Create Expo App
npx create-expo-app <YOUR APP NAME>
- Install required
npm packages
withnpm install <PACKAGE NAME>
ornpm i <PACKAGE NAME>
Note: If you are using VS Code you could download NPM extension by Kasper Mikiewicz which allows You to manage node packages via VS Code sidebar, makes updating and changing packages versions easier
- Create
.env
file for your firebase credentials based on.env.example
(or just rename.env.example
to.env
) and fill the credentials
- Create New Project
- Add Authentication
- Add Email/Password Auth
- Add Google Auth
- Create Web App
- Copy Firebase SDK Credentials Into
.env
- Copy Firebase SDK Credentials Into
- TO BE CONTINUED
You can skip this section if you want to run app on your phone instead
-
Install Java
-
Install Java Development Kit
-
Install Newest Version od Android Studio
-
Install Android SDK (in Android Studio)
-
Create new Project
-
Go to
Tools -> Device Manager
- Create New
Android Virtual Device
- Select Model of Your Liking
*Works on Pixel 4 API 30
- Install Android System
- From
x86 Images
(Why? Check here)
- From
- Select Model of Your Liking
Note: If you have problem with black artifacts while emulating Android increase RAM amount - Here's why
- Create New
- Open Android Emulator in Android Studio -
Android Virtual Device
(ex.Pixel 4 API 30
) - Open Terminal in Project Terminal and Execute
npx expo start
- Press 'a' on Your Keyboard
- Open Terminal in Project Terminal and Execute
npx expo start
- Download Expo App
- Scan QR Code From Your Terminal OR Use Generated Code Instead (ex.
exp://333.1.333.333:4444
)
Text that you can click/press and execute provided function
text
- Text that will be displayed in component
handlePress
- Function which will be executed on click
Modal used when logging out of Application with Icon, Title, Text and Two buttons, one for Logging Out, other for dismissing Modal
visible
- Boolean used for showing/hiding ModalhandleSignOut
- Function to be executed on Sign Out (ex. Sign out of Application)handleDismiss
- Function to be executed on Dismiss (ex. hide Modal)
Component with vertical margin to be placed between components that are not capable of using margin for some reason...
label
- label for TextInput
value
- value for TextInputonChangeText
- function to be executed on text change in TextInput
canHide
- boolean for making TextInput secure or not (secureTextInput
value) and making it possible for user to show or hide text (WORK IN PROGRESS)
Main Screen for managing user and devices
Screen for Signing In/ Logging In to Application with Firebase
Screen for Signing Up to Application with Firebase
Provides themes to App Screens
Provides operations on user such as
signIn
,signUp
,signOut
for managing user status
Provides
yup
shema to use in form inSignUpScreen
Provides user status throughout Application ( if user exists -> if user is logged in) to prevent accessing screens that should be availible only to logged in users.