Acknowledged

Given that a newer SDK is required to build for CIQ 5.x devices, what does this mean for existing apps on devices that were upgraded from CIQ 4 to CIQ 5 (e.g. FR955, Fenix 7, etc)? Do these apps just break?

Background:

- it has always by my understanding that if you build an app for a device with a given SDK, then that app should continue to work regardless of future firmware updates (in general). This ofc excludes situations where:

  - the new firmware update has a bug or breaking change

  - the existing app has a dormant bug which is exposed by a legit change in new firmware. e.g. newer firmware has a change where Weather.CurrentConditions.observationLocationName is null, and this caused several existing watchfaces to crash because they assume that field will never be null. But that's an application error, since that field has always been typed to be possibly null

- CIQ 5.* devices require various 7.X (or 8.X) SDKs to run properly

- Compilers have a check to ensure you don't try to build a a too-new device with a too-old device

- Due to a bug in this check, where older compilers (pre 7.2.0) seem to incorrectly believe that SDK version X can build any device with CIQ version X (or lower), it's possible for an SDK 6.X compiler to build an app for CIQ 5 devices. However, it's very possible that such an app will crash when it's run in the simulator or the device (we've already seen "bug reports" about this

- The existing crop of devices that came out with CIQ 4 (e.g. fr955, fr965, fenix7) have all been updated to CIQ 5. As far as I know, this is the first time that existing devices have received a major CIQ update since the move from CIQ 1 to CIQ 2.

- Someone in the CIQ team already clarified that CIQ 5 devices require apps to be built with newer SDKs.

So here's what I don't understand.

The two following statements seem to be mutually exclusive:

- If an app is built for a device with an existing SDK (e.g. SDK 6.4.0) it will continue (in general) to work on the device for all future firmware updates

- Devices with CIQ 5.* require a 7.X or 8.X SDK

The problem is that it was entirely possible to build an app for an fr955 (for example) with SDK 6.4.0 in the past, when fr955 was only on CIQ 4. If I installed such an app on my fr955 when it had CIQ 4, it would expect it to continue to work now that my device is on CIQ 5.

So how can it be possible that going forward, a 7.X or 8.X SDK is required to build for my fr955?

What am I missing? Has something also changed with the device files that's relevant here?

Parents
  • Based on recurring forum discussions (this comes up all the time), I think the possible use cases are:

    1) the dev doesn't want to use a newer SDK because it has a known issue, but the new device files obligate them to do so. Or the dev perceives some risk/harm to using the latest SDK, such as increased memory usage. 

    This is especially relevant if the dev only targets old devices which are no longer receiving firmware updates and usually cannot benefit from SDK changes. Yes, I realize that there are cases when even these old devices can benefit, such as new compiler optimizations or bugfixes in the SDK. But in the past, I have seen increased memory usage in a data field just by updating my SDK. It was hard to know if this was a "real" increase that would actually be reflected on the real device though. It was especially concerning for old devices with very limited memory for data fields (I had some data fields that were riding the edge of the limit - where adding a little bit of code would cause crash. No, not a good policy, but I wanted to pack as much features as possible into those old devices.)

    2) the dev doesn't want to force users to update to the latest firmware, but the new device files obligate them to do so

    Bonus "use case":

    - the dev doesn't understand why they have to update to the latest SDK

    I understand that Garmin wants devs to use the latest SDK and users to use the latest firmware, but these issues come up over and over again. And there's often a misunderstanding among devs and users about how the following checks work:

    - the SDK compiler check which prevents old SDKs from building apps for devices with updated device configurations (device CIQ version is too new). (Indeed this check was broken until SDK 7.2)

    - the store check which prevents users with outdated firmware from installing apps that were built with the new device configurations (device firmware / CIQ version is too old)

Comment
  • Based on recurring forum discussions (this comes up all the time), I think the possible use cases are:

    1) the dev doesn't want to use a newer SDK because it has a known issue, but the new device files obligate them to do so. Or the dev perceives some risk/harm to using the latest SDK, such as increased memory usage. 

    This is especially relevant if the dev only targets old devices which are no longer receiving firmware updates and usually cannot benefit from SDK changes. Yes, I realize that there are cases when even these old devices can benefit, such as new compiler optimizations or bugfixes in the SDK. But in the past, I have seen increased memory usage in a data field just by updating my SDK. It was hard to know if this was a "real" increase that would actually be reflected on the real device though. It was especially concerning for old devices with very limited memory for data fields (I had some data fields that were riding the edge of the limit - where adding a little bit of code would cause crash. No, not a good policy, but I wanted to pack as much features as possible into those old devices.)

    2) the dev doesn't want to force users to update to the latest firmware, but the new device files obligate them to do so

    Bonus "use case":

    - the dev doesn't understand why they have to update to the latest SDK

    I understand that Garmin wants devs to use the latest SDK and users to use the latest firmware, but these issues come up over and over again. And there's often a misunderstanding among devs and users about how the following checks work:

    - the SDK compiler check which prevents old SDKs from building apps for devices with updated device configurations (device CIQ version is too new). (Indeed this check was broken until SDK 7.2)

    - the store check which prevents users with outdated firmware from installing apps that were built with the new device configurations (device firmware / CIQ version is too old)

Children
  • I'd like to add my voice to those who would like to stick with the SDK they are building with when a new SDK is released. 

    My most recent build was done with SDK 7.4.3 but after downloading SDK 8.1.0 I was no longer able to build for some watch modes with SDK 7.4.3 even though that SDK 7.4.3 was still selected. To me, that seems like a problem in two respects:

    1) I can select an SDK to build with that cannot succeed

    2) I am forced to begin building with the newest SDK which may have problems that have not yet been discovered. I am not a fan of using the latest, low-mileage release until it has some time on it.

    It makes sense to me to make changes to the system to allow a developer to stay with an SDK that they've tested with, even when a new version is released and provide the developer a completely viable option to stay with what they know works until they decide to begin testing with the newest SDK, or they feel they must move to the newest SDK in order to support newer devices.