IronFlow
📳 IronFlow: Cross-platform mobile app for strength training progress tracking
Install / Use
/learn @andreped/IronFlowREADME
IronFlow was developed to allow free, private, and seemless tracking of training progress and activities.
</div> <img src="assets/showcase/mobile_app_mosaic.png" width="100%" height="100%">Features
The app is compatible with both Android and iOS.
- [x] Ability to save individual exercises with weight and number of reps and sets.
- [x] All data is stored in a private SQLite database on the device.
- [x] Ability to add new exercises.
- [x] Database with all new exercises and sessions are preserved when upgrading app.
- [x] Tab to see current max weight lifted for each recorded exercise.
- [x] Summary tab showing exercise details for any given day.
- [x] Ability to change days in summary tab to see history.
- [x] Visualize individual weight lifted for each exercise over time.
- [x] Ability to inspect and edit all exercise runs from a table tab.
- [x] Notification when new weight record is saved.
- [x] Defined large set of predefined exercises to avoid needing to add new exercises manually.
- [x] Set or add new exercise in log tab now only shows 5 items in dropdown and is scrollable.
- [x] Faster exercise logging using previously stored data for given exercise as prefilled values.
- [x] Database clear button now has two-step dialog to safeguard data from accidental deletion.
- [x] Max weight notification takes into account max weight lifted AND number of reps.
Continuous Integration
| Build Type | Status |
| - | - |
| Build APK | |
| Build IPA |
|
| Create Release |
|
| Integration tests |
|
| Linting |
|
Integration Tests
For testing the application, we use Maestro. Integration tests are performed for all pull requests and before releases using GitHub Actions.
To run integration tests, run the command:
maestro test .maestro/integration_tests.yml
Getting Started
A cross-platform mobile app was developed to test the produced solutions. Installers for both Android (.apk) and iOS (.ipa) were developed. To install the app, a different approach is required on Android and iOS.
Android
- On the mobile device (e.g., Samsung), go to Settings > About phone > Software information > Click the
Build number5 times. Then sayyesto enable developer mode. - On the mobile device, download the APK from releases.
- Go to Files > Downloads and click the downloaded file. After uncompression click the
*.apkfile. - You should get prompted "Unsafe app blocked". Click on
More detailsand pressInstall anyways.
Then simply use the app as you would with any other Android app.
iOS
- Connect the mobile device (e.g., iPhone) to a desktop device (e.g., macbook) with USB cable.
- On the desktop device, download the IPA from releases.
- On the desktop device, go to
Finder, and then unlock the mobile device. The phone should then be accessbile from the left-hand side in Finder, and click on it. - On the desktop device, open a new
Finderwindow, go toDownloadsand uncompress the downloaded file. Drag-and-drop the.ipafile over the iPhone Finder window. - After a few seconds, the mobile app should then be installed (you can see the progress on both the mobile device and in the Finder mobile app window).
- On the mobile device, to allow the app to be used, go to
General>VPN & Device Managementand click on the app andAllow.
Then simply use the app as you would with any other iOS app.
License
This project has MIT License.
Acknowledgements
I want to acknowledge Scarlet for providing me a free service to sign my IPA which allows me to support iOS.
Using Maestro has allowed us to implement integration tests with ease! Especially, Maestro studio which provided a user-friendly, no-code interface to create test flows.
To reduce development time and get experience with Copilots,
this Flutter application was heavily assisted by OpenAI's ChatGPT,
primarily using GPT-4o-mini.
For visualizations, I have used freepik.
