Wingfoiling app for Garmin Watch

Well, the other day, I got really frustrated with an app I've been using on my Garmin watch to track my wing foiling sessions. It kept crashing while I was on the water and I had to restart it several times when I noticed it crashed. I wasn't sure if the crashes meant the session recording data was completely or only partially lost. This is definitely not something I want to be worried about when I'm out on the water having fun wing foiling. I would also prefer to have my sessions recorded reliably as a single session so I can see how my skills are progressing and have reliable session statistics available in the Garmin Connect dashboard. This wasn't the first app I installed from the Garmin App Store either. Oh no, I think I installed and tried at least four, and some of them didn't even start or run to a point where I'd be able to test them. App crashing was a disappointingly common occurrence.

When I came home that day, I decided to look into Garmin app development... I mean, how hard can it be? Turns out - not so hard! 😁

I started by downloading the Garmin Connect IQ SDK. Next, I installed the Visual Studio Code Monkey C extension. I  already use Visual Studio Code regularly for other development so I guess that's a plus for me as it meant I had the basic development tools set up. I get a little overly excited whenever I'm learning new stuff, and I'm a big advocate for just "digging into it, getting down and dirty with some code" approach, so I headed over to Your First Connect IQ App. Okay, so there are some sample apps available, and there's also a simulator you can launch and use to test and debug your app. Cool! And then if you're happy with the app you've just developed, you can sideload it directly onto your Garmin watch by plugging in the USB cable and dropping the executable files into GARMIN/APPS folder.

I started by looking at the ActivityTracking sample app, as this would be at the heart of the app I wanted to develop for wing foil tracking. The code is written in a programming language called "Monkey C", and that gave me a good laugh. I wondered if they called it that because it's so simple that even a monkey could learn it or because the programming language was so haphazardly designed with wonky syntax rules and constructs that you'd think a monkey designed it. I can code or at least read and understand the code in several languages, so what's learning another one. I could grasp what most of the code does as soon as I looked at it, and I only needed to peruse the Monkey C reference guide a few times to figure out how to write code. So my assessment is that it's not a hard programming language to learn if you already know C# or Java or Python. The syntax feels most similar to C# so I was very quickly comfortable with it.

I also thought about other things that annoy me to high heavens with other apps. Some of the pain points I'd highlight are the inability to use preferred measurement units, wonky and unintuitive navigation through app screens or buttons that don't do the conventional thing, overly crowded user interface with way too many data fields and inability to exit the app or stop session recording. With that in mind, I used a piece of paper to sketch how I wanted my simple UI to look like, and how the user would navigate between the screens. Garmin has a pretty good User Experience Guidelines section that explains all of the core concepts of good UX for wearable devices. I read through that as this was my first time developing an app for a wearable device. Developing an app for a watch device was a completely new user-interface paradigm for me. We're dealing with a very small screen size and only a few buttons the user can use to provide input and interact with the app. On the Garmin website itself, they point out a very obvious thing:

One of the synonyms of the word “watch” is “to observe.” When designing smartwatch apps, keep in mind that watches are best when they are used to observe. Great wearable apps stay out of the user’s way and keep the interactions to a minimum. Instead, give the user fast access to the information and key interactions they care about.

Once I got down to business and also figured out how to use the simulator to test the app on different devices, it took me a couple of hours over two evenings while sipping a bit of red wine to produce a simple, uncluttered app that does what I want it to do and most importantly - doesn't randomly crash!

Next, I'll get the app published on the Garmin app store, because - why not! It's so simple it's unlikely to contain any serious bugs and that's the beauty of it. I already tried publishing it today but it seems the Garmin App portal for developers is currently experiencing some technical issues and is not letting anyone publish apps. Later on, if there's interest from others, I might enhance it with some additional data fields for wing foiling.

Here are a couple of screenshots. Not bad for only a couple of hours of effort, hey!








Comments

Popular posts from this blog

Poor Man's T-SQL Formatter

That pesky hard-coding