Suunto app Forum Suunto Community Forum
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    [Good-to-know] Simulator vs physical watch: key discrepancies & limitations

    Scheduled Pinned Locked Moved Suunto Plus Development
    developmentsimulatorissues
    11 Posts 7 Posters 1.1k Views 7 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • surfboomerangS Offline
      surfboomerang @SuuntoPartnerTeam
      last edited by

      @SuuntoPartnerTeam said in [Discussion] Simulator vs physical watch: key discrepancies & limitations:

      The screenshot feature is also in a non-functional state.

      I got access to the partner program. Upon uploading the app, I’m requested to send watch images by using the screenshot option. Is there any information about when this feature will be available?

      Is it mandatory to use this feature or is a screenshot with the right dimensions also ok?

      Suunto Vertical Titanium Solar
      OnePlus Nord 4

      Nikolai SimonovN 1 Reply Last reply Reply Quote 2
      • Nikolai SimonovN Offline
        Nikolai Simonov @surfboomerang
        last edited by

        @surfboomerang said in [Discussion] Simulator vs physical watch: key discrepancies & limitations:

        Is it mandatory to use this feature or is a screenshot with the right dimensions also ok?

        not necessary use screenshot tool from sdk

        Suunto Race 2 Ti
        Suunto Race
        Suunto 9 Baro

        Suunto Aqua
        Suunto Wings

        1 Reply Last reply Reply Quote 2
        • S SuuntoPartnerTeam referenced this topic on
        • Ecki D.E Offline
          Ecki D. Bronze Member
          last edited by

          My app was working well on the Simulator.
          When deploying I had to learn that I had to strip out debugging fields from my manifest cause of to many fields.
          Further the app still crashes the watch when choosing it on the watch as a suunto plus app.
          I tried to get infos from the logs and will now deploy minimal functional versions to the watch to get it sorted.
          Is there a way to start debugging on the watch?
          Would be great if there would be a pre deployment check of the code if there are hard incompatibilities. Maybe I missed something.

          https://www.strava.com/athletes/37982563
          https://www.instagram.com/macdev

          Nikolai SimonovN 1 Reply Last reply Reply Quote 0
          • Nikolai SimonovN Offline
            Nikolai Simonov @Ecki D.
            last edited by Nikolai Simonov

            @Ecki-D. there’s no debug protocol as far as I know. you could do it the oldschool way - use systemEvent('[tag] message $someData'); to populate the logs, using a ‘tag’ just makes filtering easier when you check the logs after a crash or whatever happened.

            Suunto Race 2 Ti
            Suunto Race
            Suunto 9 Baro

            Suunto Aqua
            Suunto Wings

            1 Reply Last reply Reply Quote 2
            • Raimo JärviR Online
              Raimo Järvi @SuuntoPartnerTeam
              last edited by

              @SuuntoPartnerTeam Simulator seems to have a problem in getUserInterface function. This works as expected:

              function evaluate(input) {
                systemEvent('distance', input.distance);
              }
              

              But this breaks the simulator, and “TypeError: Cannot read properties of undefined (reading ‘distance’)” is printed to developer tool console:

              function getUserInterface(input) {
                systemEvent('distance', input.distance);
                return {
                  template: 't'
                };
              }
              

              Both work in watch.

              Pragmatic Programmer

              1 Reply Last reply Reply Quote 1
              • M Online
                matram
                last edited by

                Struggled with moving my app to the physical watch.

                Some the key issues:

                • let not allowed on watch (ES5)
                • variables not initialised when app initially loaded (worked OK in simulator)
                • setText with <div id= >

                This lead to a surprising amount of different failure modes:

                • watch stuck on “restore to a safe state” - requiring a hard factory reset
                • app cannot be activated for training - toggle switches back directly
                • training starts - watch reboots when changing to app screen
                • app screen blank
                • once app screen actually comes up it becomes easier to debug 🙄

                To debug I basically removed all code from my app and inserted it back again code block by block to pinpoint the errors. Took a fair amount of time, but now the app mostly works on the watch too…

                Questions - I never managed to locate a log or crash dump from the watch. Where is it?

                Some suggestions:

                • Would be good if simulator and watch was following the same standard, so more bugs could be found in the simulator, or if there was a “linter” to warn of unsafe usage
                • I have found most of my problems touched upon in the documentation, code examples or this forum, but the information is sometimes very brief and not always easy to find, maybe gather everything in the reference document and add a TOC and index
                • My own approach is generally top-down, understand architecture, state model and data flow, build a skeleton and iteratively add detail. Documentation is a bit lacking in this high level view, it feels more like a collection of many details and example fragments.
                • For me, the intended debug approach is not very clear, maybe add more guidance in the manual on how to use the VS Code IDE especially for debugging.

                But kudos for making this IDE available, 👍

                surfboomerangS 1 Reply Last reply Reply Quote 0
                • surfboomerangS Offline
                  surfboomerang @matram
                  last edited by

                  @matram This sounds way too familiar. I went through the same while developing my apps.
                  Frustratiing at some point. Especially because it takes a lot of steps to test it on the watch every time.

                  If the watch is connected to your pc, there is an option to look at the logs in the SuuntoPlus extension in VS Code. You can find it in “Explorer -> Suunto Watch”

                  1d75c8d5-5d96-42a7-9bc7-8a39d09f055a-image.png

                  Suunto Vertical Titanium Solar
                  OnePlus Nord 4

                  M 1 Reply Last reply Reply Quote 0
                  • D Offline
                    DonTomGot
                    last edited by

                    Another frustrating finding is that it seems as if including the zone gauge as done in example “TemplateLayout4” breaks the simulator in a strange way, and exposes what I believe is a memory leak in VS Code editor - that makes it more or less impossible to work. Restart needed, Zone gauge code needs to be removed - and then things are back to normal.

                    Here is what does not work in simulator:

                    <!-- Zone gauge -->
                    <import src=“#zone-g” />

                    Works in watch however.

                    1 Reply Last reply Reply Quote 0
                    • M Online
                      matram @surfboomerang
                      last edited by

                      @surfboomerang
                      Many thanks.

                      For anyone else, select View system events and you get something like this …

                      edb9767f-02e3-49f4-983c-7081839bbda4-image.png

                      M 1 Reply Last reply Reply Quote 0
                      • M Online
                        matram @matram
                        last edited by

                        One thing that caused my grief when working with subscribed signals (HR, pace) in main.js or in onLoad is that on the simulator signals are always available. On the watch subscribed signals seem to transition from ‘undefined’ -> ‘NaN’ -> a valid number.

                        I ended up needing to protect any use of these signals by using isFinite(), like this.

                          // Get the index of the the active zone for a 5 zone HR gauge
                          // v          current value
                          // zones      an array of 4-values defining the 5 zones
                          function getActiveZone(v, zones) {
                            if (!isFinite(v)) return 0;
                            for (var i = 1; i < zones.length; i++) {
                              if (v < zones[i]) return i - 1;
                            }
                            return zones.length - 1;
                          }
                        

                        Inserting systemEvent() was quite effective in pinpointing the point of failure once I understood how to do it. But I do not really get any error message, just something like this. [MR] messages are inserted by me, so I can see something happened after “G4a”, but not what the actual error was.

                        #3251371 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G1
                        #3251372 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G2
                        #3251373 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G3
                        #3251374 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G4a1-not-supported
                        #3251375 26.05.2026 17:44:39 : WRN UI_FRAMEWORK : JS
                        

                        I am more of a Swift or C# person used to verbose error messages and traceback. But maybe I have been spoiled. 😊

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Suunto Terms | Privacy Policy