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?

  • Richard.ConnectIQ thanks again for the clarification.

    What still isn't clear to me is how the following facts can be reconciled:

    - it's not necessary to update old apps installed on a device when the device's firmware is updated (which includes a firmware update which changes the CIQ API level from 4.x to 5.x)

    - older SDKs (such as 6.4.0) are not supposed to be used to build for CIQ 5 devices (again, you have confirmed that a newer 7.x SDK is required for CIQ 5 devices, and compilerinfo.xml says the same thing)

    Here's the scenario:

    - an app built by SDK 6.4.0 targeting fr955 (when it was configured for CIQ 4) is successfully installed on a real fr955 (which has firmware with CIQ 4)

    - This fr955 device is updated to new firmware with CIQ 5

    - the old app continues to work without any modifications / updates

    If that scenario is possible, why isn't it possible for an old SDK (e.g. 6.4.0) to build for a CIQ 5 device? I say that it isn't possible based on: on bug reports where people tried building for CIQ 5 devices with 6.4.0 and they experienced crashes, the targetSdkVersions information in compilerinfo.xml (should probably be renamed to targetApiVersions), and your statement that CIQ 5 devices require a recent SDK version (at the time, 7.x). I think other CIQ team members have echoed the fact that SDK 6.4.0 is too old for CIQ 5.

    - It's the same physical device (fr955)

    - Based on everything you've said, the old app built with old SDK (6.4.0) should continue to work?

    So why shouldn't a *new* app built with old SDK (6.4.0) work?

    To drive the point home, once all the current CIQ 5 devices are updated to 5.1, it seems 100% certain that an 8.x SDK will be required to build for them, based on how the compilerinfo.xml version check seems to work. By the same reasoning, if it was possible to use a 7.x SDK to build for devices with CIQ >= 5.0 and CIQ < 5.1, why won't it be possible for the same SDKs to build for the same devices once they are updated to 5.1?

  • If by "f8" you mean "fenix8", that's a bad example, as fenix8 released with CIQ 5.0.1 which has been confirmed to require SDK 7.3.0.

    Source:

    - compilerinfo.xml

    - the fact that if you try to build for fenix8 with SDK 7.2.x, you will get a compiler error asking you to use a newer SDK

    As mentioned several times, the 6.* SDKs *will* build for CIQ 5.X, and 7.0.x-.7.1.x SDKs will build for CIQ 5.0.1, but this is an unintentional bug that was fixed in SDK 7.2.0.

  • The problem is:
    - app is build with 6.4, for device f8 - cur. firmware is 16.11 - it means: every app can be build with 6.4 for f8
    - new firmware e.g. 17.00
    -- app still runs on 17.00
    -- users with 17.00 can download app
    -- users with 16.11 (that decided to not upgrade) can still download app
    - new device is published e.g f9, so new sdk 7.0 and new sim device f8 and update sim device f7 with minimal version 17
    - rebuilding app to support f9, nothing news - it means I use only 6.4 features
    -- f9 is supported
    -- users with f8.17.00 can download app
    -- users with f8.16.11 CAN'T download app - why - I use only 6.4 features?

  • It is not strictly required to update apps by building with a newer SDK from a technical requirement, but it also shouldn't break anything to do so and would ensure that any SDK bug fixes get built in. If there is a bug in the 6.4.0 SDK that is in your app then it won't ever get fixed until you build your app with a newer SDK that fixes the bug.

    So while it might make sense to update your apps for SDK updates it doesn't make sense to always update your apps for device firmware updates.

  • "Newer SDKs shouldn't be increasing memory usage for older devices except in rare cases, such as a bug fix"

    This is from years ago, but I could've sworn that memory usage as reported in the sim would sometimes be slightly higher after an SDK update, particularly for the oldest devices (CIQ 1/2) where memory limits were very tight (especially for data fields). Tbh I was never sure if this was a genuine increase or just a quirk of the sim. This was especially concerning since the newer SDKs did not have any updates for CIQ 1/2 devices (afaik) and those devices were no longer receiving firmware updates, meaning that it didn't seem possible for there to be any benefit to building for old devices with the new SDK (barring any bug fixes).;

    Nonetheless, due to that observation, I would often avoid updating to the latest SDK if I did not need to build for the latest devices.

    I think other devs have mentioned that they follow a similar policy for similar reasons.