[new developer] Watch face crashes at minute update

I'm doing my first watch face development, and it works fine in the simulator, but at minute update (i.e., second == 0), the face crashes with:

Error: Symbol Not Found Error
Details: 'Failed invoking <symbol>'

Nothing should be happening, other than the minute hand getting redrawn.  This happens fine in the simulator.

Any suggestions on how to debug this would be greatly appreciated.  Slight smile

  • My bad!  It's not at minute == 0 - I actually saw that update happen correctly.  (Yay!)
    At ~7 sec, the watch face dims.  (I have a Forerunner 55)
    At ~15 sec, that's when the face crashes.


    What's happening at 15 sec?  I'm guessing a function is getting called that I don't implement, or I have just a stub for.

    Better yet, are there a list of functions that should have minimal functionality listed somewhere?

  • if it's fine in the simulator, then maybe log every function, and you'll see which part of your code is being called.

  • On a watch like the fr55 when it's in high power, after 10 or so seconds it drops into low power.  In the sim, it will stay in high power until you go to settings>display mode and set it to always active.  Try setting to low power (always active) in the sim

  • Oh sweet, I got the sim to crash.  Thank for pointing out the display mode part!

    Are there logs I can find on the sim?

    Also, how do I restart the simulator?  View -> Reset Simulator didn't do anything.

  • You'll see the crash in the debug console with VSC.

    You should be able to jst run your app again after it crashes.

  • Hmm, I can't repeatedly make the sim crash.  It crashed the one time, but I haven't been able to make it crash since.  Is there a way to set the sim to low power?  I don't see a control for that.

  • In the sim, for MIP devices, low power and always active are the same thing.

    These are the options you will see in the sim for watchfaces, under Settings > Display Mode:

    MIP:

    - High Power

    - the screen stays on

    - onUpdate() is called once per second

    - Always-Active [this is low power mode]

    - the screen stays on

    - onUpdate() is called once per minute

    - onPartialUpdate() - if implemented - is called once per second [updates are subject to power budget]

    AMOLED:

    - High Power

    - the screen stays on

    - onUpdate() is called once per second

    - Always-On [this is a low power mode, corresponds to when user has AOD enabled]

    - the screen stays on, but it's dimmed

    - onUpdate() is called once per minute. Screen updates are subject to burn-in rules.

    - Off [this is a low power mode, corresponds to when user has AOD disabled]

    - the screen is turned off

    On a real device, high power mode is activated when the user turns their wrist to look at their watch, and times out after a few seconds, as jim_m_58 said. After high power mode times out, the watch enters low power mode.

    Here's Garmin documentation which explains all of this:

    https://developer.garmin.com/connect-iq/user-experience-guidelines/watch-faces/

    Do you implement onPartialUpdate()? It seems that would be the most likely place for your app to crash if it only crashes when you set the display mode to Always Active.

    If not, then I would expect your watchface to also crash in high power mode.