Developers building for the iOS platform must open .xcworkspace instead of .xcodeproj (which will cause library linking errors).
This app syncs with the open-source smartwatch, scanning for Bluetooth signals and attempting to pair and obtain a UTF-8 encoded file with heart rate and movement data, along with the UUID identifier for persistent sync. Built by the 2025 Embedded Systems @ Purdue Smartwatch Team.
Quick development build (recommended for local testing)
# Install CocoaPods dependencies first
cd ios && pod install && cd ..
# Run the iOS build
npx expo run:iosBuilding for a specific device/simulator
# For a specific simulator
npx expo run:ios --simulator "iPhone 15 Pro"
# For a physical device
npx expo run:ios --deviceDirectly using XCode for building
cd ios
# Do not open the .xcodeproj file, since it does not have the CocoaPods dependencies.
open FitnessTracker.xcworkspaceIn XCode, select the target device or simulator from the top toolbar, then click the Play button or press Cmd + R.
Production build for App Store submission
# Install EAS CLI if not already installed
npm install -g eas-cli
# Configure and build
eas build --platform iosCheck APP_STORE_GUIDE.md for more detailed instructions.
Prerequisites
# Prior to building anything, you must make sure you have XCode and Node.js installed.
# CocoaPods should also be installed, following the command below:
sudo gem install cocoapodsThe fitness tracking app also uses react-native-ble-plx for Bluetooth functionality, which requires a physical iOS device for testing, as simulators do not support Bluetooth.
- Node.js (v14 or newer)
- npm or yarn
- Expo CLI
- iOS Simulator (for macOS) or Android Emulator
- Install dependencies:
npm install- Run on iOS:
npx expo startPress i
- Run on Android:
npm expo startPress a
- Run dev server (back-end)
npm startDownload GitHub Desktop and clone this repository to the GitHub folder in either C:\Users\<YourUsername>\Documents\GitHub for Windows or ~/Documents/GitHub for MacOS/Linux.
Launch Visual Studio Code (download here) and additionally install Node.js. Detailed instructions below, organized by platform. Installation instructions are current as of October 5, 2025. Note that you do not need to run the commands below if you already have Node.js installed on your device.
Use Powershell:
# Download and install Chocolatey:
powershell -c "irm https://community.chocolatey.org/install.ps1|iex"
# Download and install Node.js:
choco install nodejs --version="22.20.0"
# Verify the Node.js version:
node -v # Should print "v22.20.0".
# Verify npm version:
npm -v # Should print "10.9.3".Use Terminal:
# Download and install Homebrew (MacOS/Linux package manager)
curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash
# Download and install Node.js:
brew install node@22
# Verify the Node.js version:
node -v # Should print "v22.20.0".
# Verify npm version:
npm -v # Should print "10.9.3".Once Node.js is installed, open the project in Visual Studio Code (the folder will be named app) and run npm install to complete setup.
- JavaScript & TypeScript for front-end (built with React.js)
- NodeJS for back-end
- Built with React Native for inter-platform compatibility across web, iOS, and Android devices.
app/
├── App.js # Main app entry point
├── src/
│ ├── components/ # Reusable components
│ │ ├── Button.js
│ │ ├── StatCard.js
│ │ └── WorkoutItem.js
│ ├── screens/ # Main screens
│ │ ├── HomeScreen.js
│ │ ├── WorkoutScreen.js
│ │ └── StatsScreen.js
│ └── context/ # State management
│ └── WorkoutContext.js
├── package.json
└── app.json
- React Native: Mobile app framework
- Expo: Development platform
- React Navigation: Navigation library
- Context API: State management
- Ionicons: Icon library
- Displays total calories burned, workout duration, and workout count
- Shows daily steps (mock data)
- Provides quick fitness tips
- Add new workouts with type, duration, and calories
- View all logged workouts
- Delete workouts
- Modal interface for easy workout entry
- View current paired devices
- Add new devices for fitness data tracking through BLE with custom device UUID
- Overall statistics view (heartrate average, O2, lis3dhtr, and step count)
- Average calculations
- Workout type breakdown
This project is licensed under the Apache 2.0 License. Copyright © 2025 by William Zhang