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?

  • > But we know that you’re not supposed to use an old SDK to build for new firmware (i.e. CIQ 5).

    Nobody knows why... The only reason I can think of is that the compiler prepares a different version of the application for each type of device (which means that it is not possible to run the compiled application from one device to another unless they are compatible, of course).
    Which also means that there is no need to limit devices by firmware version, unless the new firmware is so different from the previous one that the old SDK is not enough. But that would mean that the compiled application would not work in the new firmware, unless the compiled application was also updated during the firmware update

  • For me, important is running compiled application in the future in the new firmware. 

    Going back to this statement, if you can always (or usually) run an old application on a new firmware, then there should be no problem using an old SDK to build for new firmware (e.g. CIQ 5). Keep in mind that CIQ 4 devices have been updated to CIQ 5, so CIQ 5 does not only refer to new hardware which only ever supported CIQ 5, like Fenix 8.

    But we know that you’re not supposed to use an old SDK to build for new firmware (i.e. CIQ 5).

  • I think we are thinking about two different compatibility. 

    No.

    > For me, important is running compiled application in the future in the new firmware. 

    Yes, that is what I am talking about.

    > Compatibility of the sdk is not important

    The question of compatibility of the SDK (ability to build for devices running a given CIQ version) is related to the other kind of compatibility (ability of newer firmware to run apps built by older SDKs). This is the point I have been trying to make repeatedly, and it is the point of this bug report.

    If SDK 6.4.0 is not forwards compatible with CIQ 5 devices, then it stands to reason that CIQ 5 devices are not backwards compatible with SDK 6.4.0.

    Again, it brings up the question of how an app built with SDK 6.4.0 and loaded onto a CIQ 4 devices (e.g. fr955) can continue to work on fr955 when it has been updated to CIQ 5, given that SDK 6.4.0 is not supposed to build for CIQ 5 devices.

  • I think we are thinking about two different compatibility. 

    For me, important is running compiled application in the future in the new firmware. 

    Compatibility of the sdk is not important as it may be done by

    if(device = oldDevice) {compile_1_23}...

    In other words new compiler has the all old inside. It can be also done in other way (e.g. definition file like mir).

    So my my question is: can the current sdk compute a good code for fenix7 9.x (the current beta is 20.x). If yes, what is probably true, why there is the unnecessary check, that limits to download the app. I have decided to limit device form 2.3api level because I need setClip() but why somebody limit e.g to api level 5?

  • To be clear, the targetSdkVersions (actually api versions) in compilerinfo.xml are apparently what's used to (properly) implement the compiler/device check in SDK 7.2.0 and higher.

    If you try to build for a device which has a connectIqVersion (compiler.json) that doesn't exist in compilerinfo.xml:targetSdkVersions, the compiler will tell you that you need a newer SDK.

    In the past (pre SDK 7.2.0), the compiler would do a similar check, but it would just incorrectly assume that you need SDK version X (or higher) to build a device with connectIqVersion X, which is why SDK 6.* can incorrectly build for devices with CIQ 5.*.