Auto-track your gym sessions with Apple Watch + iPhone.
GymClock uses geofencing to automatically detect when you arrive at and leave your gym β no manual start/stop needed. Just walk in, work out, walk out. GymClock handles the rest.
- Geofencing β Automatically checks you in when you arrive at your gym and checks you out when you leave
- Planet Fitness included as default, fully configurable
- Add unlimited gym locations with custom detection radii
- Real-time elapsed time on both iPhone and Apple Watch
- Check-in/check-out timestamps
- Manual check-in option when you need it
- π₯ Estimated calorie tracking based on workout type and duration
- Tag sessions as Weights, Cardio, Mixed, or Other
- Type-specific calorie estimates (cardio burns more!)
- Visual icons for each workout type in history
- Jot down what you worked on during each session
- Notes visible in history for easy reference
- Never forget what you did last leg day again
- Day streaks β consecutive days with gym visits (π’ green when active, βͺ grey when broken)
- Week streaks β consecutive weeks with at least one visit
- π― Weekly goal tracking β set your target days per week with progress bar
- Weekly bar charts showing daily gym time
- Monthly overviews with session count, total time, and calories
- π Personal Best indicator for your longest session ever
- Weekly summaries with total time and calories per week
- Grouped by week with individual session details
- π Personal Best badge on your longest session
- Workout type icons and calorie counts on every entry
- Swipe to delete sessions
- Fresh motivational quote every day on the main screen
- 30 unique quotes to keep you inspired
- Because sometimes you need that extra push
- Full standalone watch app
- Extra large timer font β see your time at a glance
- Live estimated calories during sessions
- Quick check-in/check-out
- Session history with crown scroll
- Daily motivational quotes
- π Personal best indicators
- Watch complications:
- Session/streak at a glance
- β‘ Quick Start β tap to immediately begin a session
- Automatically logs gym sessions to Apple Health
- Recorded as "Other" workout type
- Seamless integration with your health data
| Active Session | History | Stats | Settings |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Timer | History | Complication | Quick Start |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
πΈ Screenshots coming soon β contributions welcome!
| Component | Technology |
|---|---|
| UI | SwiftUI |
| Persistence | SwiftData |
| Location | CoreLocation (Geofencing) |
| Health | HealthKit |
| Watch | WatchKit + watchOS 10 |
| Complications | WidgetKit |
| Charts | Swift Charts |
| Min iOS | 17.0 |
| Min watchOS | 10.0 |
- Xcode 15.0+
- iOS 17.0+ device or simulator
- watchOS 10.0+ (for watch features)
- Apple Developer account (for on-device testing with location)
-
Clone the repository
git clone https://github.com/yourusername/GymClock.git cd GymClock -
Open in Xcode
- Create a new Xcode project (iOS App with Watch App)
- Add the source files from each directory to the corresponding targets
- Or use
File > Add Files to "GymClock"...to import the project structure
-
Configure signing
- Select your development team
- Update bundle identifiers:
- iOS:
com.yourname.GymClock - watchOS:
com.yourname.GymClock.watchkitapp - Complication:
com.yourname.GymClock.watchkitapp.complication
- iOS:
-
Enable capabilities
- Background Modes β Location updates
- HealthKit
- App Groups (for sharing data between iOS and watchOS)
-
Build and run on your device
- Geofencing requires "Always" location permission β the app will prompt on first launch
- On-device testing recommended β simulators don't fully support geofencing
- HealthKit requires a physical device
GymClock/
βββ Shared/ # Shared code between iOS and watchOS
β βββ GymLocation.swift # Gym location model (SwiftData)
β βββ WorkoutSession.swift # Workout session model + WorkoutType enum
β βββ GeofenceManager.swift # CoreLocation geofencing manager
β βββ SessionTracker.swift # Session lifecycle + HealthKit
β βββ DateFormatters.swift # Date/time formatting utilities
β βββ MotivationalQuotes.swift # Daily motivational quotes
βββ GymClock/ # iOS App
β βββ GymClockApp.swift # App entry point
β βββ ContentView.swift # Tab-based navigation
β βββ Info.plist # iOS configuration
β βββ Assets.xcassets/ # App icon & colors
β βββ Views/
β βββ ActiveSessionView.swift # Live session timer + workout type picker
β βββ HistoryView.swift # Session history with weekly summaries
β βββ StatsView.swift # Charts, streaks, goals, personal bests
β βββ SettingsView.swift # Gym management, weekly goals
βββ GymClockWatch/ # watchOS App
β βββ GymClockWatchApp.swift # Watch app entry point
β βββ WatchContentView.swift # Watch navigation
β βββ WatchActiveSessionView.swift # Watch timer (large font) + calories
β βββ WatchHistoryView.swift # Watch history with crown scroll
β βββ Info.plist # watchOS configuration
β βββ Assets.xcassets/ # Watch app icon & colors
βββ GymClockWatch Extension/ # Watch Complications
β βββ GymClockComplication.swift # WidgetKit complications + Quick Start
βββ Package.swift # SPM reference
βββ README.md
βββ CONTRIBUTING.md
βββ LICENSE
βββ .gitignore
We welcome contributions! Here's how to get started:
-
Fork & clone the repository
git clone https://github.com/your-fork/GymClock.git cd GymClock -
Open in Xcode 15+ and configure signing with your team
-
Required capabilities:
- Location Services (Always)
- HealthKit
- App Groups
-
Run on a physical device for full geofencing/HealthKit support
- Follow Swift style conventions and use SwiftUI best practices
- Keep shared code in the
Shared/directory - Test on both iPhone and Apple Watch when possible
- Write descriptive commit messages
- Update README if adding user-facing features
- Fork the repo
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Test on device
- Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Use GitHub Issues for bug reports and feature requests
- Include device, OS version, and steps to reproduce for bugs
- Screenshots/recordings are always helpful
- Apple Watch workout session (extended runtime for background tracking)
- iOS Home Screen widget showing streak & weekly progress
- Siri Shortcuts β "Hey Siri, check me into the gym"
- Push notifications β streak reminders & weekly summaries
- Social features β share streaks with friends
- Workout templates β pre-built routines for different workout types
- Export data as CSV/JSON for analysis
- Dark/light theme customization
- Rest timer between sets
- Body weight tracking integration
- Gym occupancy estimates (crowdsourced)
- AI-powered workout suggestions based on history
- Heart rate zone tracking via Apple Watch sensors
- Integration with popular fitness apps (Strong, Hevy, etc.)
- Apple Watch Ultra depth/altitude tracking for outdoor workouts
This project is licensed under the MIT License β see the LICENSE file for details.
- Built with SwiftUI, SwiftData, and CoreLocation
- Inspired by the simple goal of knowing "how long was I actually at the gym?"
- Motivational quotes curated to keep you grinding πͺ
Made with πͺ by Marcus Fequiere







