At Adequate Infosoft, we delivered Apple Watch companion app development for a fitness-focused iOS application, transforming it into a seamless wearable experience.
For this project, we developed an native watchOS app which included real-time workout timers, haptic feedback, and reliable synchronization with the iPhone.
The result is a production-ready solution designed for instructors, enabling hands-free control and improved workout flow.
Client: Eric, Routines App (Via Base44)
Original Platform: Mobile app (Via Base44)
Target Platform: Apple Watch (watchOS 10+)
Type of Project: Companion app development + Sync data
Approx Timeframe: 2 months
Final Product: A production ready watchOS application with its own timer, haptic feedback, sync capability with an iPhone, and designed for the end user.
The Routine application is an exercise timer developed for fitness instructors to assist them in learning how to teach. This tool allows them to time when to verbalize the cue to the student, when to conduct the routine segment, and when to ramp up their teaching skills. This V1 application has the following primary features:
The problem: Instructors cannot hold their iPhone while teaching. They need a glanceable, hands-free device on their wrist.
| Requirement | Priority | Rationale |
|---|---|---|
| Display current interval name + timer | Critical | Instructor needs to know what cue comes next |
| Vibrate/haptic at interval transitions | Critical | Silent alerts when hands are busy |
| Control playback (start/pause/skip) | High | No phone interaction during class |
| Sync routines from iPhone | High | Build on phone, use on watch |
| Standalone operation (no phone needed) | Medium | Some instructors teach without phone nearby |
| Heart rate display | Nice-to-have | Effort monitoring for instructor |
| Challenge | Solution |
|---|---|
| Base44 has no watchOS export | Built native watchOS app from scratch in SwiftUI |
| Sync between Base44 backend and watch | Used WatchConnectivity framework (peer-to-peer) |
| Watch cannot run Base44's JS runtime | Reimplemented timer logic natively in Swift |
| Offline support | Routine data cached on watch using Core Data |
(Architecture diagram placeholder)
| Component | Technology | Purpose |
|---|---|---|
| UI Layer | SwiftUI | Interval list, active timer view, controls |
| Logic Layer | Combine + ObservableObject | Timer state machine, haptic scheduling |
| Data Layer | Core Data + Codable | Routine caching, sync conflict resolution |
| Comms Layer | WatchConnectivity | iPhone ↔ Watch data sync |
| Background | WKExtensionDelegate | Keep timer running during wrist-down |
The timer needed to support the same flexibility as the iOS version:
| Interval Type | Behavior | Example |
|---|---|---|
| Fixed duration | Counts down from N seconds | "Hold plank – 30s" |
| Variable/instructor-paced | Advances only when tapped | "Explain move, tap when done" |
| Repeat block | Loops a sub-sequence 3-5x | "Demo L/R (repeat 3x)" |
| Rest/pause | Counts down, optional skip | "Rest 15s" |
This was the most critical instructor-facing feature. Instructors cannot look at their watch during complex movements; haptics provide the cue.
| Event | Haptic Pattern | Fallback (if disabled) |
|---|---|---|
| New interval starts | .start (short tap) | None |
| Last 3 seconds of interval | .threeCount (tap...tap...tap) | None |
| Interval completes | .success (two taps) | Taptic Engine |
| Instructor-paced interval (waiting for tap) | None (silent) | Watch face does not dim |
| Routine finished | .notification (double tap + hold) | Sound (optional) |
The Apple Watch TTS functionality is limited in regard to the usage of the iPhone with TTS.
To solve this problem, we implemented the following:
| Mode | Capabilities | Battery impact |
|---|---|---|
| Tethered (phone nearby) | Full sync, music control, voice cues from phone | Low (watch uses phone's processing) |
| Standalone (no phone) | All timer functions, haptics, cached routines only | Higher (watch does all work) |
Transition logic: Watch checks phone proximity every 30 seconds. If phone found, offloads TTS and music control. If not, falls back to standalone mode seamlessly.
| Watch Challenge | Solution |
|---|---|
| Small screen (45mm or 49mm max) | Large, bold interval names (system font, dynamic type) |
| Glanceable while moving | High contrast (black background, neon green timer) |
| Sweaty/wet fingers | Minimal touch targets, crown scrolling as alternative |
| Crown rotation | Map to interval navigation (rotate crown to skip ahead/back) |
Active Timer View (primary, shown 90% of time):
(Timer view placeholder - large interval name, countdown timer)
Next Interval Preview (small text above controls): Up next: Demo left side
Interval List View (crown-scrollable):
(List view placeholder)
The app provides complications for fitness-focused watch faces:
| Complication Type | Display | Update frequency |
|---|---|---|
| Modular Small | Next interval name | On interval change |
| Corner | Countdown timer (minutes only) | Every 30s |
| Circular | Status icon (active/paused) | Real-time |
Eric's iOS application is built on a no-code/low-code platform called Base44. However, the Base44 platform does not provide export capabilities for watchOS. Base44 applications are simply web views packed within an application shell and contain Web Javascript logic.
Solution: Create a native watchOS application that utilizes WatchConnectivity to communicate with the Base44 iOS application, rather than using Base44's backend APIs.
Native Swift bridging layer (added to Base44 iOS app wrapper) captures these messages and forwards to WatchConnectivity.
Sync conflict resolution will be accomplished using a last-write-wins logic combined with a semantically merging routine as follows:
We recruited 5 fitness instructors (yoga, HIIT, spin, pilates, bootcamp) for 2-week beta testing.
| Metric | Before (iPhone only) | After (with Apple Watch) |
|---|---|---|
| Looking at device during class | ~40 times/class | ~5 times/class |
| Missed verbal cues | ~8/class | ~1/class |
| Student feedback on flow | "Sometimes choppy" | "Seamless" |
| Instructor confidence (1-10) | 6.2 | 8.9 |
| Scenario | Watch Model | Battery drain per hour |
|---|---|---|
| Tethered (phone nearby), screen mostly off | Apple Watch 8 | 8% |
| Standalone, screen always on | Apple Watch Ultra 2 | 15% |
| Tethered, active GPS (outdoor run) | Apple Watch 9 | 18% |
| Idle (no routine active) | Any | 2% |
Conclusion: A typical 60-minute class consumes 8-12% battery, well within even the oldest Apple Watch's capacity.
| watchOS Version | Supported | Notes |
|---|---|---|
| watchOS 10+ | ✓ Full | All features (including complications) |
| watchOS 9 | ✓ Limited | No voice cues, reduced haptic patterns |
| watchOS 8 | ❌ | Minimum target is watchOS 9 |
| Deliverable | Description |
|---|---|
| watchOS app | Native SwiftUI app, compiled for App Store distribution |
| iOS app extension | Bridge code added to Base44 iOS wrapper (WatchConnectivity layer) |
| Sync protocol spec | Documented JSON schema for routine serialization |
| User guide | 5-page PDF for instructors (how to sync, use complications, haptic meanings) |
| App Store assets | Screenshots, preview video, watchOS icon set |
| TestFlight beta | Ready for 10,000 external testers |
| Feature | Complexity | Impact |
|---|---|---|
| Live heart rate display on timer screen | Low | Medium (effort visualization) |
| Siri Shortcuts ("Start my warm-up routine") | Medium | High (hands-free starting) |
| WatchOS 10 Smart Stack widget | Low | Medium (quicker access) |
| Sync workout logs to Apple Health | Medium | High (student-facing value) |
| Live Activity (iPhone Dynamic Island) | Low (iPhone side) | Medium (phone-as-secondary display) |
Apple Watch companion app was completed on time, giving trainers the ability to teach without the use of their hands, by giving them both silent haptic feedback and an easily viewable timer. Base44 was able to overcome their lack of support for watchOS through a fully developed native application for watchOS that utilized a custom bridge built on WatchConnectivity.
With the new watchOS application, the Routines Assistant has evolved from a "mobile" solution to an actual physical teacher aide and solves the single largest issue teachers face which is keeping their hands on their students.
Technologies used: SwiftUI, WatchConnectivity, Core Data, Combine, AVSpeechSynthesizer, WKHapticType, Xcode Cloud (CI/CD for watchOS)
App Store readiness: 100% Screenshots, privacy manifests, watchOS icon set, TestFlight build uploaded.
With a physical presence in over 15 countries and a global footprint spanning 25+ countries, we are ready to serve you anywhere. Location, language, or culture is never a barrier, because our global team can work with you in your language. Our strong international team ensures seamless collaboration across borders We have a strong tech team, highly recognized in their domains, with extensive technical expertise.