🚶 🏃♀️ 🤸 💪 🌴 🦵
A simple fitness app built with React Native and Expo.
This project uses EAS development builds, not Expo Go.
- Node.js and npm
- EAS CLI - Install globally:
npm install -g eas-cli@latest - Expo Orbit (optional) - Simplifies installing and launching builds
- For iOS: Xcode and iOS Simulator
- For Android: Android Studio and emulator
Refer to Expo's environment setup guide for detailed platform-specific requirements.
- Install dependencies
npm install- Login to EAS
eas loginThe app supports multiple build variants configured in app.config.js (see APP_VARIANTS array).
Set the variant using the APP_VARIANT environment variable:
APP_VARIANT=development npm run ios:dev- Build development client (first time or when native dependencies change)
npm run ios:dev
# or for simulator: npm run ios:sim-
Install the build
- Using Orbit: One-click install from the EAS dashboard
- Manually: Download and drag to simulator, or run
eas build:run
-
Start the development server
npm start
# or for iOS specifically: npm run ios- Build development client
eas build --profile development --platform android-
Install the build
- Using Orbit: One-click install from the EAS dashboard
- Manually: Download and install APK, or run
eas build:run
-
Start the development server
npm start
# or for Android specifically: npm run androidLocal development:
npm run webBuild for deployment:
npm run web:buildSee package.json for all available scripts. Common commands:
npm start- Start Expo dev servernpm test- Run Jest testsnpm run ios:dev- Build development build for iOSnpm run ios:update:prod- Push OTA update to production
For a complete list of build, deploy, and utility scripts, refer to the scripts section in package.json.
Version is managed in app.config.js (expo.version field).
When releasing a new version:
- Update the version using full semver format:
Major.Minor.Patch(e.g.,"2.1.0") - This version is used as the
runtimeVersionfor EAS OTA updates - See Expo versioning docs for details
Push over-the-air updates to production without rebuilding:
npm run ios:update:prodThis only works for JavaScript/asset changes. Native changes require a new build.
To upgrade to the latest Expo SDK version:
- Update the Expo package
npm install expo@latest- Upgrade all Expo dependencies
npx expo install --fix- Verify the upgrade
npx expo-doctor- Rebuild development clients
Since native dependencies may have changed, you'll need to create new development builds:
npm run ios:dev
# and/or
eas build --profile development --platform android- Review release notes
Check the Expo SDK release notes for breaking changes and migration steps.
For non-Expo packages:
npm update # Update all packages within their semver ranges
# or for specific packages to latest version
npm install package-name@latestAlways rebuild development clients after upgrading native dependencies. See npm update docs for more details.
Run the Jest test suite:
npm testTests are co-located with source files using the .test.ts or .test.tsx extension.
- Ensure your device/simulator meets the minimum OS requirements
- For iOS: Check that the provisioning profile is valid
- Try clearing EAS cache:
eas build --clear-cache
- Ensure your device is on the same network as your development machine
- Try restarting the dev server: Stop and run
npm startagain - Clear Metro cache:
npm start -- --clear
- Verify the channel matches your build profile
- Check that only JS/asset changes were made (not native code)
- Updates may take a few minutes to propagate
- Force close and reopen the app
- Ensure
APP_VARIANTenvironment variable is set correctly - Verify the variant exists in
app.config.jsAPP_VARIANTS array - Example:
APP_VARIANT=development eas build --profile development --platform ios