App crashes on Fenix 8

I just received a User Feedback report that my app Sail2WIN crashes on startup on a Fenix 8 51mm Solar.

Sail2WIN runs without issues on all Fenix 8 models using the simulator.

I build using SDK 6.4.0 since I don't need the new features offered in the newer SDK releases, 6.4.0 works, and I'd like to avoid introducing new problem to be debugged.

I ran the ERA viewer and see no report of the crash.

Is there a known problem with using SDK 6.4.0 to build for the Fenix 8 models ?

Does anyone have other thoughts about why my app would crash on startup on the Fenix 8 when it runs fine on the Simulator ?

Thanks in advance for any help.

  • Terribly long posts for simple things. :)
    Everything depends on the compatibility of the application compiled with a specific SDK version.
    If today I prepare an application for a device with firmware X using SDK version Y and the compiled application will work correctly for any firmware >= X (I do not have to release new versions of the application and the user will update the firmware) then you can always use SDK version Y to build applications for this device.
    In summary, you must or should use a newer SDK version if you want to prepare applications for devices:
    - unknown at the time of older SDK release
    - newer firmwares do not provide compatibility with older SDKs - but this would mean that after installing the new firmware all CIQ applications would have to be copied and installed again

  • If today I prepare an application for a device with firmware X using SDK version Y and the compiled application will work correctly for any firmware >= X (I do not have to release new versions of the application and the user will update the firmware) then you can always use SDK version Y to build applications for this device.

    Yeah, I wasn’t thinking. I think you’re right: I made the same as argument as you did above more than once, in response to users who incorrectly think that CIQ apps will automatically break [*] if the device firmware is updated (but now I made the same error in thinking.) As far as we know, new firmware should be backwards compatible with old apps, but ofc not the other way around.

    [*] not counting API changes which affect code that was already buggy

    To be clear, users in the forums would say that CIQ apps have to be constantly updated to “keep up” with new SDKs, and I argued this is not the case (although a Garmin support employee basically posted the same thing). The context of one of these discussions with the recent change to observationLocationName to be null, which causes some apps to crash. But the reason those apps were crashing is bc they were always buggy (observationLocationName was always documented/typed to be possibly null), not bc the newer SDK was strictly incompatible with older apps.

    So it was always my understanding that new firmware should support apps built with old SDKs.

    But then again maybe that isn’t true anymore, starting with 7.* SDKs and CIQ 5 devices:

    - A CIQ employee says you need to use the latest SDK to build an app for CIQ 5 devices. (What does this imply for a CIQ 4 device that was updated to CIQ 5? Will existing apps actually break in this case?)

    - Iirc, some apps will crash in the simulator for CIQ 5 devices if you build them with an old SDK

    Ofc the tricky part here is there are 2 kinds of CIQ 5 devices:

    - Devices which launched with CIQ 5.x (e.g. Fenix 8)

    - Devices which launched with CIQ 4 and have now been updated to CIQ 5 (in the device config and irl) (e.g. FR955, FR965). The thing is that all CIQ 4 devices are now configured to be CIQ 5, in the SDK device files (which means they’re all eligible for CIQ 5 updates irl).

    It’s not much of a problem to say that Fenix 8 requires a newer SDK (7.3) because Fenix 8 didn’t exist when the older SDKs were out.

    But if you say FR955 now requires a newer SDK (7.1) because it may be running CIQ 5, does that mean that (some) old apps built with 6.* SDKs will suddenly stop working? How will this present itself to the user? Just a crash with no explanation?

    I’d love to hear some clarification from Garmin on this, if possible.  

    (So I don’t think it’s actually as simple as it might seem.)

  • Terribly long posts for simple things. :)

    Yeah you’re right. You broke the situation down much better than I did.

    But the problem is we don’t know which of the following statements is true:

    If today I prepare an application for a device with firmware X using SDK version Y and the compiled application will work correctly for any firmware >= X (I do not have to release new versions of the application and the user will update the firmware) then you can always use SDK version Y to build applications for this device.

    or

    newer firmwares do not provide compatibility with older SDKs - but this would mean that after installing the new firmware all CIQ applications would have to be copied and installed again

    I used to think the first one was true, but I’m not so sure anymore. If the second one is true, that would be a nightmare for devs and users. Devs don’t want to be constantly updating their apps for no reason (just to rebuild with the latest SDK) and users don’t want to have to rely on devs to do so (what about old apps which are abandoned?).

    Even on iOS, you can generally run very old apps on newer OS versions, with notable exceptions (dropping support for 32-bit apps, which was announced to both users and devs). I mention that because Apple notoriously cares a lot less about backwards compatibility than other companies (like Microsoft).

    i have a pace calculator app that’s like 8 years old, on my iPhone with the latest iOS. I don’t expect old apps to “automatically” break unless they’re based on some live service which becomes unsupported at some point.

  • Just jumping in at the end  but maybe there is a global issue: 

    https://www.youtube.com/watch?v=tz0nt6RLc1U

  • I thought about it some time ago. It is obvious that the best solution would be compatibility of CIQ apps with any firmware >=X, but nobody knows anything about it.

  • Got the same issues, after installing my app, which is running perfectly well on Fenix 7, users reported very slow Fenix 8 amoled response... sounds seems to be a problem too. 

  • I also have an issue with the Fenix 8 (with Amoled screen):

    The issue I have is with a certain view in an app (the other views of this app work).

    The issue is that the view starts with a strange tone and the view is mostly black.

    It runs through onUpdate(dc) but it only shows peridiocally for a split second something.

    The delegate of that view works.

    The issue does not occur on my Fenix 7X device (with LCD screen)

    The issue did not occur on my Epix (with Amoled screen). 

    The issue does not occur on the Epix 8 Simulator.

    Especially the last point runs me crazy: the only way I can imagine to debug is to upload a BETA version and download it on the device, which uses much time because of the time interval between upload and appearance of that version in the "Developer Dashboard", not to mention the problems I had with Garmin Express.

    I use SDK 7.4.3 on a mac.

    Maybe someone has an idea either on the issue itself or a suggestion of how to debug in general if an issue does only occur on the device but not in the Simulator (I once did sideloading via Android File Transfer but it seems that that does not work anymore?) Thanks.

  • I thought about it some time ago. It is obvious that the best solution would be compatibility of CIQ apps with any firmware >=X, but nobody knows anything about it.

    I opened a bug report about the whole backwards compatibility vs CIQ 5 SDK requirements issue.

    Hopefully Garmin will eventually shed some light on this.

    forums.garmin.com/.../given-that-a-newer-sdk-is-required-to-build-for-ciq-5-x-devices-what-does-this-mean-for-existing-apps-on-device-that-were-upgraded-from-ciq-4-to-ciq-5-e-g-fr955-fenix-7-etc

  • Small update concerning my issue:

    I'm getting slowly to more clarity concerning the issue of the black screen.

    I recall: it happens only on the DEVICE fenix 8, NOT on other devices and NOT in the fenix 8 simulator.

    As I understand, generally, onUpdate(dc) updates the view every second.

    To reduce computing time, my app updates some elements of the view not every second, but every 10 seconds (I use a counter which adds up every time when onUpdate(dc)  runs).

    I figured out now, that on the fenix 8 device, the elements which only update every 10 seconds flash up shortly only every 10 seconds (leaving a black screen mostly). On other devices, and on the fenix 8 simulator, these elements "live" for 10 seconds until they are updated.

    Maybe I shouldn't bother about computing time, and just update everything every time that onUpdate(dc) runs.

    Anybody has thoughts about this?

    It is very cumbersome to debug as I wrote: the waiting until a new uploaded BETA versíon appears in Developer Dashboard costs 5, sometimes 15 minutes...

    (The issue about the strange tone seems to have to do with ActivityRecording, and I have not yet studied that very deeply.)

     

  • It's very hard to guess your code without seeing the relevant part of it. To me it sounds like it's unnecessary to do this only once per 10 seconds thing, but it could work, but evidently you're doing something wrong. From the explanation it sounds like you enter an if only in the 10th second, that would explain why it only flashes up for 1 second, but that doesn't explain why it works on other devices. Maybe because you don't start with dc.clear() (which you should) and on the "other device" it doesn't clear the screen by itself, and on the f8 it does.

    Anyway you should start with dc.clear, and if you want to do the compute only once every 10 second thing, then you should save the results in a variable and use that to draw it every time onUpdate is called.