My watch face (https://apps.garmin.com/en-US/apps/d44a137e-7a1e-4b67-9aa6-133d48db745c) is crashing when using one function on some watches, Forerunner 45 and Fenix 7s that I could get feedback from. When I try in the simulator for those watches, it works fine and it also works fine on other watches, like Forerunner 645 (that I own).
This is the code that is crashing, I tried to wrap up everything on try catches without luck. I am starting to get multiple complaints.
Here is the offending code, I was able to confirm the function getHRMax is working if used alone (via other functionality of my watch face).
//! Get the VO2Max. Try first from watch, then calculate. //! @return [Float] Floating number with VO2Max approximation function getVO2Max() { var vo2max = null; var profile = null; try { profile = UserProfile.getProfile(); } catch(ex) { } // RFCS-64 2022/7/24 - Check if can get VO2Max from watch directly if (null != profile && profile has :vo2maxCycling && profile has :vo2maxRunning) { try { // RFCS-64 2022/7/24 - Check current sport from watch if (UserProfile.HR_ZONE_SPORT_BIKING == UserProfile.getCurrentSport()) { vo2max = profile.vo2maxCycling; } else { // RFCS-64 2022/7/24 - Any other sport, get running VO2Max vo2max = profile.vo2maxRunning; } } catch (ex) { // If could not get the watch VO2Max, try to calculate vo2max = RunFocusData.calculateVO2Max(); } } else { // If version of the watch does not have VO2Max exposed, calculate vo2max = RunFocusData.calculateVO2Max(); } return vo2max; } //! Calculate current VO2Max based on simple formula to give approximation //! VO2Max = ( HRmax / HRrest ) * 15.3 //! @return [Float] Floating number with VO2Max approximation function calculateVO2Max() { var rhr = null; var hrmax = null; var vo2max = null; var profile = null; try { profile = UserProfile.getProfile(); } catch(ex) { } finally { // RFCS-64 2022/7/24 - Watch API does not have VO2Max exposed, calculate if (null != profile) { try { rhr = profile.restingHeartRate; } catch (ex) { } finally { if (null != rhr) { try { hrmax = RunFocusData.getHRMax(); } catch (ex) { } if (null != hrmax) { try { // RFCS-64 2022/7/24 - Make sure it converts to float vo2max = Math.round((hrmax.toFloat() / rhr) * 15.3); } catch (ex) { vo2max = null; } } } } } } return vo2max; } // RFCS-69 2022/7/24 - Trying to make sure it doesnt crash //! Get HRMax from HR zone 5 //! @return [Number] HRMax function getHRMax() { var HRMax = null; var genericZoneInfo = null; try { genericZoneInfo = UserProfile.getHeartRateZones(UserProfile.HR_ZONE_SPORT_RUNNING); // RFCS-69 2022/7/24 - An array was returned and it has at least one element if (genericZoneInfo has :size && genericZoneInfo.size() > 0) { HRMax = genericZoneInfo[genericZoneInfo.size()-1]; } } catch (ex) { } return HRMax; }
I wonder if anyone is experiencing the same or may have an idea of what is going on. It looks similar on reports about using Moment.subtract as reported here https://forums.garmin.com/developer/connect-iq/i/bug-reports/runtime-error-with-moment-subtract-when-subtracting-a-duration but maybe some other function?
Remember, it is working fine on simulator and other watches, only on some watches that it doesnt work.