During my workouts, I kept struggling with exercises on the pull up bar. The main reason is my weak grip. I decided to work on this by hanging on the bar as long as possible. Once I let go of the bar, I cool down for the same duration I was previously on the bar. It's simple, but there is one fundamental issue with this exercise. It's hard to start or stop the timer when your hands are on the bar.
I decided to solve this problem by creating the watchOS application - Hanger. It is a workout app that tracks hanging time on the bar. It uses the accelerometer to detect the position of the hands. Once I put my hands on the bar, the app automatically starts the hanging timer. When I let go, the app automatically begins the cooldown.
During development, I was heavily inspired by Nike's Run Club. Besides the design, I also borrowed the workout countdown.
Lastly, to make the app feel complete, I added a list of hung durations recorded in the current workout session.
From a technical point of view, the app is written entirely in SwiftUI. I used coordinator-based architecture. In this architecture, each part of the app is grouped into coordinators. Coordinators are responsible for only one thing. Although coordinators are independent, they can talk to each other via EventBus. This architecture is the main reason I created my EventBus library - SwiftBus. And Hanger is the first finished app that uses the SwiftBus.