Forced to build with SDK 8.1.0?! Compatibility issues?

I was building with SDK 7.4.3. just fine, including building for the Fenix 8.

But than I opened the SDK manager and it started updating everything, devices and SDKS.

Without changing anything all of a sudden my builds are not working anymore: 

java -Xms1g -Dfile.encoding=UTF-8 -Dapple.awt.UIElement=true -jar c:\Users\michael\AppData\Roaming\Garmin\ConnectIQ\Sdks\connectiq-sdk-win-7.4.3-2024-12-11-90ec25e45\bin\monkeybrains.jar -o c:\Users\michael\Desktop\GarminTesting.prg -f c:\Users\michael\Documents\GitHub\GarminTesting\monkey.jungle -y c:\Users\michael\Documents\GitHub\GarminTesting\developer_key -d fenix8solar51mm -w

-> Now results in 

"ERROR: Device 'fenix8solar51mm' requires API Level '5.1.0'. The current SDK supports up to API Level '5.0.1'. Try updating your SDK using the Connect IQ SDK Manager."

Before the SDK (manager) updates it was working fine, including building for Fenix 8. Now all of a sudden it seems Fenix 9 requires API level 5.1.0 which requires SDK 8.1.0. The only way I get it working again is when i set 8.1.0 as my current SDK. But this SDK is only 1 month old. I always lived in the assumption to built with oldest SDK possible, so make sure that the app can be installed on devices that didnt have recent firmware updates. If I now built with 8.1.0 and release to the Connect IQ store, what are the risks? Could it be that many people can't install/update the app yet?

And how can an update of the SDK / SDK manager break my built? 

  • In other words: is it safe to built with the latest SDK? Because I always lived in the assumption I should built with older SDK to ensure compatibility with not up-to-date devices

  • The device files for System 8 devices now have a CIQ version of 5.1.0, which requires a System 8 SDK - which is 8.1.0 today.

    I moved to 8.1.0 as soon as it came out.  Unless there is a "blocker" I always use the latest SDK,  And I've had no trouble with it.

    The device themselves now have FW with 5.1.0, and if a user hasn't updated their FW, they should be told to do so to install apps built with the new device files.

    Long story short, is to build for the devices that are now System 8, you want to use the 8.1.0 SDK

  • For that you "shouldn't" update the devices, but that will sometimes cause you different issues.

  • Thanks. Yeah the update happened automatically.. 

  • Yeah my app supports e.g. Fenix 8, which now means that after updating the devices I have no other choice than to use SDK 8.1.0.. Preferably I would not do that, because I don't want to cause problems for the many users that are probably not up to date with their watch. Or can users that are not up-to-date still install 8.1.0 built apps as long as the minimum API level is lower than the API level of the watch? Just afraid that if I release this, many of the users wont be able to install the app.. off course they can update the device, and than update the app, but ideally I don't want to force my users to run firmware updates first

  • You'll find that users with things like a 955,965,f8, etc probably have the latest FW.  Updating the SDK may have fixed issues, in fact.

  • Yeah, I think every developer has that at the beginning, until they grow up and understand it's not a good idea. You should set SDK Manager Update, SDK Updates (though that is not a big deal, there you can always switch back) and Device Updates to "Notify Me"

  • Or can users that are not up-to-date still install 8.1.0 built apps as long as the minimum API level is lower than the API level of the watch?

    Unfortunately not. The store will impose a minimum firmware version check on real devices that's not based on the version of SDK you built with, or the minimum API level in manifest.xml [*], but the device files you built with. If the user doesn't have the minimum CIQ / firmware version specified in the device file when your app was built, they will be unable to install your app (or update to the newly built app version).

    Each device configuration (e.g. connectiq/devices/fr955/) contains a file (compiler.json) with a list of part numbers. Each part number has minimum versions specified by the values of the connectIIqVersion and firmwareVersion keys. These values are written to application manifest file in the IQ package that's created when you run Export Project.

    e.g. the sole part number for the fr955 device now has a connectIqVersion of "5.1.0" and firmwareVersion of 2222 (which means 22.22).

    - This means that if you build an app for fr955 today (with the updated device file), FR955 users who don't have at least firmware 22.22 will be unable to update/install it.

    If they try, the Connect IQ store will tell them they need to update their firmware. Of course, it's implied that FR955 firmware 22.22 supports CIQ 5.1.0.

    - This means that no SDK compiler without support for 5.1.0 will build for fr955.

    You can see what CIQ versions are supported by a compiler by looking in SDK_ROOT/bin/compilerInfo.xml and looking at the incorrectly-named targetSdkVersions list. Note that compilers before SDK 7.2.0 did not handle this check properly - they incorrectly assumed they can build for any CIQ version greater than or equal to their own version number, which is why the ancient SDK 6.4.2 thinks it can build for CIQ 5.0, which came out much more recently.


    [*] Regarding the minimum API level in manifest.xml, this serves to exclude devices/part numbers at export time, not at the time the user tries to install the app.

    Meaning if you specify a minApiLevel of 5.1.0 (for example) and export your project, any devices/part numbers which do not support at least 5.1.0 will be excluded from the IQ file (you should see a warning about this.)

    This does have serious implications for older devices, which often have one "main" part number for WW (worldwide) devices and one part number for APAC (Asia-Pacific) devices. For these devices, the APAC part number in the device file often has a lower connectIqVersion than the WW part number, so if the minimumApiLevel is too high, APAC part numbers could be unwittingly excluded from the export. Even worse, sometimes the real APAC device is up to date (with newer ciq version), but this fact isn't reflected in the corresponding device file (which has an older ciq version).


    On a related note, I opened a "feature request" asking the CIQ team to clarify exactly why these strict version checks are absolutely necessary (I understand the reasoning, but I wanted to hear an official response from the CIQ team.) Long story short, they don't think it's a good idea to try to build newer device configurations with the older SDKs. They did concede that it would be ok if you could somehow obtain the *old* device configuration. However, they noted there is no currently way to distribute old device configurations, and asked for possible use cases.

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

    - 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 they perceive other risks/harm to using a new SDK, such as increased memory usage

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

    Ofc, from Garmin's POV, they *want* devs to use the latest SDK (due to bugfixes and new features) and they *want* users to update their firmware (for the same reason). Another conceivable reason is that it makes support a lot easier for them (ha, here I am acting like there's Garmin support for CIQ apps other than "try uninstalling all CIQ apps", which is something that users are often told when they report general issues, like increased battery drain.)

  • Here's the "feature request" post with several replies from Richard.ConnectIQ which attempt to explain the CIQ team's rationale behind the version checks for devices:

    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

  • I would like to reduce the problem to a simple question:
    A data field is now on store for Edge 1030 up to Edge 1050 (build with 7.4.3).
    What does it mean for Edge 1030 when the datafield was rebuild now with 8.1.0?
    (An Edge 1030 will never get CIQ 5.1.)