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
  • > it means that backward compatibility is ensured

    I used to believe this, but if I was still 100% sure about this, I wouldn't have opened this bug report.

    If CIQ 6.* SDKs cannot build for CIQ 5 devices, but CIQ 6.* can build for CIQ 4 devices, then it doesn't seem possible that to say that CIQ 5 is backwards compatible with old SDKs/apps, since existing CIQ 4 devices have received an update for CIQ 5.

    Even in the SDKs with the broken compatibility check, there is a file compilerInfo.xml which lists targetSdkVersions (should really be called targetApiVersions, but ofc there was a time when API version and SDK version were more or less synonymous / in -sync.)

    We can see from compilerInfo.xml that:

    - SDK 6.4.2 supports APIs 1.2.0 - 4.2.0

    - The SDK 7.0.* betas and 7.1.0 RC were the first to support 5.0.0

    - SDK 7.1.1 was the first production SDK to support 5.0.0.

    - SDK 7.3.0 was the first to support 5.0.1.

    - 7.4.1 (unreleased) seems to incorrectly have support for 5.1.0

    - 7.4.3 no longer has support for 5.1.0

    - 8.0.0 beta is the first SDK to actually support 5.1.0

    Note that the corresponding compiler/device check was broken until 7.2.0. In SDKs prior to 7.2.0, the compiler apparently just incorrectly assumed that SDK version = API version, so that if you had SDK version X, it should automatically be able to build devices with API X or lower. This is why SDK 6.4.0 can incorrectly build for API 5.* and SDK 7.1.1 can incorrectly build for API 5.0.1.

    Anyway, going back to my original argument:

    - my fr955 now has CIQ API 5.1.0 (I'm in the beta program)

    - previously it had API 5.0.0 (and this is how it's configured now in fr955/compiler.json)

    - even earlier (when I bought it about 2 years ago), it had API 4.x.

    When my fr955 had API 4.x, SDKs such as 6.* would happily build for it

    Now that my fr955 has API 5.0.0 in compiler.json:

    - SDKs 6.* should *not* be able to build for it (based on the above information),  but they will, because of the bug mentioned above. But the CIQ team has already clarified that CIQ 5.* devices require one of the latest SDKs (not SDK 6.*) for sure

    - When CIQ 5.1.0 comes out of beta and is widely released, I assume the connectIqVersion value in the device file (fr955/compiler.json) will eventually be updated to 5.1.0.

    - At this point, SDKs 7.2 - 7.4.3 (excluded the broken 7.4.1) should refuse to build for my fr955

    - SDK 6.* still should *not* be able to build for fr955, but they will, because of the bug

    My point is that if old SDKs either won't build or shouldn't build for a device with newer firmware (CIQ 5.0.0/5.0.1/5.1.0), how is it possible that an old app which was built targetting old firmware (CIQ 4.*) for the same device can continue to run properly? If there's backwards compatibility in the sense that new firmware should be able to run old apps, then old SDKs should be able to build for new firmware (with a newer CIQ API version). But according to the version check information in compilerinfo.xml, old SDKs should not be able to build for new firmware (with a newer CIQ API version).

    The only way out of this dilemma that I can think of is if something else also changed in the device configuration files along with the connectIqVersion in compiler.json. i.e. Whatever that something else is, it used to be compatible with CIQ 4.* but now it isn't.

Comment
  • > it means that backward compatibility is ensured

    I used to believe this, but if I was still 100% sure about this, I wouldn't have opened this bug report.

    If CIQ 6.* SDKs cannot build for CIQ 5 devices, but CIQ 6.* can build for CIQ 4 devices, then it doesn't seem possible that to say that CIQ 5 is backwards compatible with old SDKs/apps, since existing CIQ 4 devices have received an update for CIQ 5.

    Even in the SDKs with the broken compatibility check, there is a file compilerInfo.xml which lists targetSdkVersions (should really be called targetApiVersions, but ofc there was a time when API version and SDK version were more or less synonymous / in -sync.)

    We can see from compilerInfo.xml that:

    - SDK 6.4.2 supports APIs 1.2.0 - 4.2.0

    - The SDK 7.0.* betas and 7.1.0 RC were the first to support 5.0.0

    - SDK 7.1.1 was the first production SDK to support 5.0.0.

    - SDK 7.3.0 was the first to support 5.0.1.

    - 7.4.1 (unreleased) seems to incorrectly have support for 5.1.0

    - 7.4.3 no longer has support for 5.1.0

    - 8.0.0 beta is the first SDK to actually support 5.1.0

    Note that the corresponding compiler/device check was broken until 7.2.0. In SDKs prior to 7.2.0, the compiler apparently just incorrectly assumed that SDK version = API version, so that if you had SDK version X, it should automatically be able to build devices with API X or lower. This is why SDK 6.4.0 can incorrectly build for API 5.* and SDK 7.1.1 can incorrectly build for API 5.0.1.

    Anyway, going back to my original argument:

    - my fr955 now has CIQ API 5.1.0 (I'm in the beta program)

    - previously it had API 5.0.0 (and this is how it's configured now in fr955/compiler.json)

    - even earlier (when I bought it about 2 years ago), it had API 4.x.

    When my fr955 had API 4.x, SDKs such as 6.* would happily build for it

    Now that my fr955 has API 5.0.0 in compiler.json:

    - SDKs 6.* should *not* be able to build for it (based on the above information),  but they will, because of the bug mentioned above. But the CIQ team has already clarified that CIQ 5.* devices require one of the latest SDKs (not SDK 6.*) for sure

    - When CIQ 5.1.0 comes out of beta and is widely released, I assume the connectIqVersion value in the device file (fr955/compiler.json) will eventually be updated to 5.1.0.

    - At this point, SDKs 7.2 - 7.4.3 (excluded the broken 7.4.1) should refuse to build for my fr955

    - SDK 6.* still should *not* be able to build for fr955, but they will, because of the bug

    My point is that if old SDKs either won't build or shouldn't build for a device with newer firmware (CIQ 5.0.0/5.0.1/5.1.0), how is it possible that an old app which was built targetting old firmware (CIQ 4.*) for the same device can continue to run properly? If there's backwards compatibility in the sense that new firmware should be able to run old apps, then old SDKs should be able to build for new firmware (with a newer CIQ API version). But according to the version check information in compilerinfo.xml, old SDKs should not be able to build for new firmware (with a newer CIQ API version).

    The only way out of this dilemma that I can think of is if something else also changed in the device configuration files along with the connectIqVersion in compiler.json. i.e. Whatever that something else is, it used to be compatible with CIQ 4.* but now it isn't.

Children
No Data