Track My Indoor Workout is an application which supports Bluetooth Low Energy (BLE) enabled smart fitness machines to record stationary workouts. Workouts can have GPS routes - generated based on speed - and upload to numerous fitness portals. Workouts can be exported in common formats and in some cases (ANT+ machines or data migration purposes) there's an option to import saved workouts.
The ultimate mission is to improve people's health by preventing fitness machines from becoming laundry drying racks.
For more details please see the application's website.
- The project works on the Flutter stable channel. (For a good while it was on the beta channel because for example flutter/flutter#114199 (comment) and #399).
- For a successful local build you need to augment a dummy
secret.dartfile, see the the CI build script for a hint: https://github.com/TrackMyIndoorWorkout/TrackMyIndoorWorkout/blob/develop/.github/workflows/flutter_test.yml#L24 - Execute
dart format --line-length 100 .at the project root. The project currently uses flutter format with 100 character line length. - Also run
flutter analyzeat the project root. That picks up the analyzer settings from the yaml. You can consider adding the format and the analyze execution in a client-side pre-push hook. - For larger features let me know your plans in advance, so I can open up a feature branch so you
can create a PR against that. Internally I follow Git Flow branching conventions
(cheat sheet and
another info page).
I'm performing releases that way as well.
I'm also using Git Town but currently only for
git sync
and I don't use the
git hack-git shipworkflow. I'm avoiding squashing commits because I want to preserve detailed commit history to help forensic debugging. But I'm flexible if contributions become common and majority wants to change policies.
- Certain plugins which have native parts may require the Java version to be raised from
1.8to17- There are two types of these variables:
JavaVersion.VERSION_17and17 - You may want to raise the Java version in your IDE
- Some plugins may require you to raise the Java version in the build files in the cache
- Example of modifying the
receive_sharing_intentplugin:- The cache location on Windows is
C:\Users\{USERNAME}\AppData\Local\Pub\Cache\hosted\pub.dev\receive_sharing_intent-1.8.1\android\build.gradleor on Linux/home/{USERNAME}/.pub-cache/hosted/pub.dev/receive_sharing_intent-1.8.1/android/build.gradle - Add / modify
compileOptionsandkotlinOptionsto raise the Java version:compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" }
- The cache location on Windows is
- There are two types of these variables:
- If you don't have you may need to install 28.2.13676358 version of the NDK:
cd ${HOME}/{ANDROID_SDK}/cmdline-tools/latest/bin/(in my case/home/csaba/Android/Sdk/cmdline-tools/latest/bin/)- Verify that you can install this version of NDK:
./sdkmanager --list | grep "ndk;28.2.13676358" - Install it:
./sdkmanager "ndk;28.2.13676358" - In you
local.propertiesif you have NDK directory, reference that:sdk.dir=/home/csaba/Android/Sdk ndk.dir=/home/csaba/Android/Sdk/ndk/28.2.13676358
With certain data persistence or testing Mock changes you may need code regeneration.
It's always good to regen the persistence code after any isar version change.
dart run build_runner build --delete-conflicting-outputs- Don't forget to re-run
dart format .after that.
This work is licensed under Apache 2.0.
SPDX-License-Identifier: Apache-2.0