This is an Expo project created with create-expo-app
.
-
Install dependencies
npm install
Some dependencies may refuse to install. Use npx expo install package-name to select a version that works with your current Expo SDK version:
npx expo install @react-navigation/material-top-tabs
In case that fails. Add the --force flag to npm:
npm install --force
-
Start the app(using development build) and choose the platform to view it: Options are Android, iOS simulator and web.
npx expo start
Or
npx expo start -c # -c clears the cache
In the output, you'll find options to open the app in a
- development build
- Android emulator
- iOS simulator
- Expo Go
Enter i to select iOS simulator
This project uses file-based routing.
-
Run unit tests
npm test
-
First, generate native iOS directories using Prebuild
npx expo prebuild
-
When you're ready, plugin your iPhone via USB to your laptop, and run:
npx expo run:ios --device
This command will compile the native iOS app locally, setup CocoaPos, create a build and a connection with your IOS device.
-
In case you run into iOS dependency issues run this command to reinstall the pos afresh
pod install --repo-update
-
Diagnose issues with the app
npx expo-doctor
-
Bundle the app for distribution/publishing For iOS
eas build --platform ios
For Android
eas build --platform android --profile development
-
If you run into this error "CommandError: No development build (com.xxx.xxx) for this project is installed. Please make and install a development build on the device first." It means the build is missing in the simulator or device. Therefore run this command
npx expo run:ios
It builds a custom development client and installs it into the simulator or the device
- The unit tests pass except for Google Authentication, and AsyncStorage
- The Google Login and Push notifications only work on an actual iOS device
- I opted to create simple date picker to demonstrate my skills
- I included many tests in the unit tests to increase the test scope
- I included a button to send push notifications to save you the waiting time
- I used Zustand with AsyncStorage simply because they are faster and less boiler plate for a small app
- I used Tailwind to enhance the look of the app - though it has colour limitations for iOS
- I used a custom button, that I use in my other projects because it looks better has more room for props
- Some code(like Button) is borrowed from my existing projects at the moment
- I opted to avoid BottomSheet due to complications with iOS versions
To learn more about developing your project with Expo, look at the following resources:
- Expo documentation: Learn fundamentals, or go into advanced topics with our guides.
- Learn Expo tutorial: Follow a step-by-step tutorial where you'll create a project that runs on Android, iOS, and the web.
Join our community of developers creating universal apps.
- Expo on GitHub: View our open source platform and contribute.
- Discord community: Chat with Expo users and ask questions.