An alternative gym workouts tracker written in SwiftUI.

Related tags

SwiftUI App Gymspot
Overview

Gymspot

Gymspot is an alternative workout tracker written in SwiftUI.

I decided to start working on it because:

  1. I need an easy-to-use tracker for my workouts.
  2. I want to use this project as a sandbox to learn how to build a complex app in SwiftUI.

Goal

Disclaimer: this section describes where I'd like to take Gymspot. The features listed here may not have been implemented yet.

Gymspot wants to be your favorite workout tracker: configure your workout and run it in a matter of seconds. You can even start from an empty workout and add exercises as you go.

Gymspot also targets advanced users with support for warmups, time-based exercises, dynamic rest times, and more.

Gymspot works on all your Apple devices, providing feature parity, even on the Apple Watch.

Gymspot seamlessly syncs all your data across your devices with a simple and safe account connected to your Apple ID. Gymspot can also sync with Apple Health and automatically log your active and total calories.

Download

Once we get to a point where Gymspot can be distributed, there will be a version released on the App Store. The App Store version will offer both a free tier (with limited functionalities) and a paid monthly subscription (for a very low fee).

The subscription will be used to pay Firebase. If you don't want to pay, you can clone this repository and create your own Firebase instance.

Contribute

I am happy to accept contributions to Gymspot. Everybody is different at the gym and we all have different needs: if you see a ticket you'd like to work on, or even if you want to implement a new feature, you are welcome to fork this repo and push a PR.

InerziaSoft will publish Gymspot on the App Store and will manage the Firebase instance.

Getting Started

After you forked or cloned the repo, you should be able to build the project just by opening the Gymspot.xcodeproj file with Xcode.

Gymspot requires Xcode 14.0 Beta 2 or higher.

Configure Firebase

Gymspot uses Firebase to authenticate users and store data. Firebase has a free tier that allows unlimited users, but there are limitations on the amount of data you can store.

In order to configure Gymspot to use your own Firebase instance, follow these steps:

  • Change the bundle identifier of Gymspot. The project uses eu.inerziasoft.Gymspot by default, because this project is published on the App Store thanks to InerziaSoft. You cannot reuse this bundle identifier.
  • Create a new project on the Firebase Console using your own bundle identifier.
  • Download the GoogleService-Info.plist and place it under Gymspot/Supporting Files.
  • On Firebase, enable the Authentication service and add "Apple" as sign-in method.
  • Also, enable Firestore Database. You may need to configure the security settings: you can refer to the Firebase documentation for further details.

Project Structure

The Gymspot project is currently split into two parts:

  1. The iOS and iPadOS app.
  2. The Swift Package "GymspotKit".

While the app contains all the UI and related logic, all the protocols, business logic managers and repositories are in "GymspotKit".

If you are in doubt on where to add something, you may refer to this rule:

If you're going to need it on Gymspot on another platform, it should go in "GymspotKit".

Documentation

At this time, there is no documentation provided. There might be documentation on specific classes in code. If you have questions, I am happy to answer: just open an issue.

Contributions

All contributions to expand the app are welcome. Fork the repo, make the changes you want, and open a Pull Request.

If you make changes to the codebase, I will ask you to comply with the existing code style, conventions and rules.

Status

This app is in its early stages: most of the intended features are either very limited or not implemented at all.

You can follow the progress by looking at the open issues.

License

The Gymspot source code is distributed under the MIT license. See LICENSE for details.

Comments
  • Not everyone has an apple developer account.

    Not everyone has an apple developer account.

    Hey, this is a wonderful project, but not everyone has an active apple developer account, which is one blocker for many contributors like myself. I have attached a screenshot for Login/Signup with the email feature concept, would you like to discuss it in greater detail?

    image
    opened by takasurazeem 1
  • Improve data passing between views

    Improve data passing between views

    Overview

    At the moment, we're relying quite a lot on passing snapshot values of bindings and completion handler, especially when adding routines and configuring exercise. This works because a change made in the child view causes a refresh of the parent view, hence updating the binding snapshot, but it can easily break.

    References

    all architecture 
    opened by MrAsterisco 1
  • Running Workout Screen

    Running Workout Screen

    Overview

    The Running Workout screen shows a running workout and allows one to control the current step, play/pause/stop the workout, and make on-the-fly changes to the routine and each exercise.

    Subtasks

    • [x] Show current step
    • [x] Allow changing values
    • [x] Show rest steps
    • [x] Allow skipping steps
    • [x] Support increasing or decreasing the rest time
    • [x] Play/pause/stop the workout
    • [ ] Cancel the workout
    • [ ] Allow adding new steps
    opened by MrAsterisco 0
  • ValueType Custom Input

    ValueType Custom Input

    Overview

    Exercises can have different values types. At the moment, we are using a simple TextField to let the user input the value, but this has various limitations (eg. Input validation, usability, and more).

    We should have a custom component that shows common values, while also allowing to input direct values.

    feature all 
    opened by MrAsterisco 0
  • Time Elapsed Notifications

    Time Elapsed Notifications

    Overview

    When a time-based exercise or rest ends, Gymspot should send a notification. Especially when resting, the user might be using another app or not checking their Apple Watch constantly: Gymspot needs to be able to send a notification or make the device vibrate (if the app is in foreground).

    Subtasks

    • [ ] Implement local notification.
    • [ ] Implement feedback when the app is in foreground.
    feature all 
    opened by MrAsterisco 0
  • Time Based Exercises

    Time Based Exercises

    Overview

    At the moment, Gymspot only supports exercises based on reps and (optionally) weight. There are other exercises that have a time-based goal (eg. Plank). We should also allow for reps to be set, considering the time goal exactly like the weight.

    Proposed Solution

    Time is a ValueType that we already support (for rest). We should just reuse it in the Add Exercise screen to allow the user to configure a time goal.

    Subtasks

    • [ ] Implement support for time-based exercises in the Add Exercise screen.
    • [ ] Expand the rest cell for displaying the time-based exercises in workout and routines.
    feature all 
    opened by MrAsterisco 0
  • Exercise Details Screen

    Exercise Details Screen

    Overview

    The Exercise Details screen shows all the available details for a configured exercise.

    Subtasks

    • [x] Show details for selected exercise.
    • [ ] Allow to quickly search the exercise on YouTube (based on the name).
    • [ ] Allow to quickly search the exercise on Google (based on the name).
    • [ ] Show routines where the exercise is used.
    • [x] Allow editing the exercise.
    • [x] Allow deleting the exercise.
    feature all 
    opened by MrAsterisco 0
  • Exercises Screen

    Exercises Screen

    Overview

    The Exercises screen shows a list of the configured exercises.

    Subtasks

    • [x] Show configured exercises.
    • [x] Allow adding exercises.
    • [ ] Allow removing exercises with a swipe.
    • [x] Show exercise details.
    • [ ] Allow searching exercises.
    feature all 
    opened by MrAsterisco 0
Owner
Alessio Moiso
Developer since childhood. Always interested in new languages, technologies and operating systems.
Alessio Moiso
An iOS expense tracker app written in Swift

An iOS expense tracker app written in Swift

Alex Ling 35 Aug 14, 2022
The alternative last.fm client for iOS made with SwiftUI

first.fm - The alternative last.fm client for iOS (it's actually not available on the App Store... yet) Features Your profile (top artists, tracks and

Stanislas 22 Aug 22, 2022
Corona Virus Tracker & Advices iOS App with SwiftUI

Corona Virus Stats & Advices App with SwiftUI Features Current statistics of global total confirmed, deaths, recovered cases. Statistics of countries

Alfian Losari 358 Dec 27, 2022
Building Expense Tracker iOS App with Core Data & SwiftUI Completed Project

Completed Project for Building Expense Tracker iOS App with Core Data & SwiftUI Follow the tutorial at alfianlosari.com Features Create, edit, and del

Alfian Losari 226 Dec 22, 2022
Habits and Goal Tracker application using the SwiftUI Framework

Goal & Habit Tracker | Hacktoberfest SwiftUI ?? The aim of this app is so that users can track their habits and goals. This project is open source and

Shubham Kr. Singh 49 Dec 18, 2022
Budget - Income, Expense & Transfer Tracker + Budgeting app for iOS made with SwiftUI.

Budget Income, Expense & Transfer Tracker + Budgeting app for iOS made with SwiftUI. Roadmap This is a work in progress. I'm working on the following

Samuel Beaulieu 2 Dec 5, 2022
Aplikasi CrypTraces adalah MacOS Widget Crypto Tracker dengan SwiftUI, Combine & Cocoa Framework, dan WebSocket & CoinCap API

Aplikasi CrypTraces adalah MacOS Widget Crypto Tracker dengan SwiftUI, Combine & Cocoa Framework, dan WebSocket & CoinCap API. Aplikasi ini berbentuk Widget di Menu Bar MacOS dengan menampilkan beberapa Crypto Currency seperti Bitcoin (BTC), Ethereum (ETH), Dogecoin (DOGE), Monero (XMR), dan Litecoin (LTC).

DK 6 Aug 1, 2022
An alternative app store for non-jailbroken iOS devices

AltStore AltStore is an alternative app store for non-jailbroken iOS devices. AltStore is an iOS application that allows you to sideload other apps (.

null 1 Dec 9, 2021
An alternative Tumblr client for iOS

BlogQuest An alternative Tumblr client for iOS. First prize winner, 2014 Tumblr Hack Day. Kinda like Facebook Paper but for Tumblr. We meant to finish

Bryan Irace 14 Feb 10, 2022
AltStore is an alternative app store for non-jailbroken iOS devices.

AltStore AltStore is an alternative app store for non-jailbroken iOS devices. AltStore is an iOS application that allows you to sideload other apps (.

Riley Testut 8.3k Jan 9, 2023
iOS expense tracker

Hacktoberfest 2021 with IEEE-VIT ?? This is a expense tracker iOS application built using swift. Users can track their expense and visualise it. Suppo

IEEE VIT Student Chapter 14 Oct 14, 2022
Workout Tracker With Swift

WorkoutTracker Working out. For some it's a passion, for others it is a requirement to maintain health. However, exercising and tracking your progress

Andy Babay 0 Oct 15, 2021
A link tracker remover for iOS and iPadOS

Uni Uni is an application that removes tracking parameters from links shared on the web and swaps proprietary services with free and open source alter

Abhik Ahuja 1 Oct 24, 2021
Water Tracker iOS App

WaterTracker Water Tracker iOS App Now you can easily track how many ml water you drinked. This is my first time used SQLLite3 library app. The app ca

null 1 Dec 5, 2021
A lightweight and efficient bus tracker app for the Miami-Dade Transit System

A lightweight bus tracker app for the Miami-Dade Transit System Built in Swift, this app features a favorites page, real-time bus location and ETA, us

Jacob Schuster 1 Dec 10, 2021
A simple workout tracker app for iOS

IronLog After having spent a bunch of time in the Xamarin.Forms and Xamarin Native world, I wanted to get my feet wet in native iOS development using

Brian Stauff 0 Oct 19, 2022
Corona virus tracker app for IOS and Android

Corona virus tracker app for IOS and Android

Nguyen Phuc Loi 13 Dec 10, 2022
IOS15-SwiftUI-InAppPurchaseDemo - In-App Purchase Demo app written with SwiftUI

iOS15-SwiftUI-InAppPurchaseDemo In-App Purchase Demo app written with SwiftUI If

null 5 Jul 20, 2022
📱 An app fully written in SwiftUI showcasing beautiful design and animations.

DesignCode DesignCode is an app fully built using Apple's latest SwiftUI and Combine framework. Beautifully written code that is well intended for eas

Mithun 704 Jan 3, 2023