Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
It looks like the battery drain from the heart rate sensor activated by Watch OS when WOD connects to an external HR sensor can be significant.
In today's run: from starting the activity nearly full, the battery dropped to 32% in 1h30min
That's 0.756% per minute extrapolating to estimated battery runtime of 2h12min.

I'm wearing the Apple Watch 7 above a black sleeve shirt with Wrist Detection set to Off.
In this configuration, during the activity, the optical heart rate sensor tries to get a pulse from the black fabric by turning the green LEDs full blast.
It results in a constant high power state that's blinding even outdoors if you look at them, instead of the usual dim blinking on my fair skin.
That has to drain quite a bit of power from the watch's small cell.

Now that I identified this, I'll setup an evaluation to compare WOD recording runtime with the HR sensor connected in the app instead of WatchOS (which shuts off the optical HR sensor).

@cfc does WOD store the battery level in its debug .wkd export? It's not in the FIT files.
That would speed up my evaluations instead of draining to zero every time (and spare the battery)
 
It looks like the battery drain from the heart rate sensor activated by Watch OS when WOD connects to an external HR sensor can be significant.
In today's run: from starting the activity nearly full, the battery dropped to 32% in 1h30min
That's 0.756% per minute extrapolating to estimated battery runtime of 2h12min.

I'm wearing the Apple Watch 7 above a black sleeve shirt with Wrist Detection set to Off.
In this configuration, during the activity, the optical heart rate sensor tries to get a pulse from the black fabric by turning the green LEDs full blast.
It results in a constant high power state that's blinding even outdoors if you look at them, instead of the usual dim blinking on my fair skin.
That has to drain quite a bit of power from the watch's small cell.

Now that I identified this, I'll setup an evaluation to compare WOD recording runtime with the HR sensor connected in the app instead of WatchOS (which shuts off the optical HR sensor).

@cfc does WOD store the battery level in its debug .wkd export? It's not in the FIT files.
That would speed up my evaluations instead of draining to zero every time (and spare the battery)
The app notes the battery level changes in the Log (on the last tab of a workout).

Using your watch over a sleeve so it has to use "full blast" seems a bad example. It is not designed to be used like that.

It sounds like you should be connecting to the external HR sensor via watchOS. If some reason watchOS is still getting values every few seconds despite being asked not to then that is the solution.
 
The app notes the battery level changes in the Log (on the last tab of a workout).

Nice, I didn't realize it was user accessible, I like it.
If the battery gauge is calibrated well enough, the percentage threshold - even rounded to 5% increments should be good enough.

IMG_0019.PNG


It's gonna take some time.

Using your watch over a sleeve so it has to use "full blast" seems a bad example. It is not designed to be used like that.

I mean it's not an example, I live in Sweden so wearing the watch on top of long sleeves (layers) getting the heart rate via an external sensor is how a sports watch records about half of the runs.
It gets cold, like -15C and the winter is wayyy too long.

I'm not sure how to interpret "not designed to be used like that".
This is something every sport watch does by default without draining itself to death in 3h.

To be clear, I didn't expect the internal HR sensor to try to read HR through the fabric. Just to be off.

It sounds like you should be connecting to the external HR sensor via watchOS. If some reason watchOS is still getting values every few seconds despite being asked not to then that is the solution.

My concern is that in a previous test, watchOS did not reconnect automatically to the external HR sensor. watchOS fallbacks on the internal sensor instead, which might return no bad or bad data, fudge the recording and statistics down the line.
I tested that earlier by turning off the sensor then on again. I'll check if it's the same when only losing the connection (I expect it is)

I thought about a workaround tho, which is to connect the External HR sensor both to watchOS and WorkOutDoors. It's possible on mine since it supports 2 concurrent connections but that might not be necessary in case WOD is bonded to the peripheral and can connect to it without receiving an advertisement first.
 
Last edited:
I'm happy to report my previous watchOS external HR sensor re-connection test was flawed.

watchOS indeed re-connects automatically to an external HR sensor if the connection was lost accidentally, like from being out of range or obstructed.

watchOS does not reconnect if the sensor is powered off intentionally like I did in my earlier, flawed test. I suppose that in this case, the peripheral (sensor) cleanly disconnects from the central (Apple Watch), therefore watchOS doesn't try to reconnect at all.

The HR sensor I tested with is the Polar Verity Sense, which has a button to power it off gracefully. watchOS might try to re-connect to other sensors if they don't shut off so nicely including at the Bluetooth LE protocol level.


Conclusion​

Definitely connect external HR sensors to watchOS to save battery, unless the HRV or sensor battery % are supported or a must.
 
  • Like
Reactions: cfc
Since AWU3, I’ve noticed the voice feedback has been pretty inconsistent. Sometimes it works fine, but then it suddenly stops.

I get that it depends on the API to watchOS, but the voice feature has never been this unreliable before. Restarting the watch helps, but honestly, having to restart it before every workout feels... not to good.

I Use AWU3 with headset Shokz Open Run Pro 2. No phone.
 
Since AWU3, I’ve noticed the voice feedback has been pretty inconsistent. Sometimes it works fine, but then it suddenly stops.

I get that it depends on the API to watchOS, but the voice feature has never been this unreliable before. Restarting the watch helps, but honestly, having to restart it before every workout feels... not to good.

I Use AWU3 with headset Shokz Open Run Pro 2. No phone.
Unfortunately voice feedback has always been flaky for some people. Sorry about that. I investigate it every now and then and try various things but it is mostly out of the app's control.

However I am now focussing on stability for the next couple of months so that is one of the areas that I plan to look into again (along with data transfer and maybe iCloud support). I have some thoughts about workarounds that may help.
 
I follow with the flakiness of voice feedback with AWU3. With my previous AWU1 it would go out (low volume music) but eventually volume would return to normal and alerts would catch up, (one after the other) now if it’s gone it’s gone until next workout/reboot. Trying out the (new to me)double tap feature I was only able to get it to work while walking which makes sense due to less motion. However, even when it worked the app would eventually crash, the crashes show as “Recovered” on the phone app. It’s a shame because double tap is so much easier than swiping screens. Maybe one day. 🤔
 
I follow with the flakiness of voice feedback with AWU3. With my previous AWU1 it would go out (low volume music) but eventually volume would return to normal and alerts would catch up, (one after the other) now if it’s gone it’s gone until next workout/reboot. Trying out the (new to me)double tap feature I was only able to get it to work while walking which makes sense due to less motion. However, even when it worked the app would eventually crash, the crashes show as “Recovered” on the phone app. It’s a shame because double tap is so much easier than swiping screens. Maybe one day. 🤔
I have heard of crashes when using the new double finger tap gesture. As you say it doesn't work well when you are moving (which Apple admit) so I am tempted to just remove it. I will see how it goes though.
 
Since AWU3, I’ve noticed the voice feedback has been pretty inconsistent. Sometimes it works fine, but then it suddenly stops.

WatchOS 26 has made a terrible mess of voice feedback during workouts. The internet is flooded with complaints. The introduction of Workout Buddy has completely messed things up. Previously, Siri would read messages on the watch in the language set in the settings. Now, because some Buddy tasks are supposed to be performed on the phone, even if you're not using Buddy, the reading is in English (while the messages are still in the language set in the settings, which sounds absurd and incomprehensible). Some messages aren't announced at all, and overall, it's a complete mess.

I don't know how much of this translates to the WOD issues, but Apple has completely messed up in this regard.
 
Before getting a 2nd hand unit, I'm trying to figure out if the Apple Watch Ultra 2 has a longer runtime than the Ultra 1 in WorkOutDoors, GPS recording & Always On.

I find contradictory info:
  • DC Rainmaker reports 12h of dual-frequency/multiband GPS Workout Mode for both the Ultra 1 and Ultra 2
  • HotshotTek's recent battery life test measured the screen on time of 23h32 for the Ultra 1 and 30h07 for the Ultra 2 on an always-on watch face. That's a whooping 28% increase.
Which is it?

I'm preparing for a first ultra adventure, then there will be more. The Watch 7 I have now doesn't cut it for longer runs and charging while running is a pain, so I'm hoping to maximize battery life per cost as well as make it for the ultra duration to begin with.
To give you an idea, where I am the 2nd hand Ultra 1 are 3500 SEK, 5000 SEK for the Ultra 2 (43% increase)
 
Before getting a 2nd hand unit, I'm trying to figure out if the Apple Watch Ultra 2 has a longer runtime than the Ultra 1 in WorkOutDoors, GPS recording & Always On.

I find contradictory info:
  • DC Rainmaker reports 12h of dual-frequency/multiband GPS Workout Mode for both the Ultra 1 and Ultra 2
  • HotshotTek's recent battery life test measured the screen on time of 23h32 for the Ultra 1 and 30h07 for the Ultra 2 on an always-on watch face. That's a whooping 28% increase.
Which is it?

I'm preparing for a first ultra adventure, then there will be more. The Watch 7 I have now doesn't cut it for longer runs and charging while running is a pain, so I'm hoping to maximize battery life per cost as well as make it for the ultra duration to begin with.
To give you an idea, where I am the 2nd hand Ultra 1 are 3500 SEK, 5000 SEK for the Ultra 2 (43% increase)
I have always assumed that battery life on the Ultra 1 and 2 is identical, because that is what Apple implied, but I don't know for sure. There are so many variables that it's hard to tell, and I have never owned an Ultra 2 so don't have any personal experience.
 
  • Love
Reactions: supercurio
I also want to flag issues with the voice notifications since WatchOS 26 / latest WoD versions. I have been using WoD almost daily for 4 years and apart from the ducking issue during the first few kms of a run haven't really had any issues. For the last couple of weeks, when I go on a run with just my watch and listen to music or podcasts, the voice notifications just don't work at all. I have restarted the watch (AWU1) and it worked on one run but all other runs it does not announce at all. I've tested every combination of voice settings and observe the following:-

  • If I carry my phone and set the device to iPhone it works every time
  • If I carry my phone and set the device to watch I hear the announcements on the watch and the podcast from the phone
  • The interactions (mix/duck/pause) don't seem to make a difference.

This is a real problem as the main use-case for me is to go for a long run and rely on the voice alerts to guide the workout. Voice really doesn't work at all if I don't have my phone.

Here is my last run with no voice - you can see it is trying and the podcast carried on unabated.
1760150570668.jpeg
 
I also want to flag issues with the voice notifications since WatchOS 26 / latest WoD versions. I have been using WoD almost daily for 4 years and apart from the ducking issue during the first few kms of a run haven't really had any issues. For the last couple of weeks, when I go on a run with just my watch and listen to music or podcasts, the voice notifications just don't work at all. I have restarted the watch (AWU1) and it worked on one run but all other runs it does not announce at all. I've tested every combination of voice settings and observe the following:-

  • If I carry my phone and set the device to iPhone it works every time
  • If I carry my phone and set the device to watch I hear the announcements on the watch and the podcast from the phone
  • The interactions (mix/duck/pause) don't seem to make a difference.

This is a real problem as the main use-case for me is to go for a long run and rely on the voice alerts to guide the workout. Voice really doesn't work at all if I don't have my phone.

Here is my last run with no voice - you can see it is trying and the podcast carried on unabated.
View attachment 2566425
Nothing has changed in the voice alerts code for several years. The interaction with other audio apps has always been flaky for some people (especially Spotify users) but it does seem to have been reported more often and for more other apps since watchOS 26.

I am planning to create a beta with a couple of possible workarounds so if anyone is having problems and is interested in trying a beta with possible fixes then please email me at info@workoutdoors.net. I won't release this beta to all the beta testers, just to people who are experiencing voice issues.
 
It is also worth making sure that watchOS is up to date because one person who was having voice issues with watchOS 26 reported that they were fixed with watchOS 26.0.2.

However I am sure there are still long term voice issues, so I have now created that beta with some possible workarounds, including an optional one that is quite extreme. This beta also logs more information to help diagnose the problem if the workarounds don't work.

So if anyone is still experiencing voice problems then please email info@workoutdoors.net and I will add you to that beta.
 
I will try public beta WatchOS 26.1 Beta 2. if that fail, I’m eager to test your beta version.

I use awu3 with streamlets app(best radio app for aw). Listen to radio, no Spotify.

However, With or without voice feedback, WOD is still the best workout app ever :) Today I took a 14km run, with a route made in gpx studio. First time running this route. it works so well. Easy to follow map. Nice feedback about lowest and highest point. Halfway mark. Climb screen. So good. I gave you One more massive tip today.

Ok, one little question. Probably I can find answer in history of this thread. But segments? When I create a route in gpx studio, I add them as waypoints/poi. Works fine. But a dream is a library of segments, that I don’t need a route for. I create them self, no copyright problem :) Like the climb screen, but a own defined segment.
 
Last edited:
  • Love
Reactions: cfc
Is there an official or recommended way to handle multiple Apple Watch paired?
I just got an Ultra 1 and still have a Watch 7.

So far, I noticed that only one Apple Watch is active at a time in Apple's Watch app.

Most WOD data & settings appear to be stored in the WOD Watch app like alerts, shortcuts, sensors, routes, activity history, waypoints and many others.
Some WOD settings appear to be stored in the iPhone app, like screens.

Is there a guide I can follow on how to handle both gracefully - if that's even possible?
Does it fundamentally involve backing up and restoring settings back and forth?
For most settings it makes sense to have them separated, for some it would be nice to have them kept identical.

For screens, since the visual real-estate and font size are so different between a 41mm AW7 and a 49mm AWU it would be nice to have different ones.

I haven't decided yet if I'll keep a small AW7 (small wrist, as a runner I prefer the lowest weight possible) for short to medium duration activity and use the Ultra when the longer battery life is required, or reselling the AW7 and using the AWU for everything.
 
I will try public beta WatchOS 26.1 Beta 2. if that fail, I’m eager to test your beta version.

I use awu3 with streamlets app(best radio app for aw). Listen to radio, no Spotify.

However, With or without voice feedback, WOD is still the best workout app ever :) Today I took a 14km run, with a route made in gpx studio. First time running this route. it works so well. Easy to follow map. Nice feedback about lowest and highest point. Halfway mark. Climb screen. So good. I gave you One more massive tip today.

Ok, one little question. Probably I can find answer in history of this thread. But segments? When I create a route in gpx studio, I add them as waypoints/poi. Works fine. But a dream is a library of segments, that I don’t need a route for. I create them self, no copyright problem :) Like the climb screen, but a own defined segment.
Many thanks for the tip. I really appreciate that!

I don't think anyone has requested user-defined segments before. I will bear them in mind but if I did implement them then it would probably be as part of routes by leveraging the climb/descent code. But not anytime soon. Sorry about that.

I have had a few requests for Strava live segments over the years but I won't be going anywhere near them given the current dispute between Strava and Garmin!
 
Is there an official or recommended way to handle multiple Apple Watch paired?
I just got an Ultra 1 and still have a Watch 7.

So far, I noticed that only one Apple Watch is active at a time in Apple's Watch app.

Most WOD data & settings appear to be stored in the WOD Watch app like alerts, shortcuts, sensors, routes, activity history, waypoints and many others.
Some WOD settings appear to be stored in the iPhone app, like screens.

Is there a guide I can follow on how to handle both gracefully - if that's even possible?
Does it fundamentally involve backing up and restoring settings back and forth?
For most settings it makes sense to have them separated, for some it would be nice to have them kept identical.

For screens, since the visual real-estate and font size are so different between a 41mm AW7 and a 49mm AWU it would be nice to have different ones.

I haven't decided yet if I'll keep a small AW7 (small wrist, as a runner I prefer the lowest weight possible) for short to medium duration activity and use the Ultra when the longer battery life is required, or reselling the AW7 and using the AWU for everything.
All settings are stored on both the watch and the phone. When you change something on a watch then it changes on the phone and vice-versa. However the app doesn't do any automatic synchronising if another watch becomes active. I can't remember anyone asking for that but I very rarely hear from people who use more than one watch.

The app isn't really designed for a multi-watch situation because it is so rare. And maybe most people with two watches are like me and use one for workouts (an Ultra) and one for the rest of the day.

I will add it to my to-do list but it sounds very fiddly and probably not worth the effort involved when other features are more requested. Sorry about that.
 
  • Like
Reactions: supercurio
@cfc yes, totally understandable.
Yesterday I ran with the AW7 and AWU for comparison purposes, and since settings can be changed on the watch itself I did just that without worrying about having the iPhone app synchronization.
I suppose that it would still be nice to have WOD indicate the name of the Apple Watch it's operating on currently to avoid confusion, since this can change unexpectedly when Auto Switch is enabled.

There are plenty of features / fixes I'm hoping for first before further multi-watch support as well 😋
Especially the graph duration feature request I wrote a few days back.


Different issue report​


Including a new issue report today, regarding the FIT file generated that doesn't pass Garmin FIT SDK's Activity File Validator (FitTestTool.jar)

Code:
Activity File Validator
Opening file: Marathon_distance_run_on_asphalt_gravel_and_single_track.fit
Decoding file...
File decoded
Message Count: 16140
FileId Message Exists - Level: REQUIRED Status: PASSED
FileId Message Is First - Level: REQUIRED Status: PASSED
FileId Message Type Is Activity - Level: REQUIRED Status: PASSED
FileId Message Manufacturer Id Exists - Level: REQUIRED Status: PASSED
FileId Message Time Created Exists - Level: REQUIRED Status: PASSED
Activity Message Exists - Level: REQUIRED Status: PASSED
Activity Message Timestamp Exists - Level: REQUIRED Status: PASSED
Activity Message Local Timestamp is Valid - Level: REQUIRED Status: PASSED
Activity Message total_timer_time is Equal to the Sum of Session Messages total_timer_time Values - Level: REQUIRED Status: PASSED
Activity Message Session Count Is Equal To Actual Session Count - Level: OPTIONAL Status: PASSED
Session Message Exists - Level: REQUIRED Status: PASSED
Session Message Timestamps are Valid - Level: REQUIRED Status: PASSED
Session Message Start Time Is Valid - Level: REQUIRED Status: PASSED
Session Message Total Timer Time and Total Elapsed Time are Valid - Level: REQUIRED Status: PASSED
Session Message First Lap Index and Num Laps are Valid - Level: REQUIRED Status: PASSED
Session Message total_timer_time is Equal to the Sum of Lap Messages total_timer_time Values - Level: REQUIRED Status: FAILED
    Session message total_timer_time does not equal the sum of Lap messages total_timer_time values.
Session Message total_elapsed_time is Equal to the Sum of Lap Messages total_elapsed_time Values - Level: REQUIRED Status: FAILED
    Session message total_elapsed_time does not equal the sum of Lap messages total_elapsed_time values.
Session Message Sport Exists - Level: REQUIRED Status: PASSED
Session Message Sub Sport Exists - Level: OPTIONAL Status: PASSED
Session Message Are Sequential and Abut - Level: REQUIRED Status: SKIPPED
    Check requires two or more Session messages, found 1.
Session Message Valid Message Index - Level: REQUIRED Status: PASSED
Lap Message Exists - Level: REQUIRED Status: PASSED
Lap Message Valid Message Index - Level: REQUIRED Status: PASSED
Lap Message Start Time and Timestamp are Valid - Level: REQUIRED Status: FAILED
    One or more Lap messages contain an incorrect Start Time and/or an incorrect 'End Time' relative to the Session message.
Lap Message Are Sequential and Abut - Level: REQUIRED Status: FAILED
    Lap messages are not sequential, or do not abut.
Record Message Timestamps Fall Within Session Message Times - Level: REQUIRED Status: PASSED
Record Messages Are in Chronological Ascending Order - Level: REQUIRED Status: PASSED
Device Info Message Timestamps are Valid - Level: REQUIRED Status: PASSED
Device Info Message Device Index is Valid - Level: REQUIRED Status: PASSED
Device Info Message Manufacturer Id is Valid - Level: OPTIONAL Status: PASSED

Keeping only the FAILED tests:
Code:
Session Message total_timer_time is Equal to the Sum of Lap Messages total_timer_time Values - Level: REQUIRED Status: FAILED
Session Message total_elapsed_time is Equal to the Sum of Lap Messages total_elapsed_time Values - Level: REQUIRED Status: FAILED
Lap Message Start Time and Timestamp are Valid - Level: REQUIRED Status: FAILED
Lap Message Are Sequential and Abut - Level: REQUIRED Status: FAILED

Passing or not is not a big deal in itself as Strava or Intervals.icu parse the FIT file anyway.
FIT File Viewer, which is usually pretty strict has no objection either.

However Quantified Self, an amazing free tool to compare or combine activities recorded with different devices using its merge functionality is unable to parse the FIT files generated by WOD.

If I take the WOD FIT file, put it in Fit File Tools's section remover, strip the end of the activity and download the result, the output works in Quantified Self, so that has been my workaround so far. That file still as some FAILED items but they don't trip Quantified Self.

I don't know if I mentioned it earlier but I'm working on my own fitness app at the moment (for walking treadmills, on Android) so I went deep on making 100% compliant and rich FIT files. I can help dig into this further.

The FIT file is attached, but they essentially all have the same problem loading in Quantified Self (and maybe some other platforms as well)
 

Attachments

  • Marathon_distance_run_on_asphalt_gravel_and_single_track.fit.zip
    341.4 KB · Views: 6
@cfc yes, totally understandable.
Yesterday I ran with the AW7 and AWU for comparison purposes, and since settings can be changed on the watch itself I did just that without worrying about having the iPhone app synchronization.
I suppose that it would still be nice to have WOD indicate the name of the Apple Watch it's operating on currently to avoid confusion, since this can change unexpectedly when Auto Switch is enabled.

There are plenty of features / fixes I'm hoping for first before further multi-watch support as well 😋
Especially the graph duration feature request I wrote a few days back.


Different issue report​


Including a new issue report today, regarding the FIT file generated that doesn't pass Garmin FIT SDK's Activity File Validator (FitTestTool.jar)

Code:
Activity File Validator
Opening file: Marathon_distance_run_on_asphalt_gravel_and_single_track.fit
Decoding file...
File decoded
Message Count: 16140
FileId Message Exists - Level: REQUIRED Status: PASSED
FileId Message Is First - Level: REQUIRED Status: PASSED
FileId Message Type Is Activity - Level: REQUIRED Status: PASSED
FileId Message Manufacturer Id Exists - Level: REQUIRED Status: PASSED
FileId Message Time Created Exists - Level: REQUIRED Status: PASSED
Activity Message Exists - Level: REQUIRED Status: PASSED
Activity Message Timestamp Exists - Level: REQUIRED Status: PASSED
Activity Message Local Timestamp is Valid - Level: REQUIRED Status: PASSED
Activity Message total_timer_time is Equal to the Sum of Session Messages total_timer_time Values - Level: REQUIRED Status: PASSED
Activity Message Session Count Is Equal To Actual Session Count - Level: OPTIONAL Status: PASSED
Session Message Exists - Level: REQUIRED Status: PASSED
Session Message Timestamps are Valid - Level: REQUIRED Status: PASSED
Session Message Start Time Is Valid - Level: REQUIRED Status: PASSED
Session Message Total Timer Time and Total Elapsed Time are Valid - Level: REQUIRED Status: PASSED
Session Message First Lap Index and Num Laps are Valid - Level: REQUIRED Status: PASSED
Session Message total_timer_time is Equal to the Sum of Lap Messages total_timer_time Values - Level: REQUIRED Status: FAILED
    Session message total_timer_time does not equal the sum of Lap messages total_timer_time values.
Session Message total_elapsed_time is Equal to the Sum of Lap Messages total_elapsed_time Values - Level: REQUIRED Status: FAILED
    Session message total_elapsed_time does not equal the sum of Lap messages total_elapsed_time values.
Session Message Sport Exists - Level: REQUIRED Status: PASSED
Session Message Sub Sport Exists - Level: OPTIONAL Status: PASSED
Session Message Are Sequential and Abut - Level: REQUIRED Status: SKIPPED
    Check requires two or more Session messages, found 1.
Session Message Valid Message Index - Level: REQUIRED Status: PASSED
Lap Message Exists - Level: REQUIRED Status: PASSED
Lap Message Valid Message Index - Level: REQUIRED Status: PASSED
Lap Message Start Time and Timestamp are Valid - Level: REQUIRED Status: FAILED
    One or more Lap messages contain an incorrect Start Time and/or an incorrect 'End Time' relative to the Session message.
Lap Message Are Sequential and Abut - Level: REQUIRED Status: FAILED
    Lap messages are not sequential, or do not abut.
Record Message Timestamps Fall Within Session Message Times - Level: REQUIRED Status: PASSED
Record Messages Are in Chronological Ascending Order - Level: REQUIRED Status: PASSED
Device Info Message Timestamps are Valid - Level: REQUIRED Status: PASSED
Device Info Message Device Index is Valid - Level: REQUIRED Status: PASSED
Device Info Message Manufacturer Id is Valid - Level: OPTIONAL Status: PASSED

Keeping only the FAILED tests:
Code:
Session Message total_timer_time is Equal to the Sum of Lap Messages total_timer_time Values - Level: REQUIRED Status: FAILED
Session Message total_elapsed_time is Equal to the Sum of Lap Messages total_elapsed_time Values - Level: REQUIRED Status: FAILED
Lap Message Start Time and Timestamp are Valid - Level: REQUIRED Status: FAILED
Lap Message Are Sequential and Abut - Level: REQUIRED Status: FAILED

Passing or not is not a big deal in itself as Strava or Intervals.icu parse the FIT file anyway.
FIT File Viewer, which is usually pretty strict has no objection either.

However Quantified Self, an amazing free tool to compare or combine activities recorded with different devices using its merge functionality is unable to parse the FIT files generated by WOD.

If I take the WOD FIT file, put it in Fit File Tools's section remover, strip the end of the activity and download the result, the output works in Quantified Self, so that has been my workaround so far. That file still as some FAILED items but they don't trip Quantified Self.

I don't know if I mentioned it earlier but I'm working on my own fitness app at the moment (for walking treadmills, on Android) so I went deep on making 100% compliant and rich FIT files. I can help dig into this further.

The FIT file is attached, but they essentially all have the same problem loading in Quantified Self (and maybe some other platforms as well)
I use FIT File Viewer as my test system for generated FIT files. As you say it is pretty strict so if it passes that then I am happy.

I will add that to my list of things to investigate at some time but it won't be high priority unless lots of people complain. Sorry.
 
Okay, I'll take an hour or two to try to find which failure makes Quantified Self unable to load the file fully.

Code:
Session Message total_timer_time is Equal to the Sum of Lap Messages total_timer_time Values - Level: REQUIRED Status: FAILED
    Session message total_timer_time does not equal the sum of Lap messages total_timer_time values.

On an activity recording without laps, that's the only FAILED test case reported by Garmin's FitTestTool.jar

From some error in the WOD FIT formats, Quantified Self shows the beginning and the end as a single point, and none of the graphs.


Screenshot 2025-10-13 at 13.41.17.png


When there are more laps like in the activity uploaded above, there are more issues as timer totals don't add up to what's stored in the session.

Fixing the error that makes Quantified Self might be a trivial change, let's see.
 

Attachments

  • aw7.fit.zip
    224 KB · Views: 6
@cfc okay so I tested a few things and my conclusion is that the issue is with Quantified Self and its file parsing library, both of which are unmaintained for several years.

By converting the WOD's FIT to CSV and back to FIT, I was able to correct the issues reported by Garmin's validator, but Quantified Self still failed to display the fully compliant WOD FIT file correctly.

The errors in WOD's FIT are minor by the way: there's an inconsistency for elapsed & timer times between Lap(s) and Session. One is rounded and one is not. The error comes from the fact they're supposed to be the same numbers, either between Lap and Session if there's only one lap, or all Laps added and Session if there are multiple laps.
 
Last edited:
  • Like
Reactions: cfc
I also want to flag issues with the voice notifications since WatchOS 26 / latest WoD versions. I have been using WoD almost daily for 4 years and apart from the ducking issue during the first few kms of a run haven't really had any issues. For the last couple of weeks, when I go on a run with just my watch and listen to music or podcasts, the voice notifications just don't work at all. I have restarted the watch (AWU1) and it worked on one run but all other runs it does not announce at all. I've tested every combination of voice settings and observe the following:-

  • If I carry my phone and set the device to iPhone it works every time
  • If I carry my phone and set the device to watch I hear the announcements on the watch and the podcast from the phone
  • The interactions (mix/duck/pause) don't seem to make a difference.

This is a real problem as the main use-case for me is to go for a long run and rely on the voice alerts to guide the workout. Voice really doesn't work at all if I don't have my phone.

Here is my last run with no voice - you can see it is trying and the podcast carried on unabated.
View attachment 2566425
 
Same problem with the AWU1. Only voice control when I'm wearing my iPhone. The Apple Workout app has the same problem :) Since iOS 26. I tried resetting the AWU1 to factory settings. Nothing helped.
I also always had problems with the AWU1 recording heart rate correctly. (The Apple Workout app worked fine.)
I bought an AWU3. Everything works fine. Problem solved.

sorry, reply to Richo5
 
Last edited:
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.