Watches' stated API Level on webpage is different in compiler.json

According to this web page

https://developer.garmin.com/connect-iq/compatible-devices/

The VA4S (for example) states its API Level is 3.3.0 but when I export the project, I get a message

WARNING: Device name: 'vívoactive® 4S' Part number: '006-B3387-00' CIQ ver: '3.2.6' is being ignored by the package tool because it does not support the minimum API Level set for this project

Why state a API Level on that page that will not be honored by the compiler for some part number of that same model? Shouldn't they use the lowest common denominator? Why is that part number ignored?

I have many warning like these for many models. Am I back to the drawing board if I want these to be included as well? Sucks because I was about to release a new version I've been working on for the past two weeks. I wanted to leverage the getSunrise/getSunset from the Weather module which according to the doc is for 3.3.0 and above.

  • WARNING: Device name: 'vívoactiveRegistered 4S' Part number: '006-B3387-00' CIQ ver: '3.2.6' is being ignored by the package tool because it does not support the minimum API Level set for this project

    As per compiler.json, that part number corresponds to the APAC (Asia-Pacific) model of Vivoactive 4S, as opposed to the WW (worldwide) version. (You can tell by the languages/fonts, and also the value corresponding to the worldWidePartNumber key.)

    At least for older devices, APAC firmware is usually older than than WW firmware (unfortunately). This situation may be different for some newer devices.

    So in your case, your app will not be available for APAC models of VA4S.

    Why state a API Level on that page that will not be honored by the compiler for some part number of that same model? Shouldn't they use the lowest common denominator?

    They probably state the WW API level on the page you linked, as opposed to the lowest common denominator, because:

    - Garmin typically takes forever to update APAC models (CIQ 3.3 was released over a year ago, but VA4S APAC is still on 3.2.6.)

    - the focus is on WW models since Garmin is an American company and the bulk of their sales is probably WW models

    Why is that part number ignored?

    Because the setting is called *minimum API level*. Logically, if I ask for a minimum API level of 3.3.0, I don't want to include 3.2.6. Regardless of whether the min API level setting is helpful or well designed, its effect is logical.

    Min API level has other issues, when it comes to the fact that 3.x and 4.x are parallel firmware tracks as far as new features go. e.g. "System 6" means CIQ 4.2.* for CIQ 4 devices and 3.4.* for CIQ 3 devices, which means that there's no way to use Min API level to include only System 6 devices and exclude everything else. e.g. If you specify a min api level of 3.4, you'll incorrectly include devices with 4.0 and 4.1 firmware. If you specify a min api level of 4.2, you'll incorrectly exclude devices with 3.4 firmware.

    Same goes for System 4 and System 5, as well as any future conceivable "System X" release, unless CIQ 3 gets left behind at some point.

  • In the device's compiler.json notice that 3.2.6 is for the APAC part number.  3.3.1 is for the ww part number.  What you see in compatible devices is for the ww devices.

    When you build an iq, the ww part number is included.  The APAC one is rejected.  Set your min api to 3.2.x and it will include both.

    APAC devices are often behind the ww devices when it comes to stuff like CIQ.  All my apps have a min API level of 1.2, and I exclude target devices that don't have what I need or use "has"  in my code

  • Thank you both for the quick response. I did check the region for that 4S before posting (should have stated that) and as can be seen, it does seem to include WordWide version

    "connectIQVersion": "3.2.6",
    "firmwareVersion": 620,
    "languages": [
    {
    "code": "eng",
    "fontSet": "ww"
    },
    {
    "code": "ind",
    "fontSet": "ww"
    },
    {
    "code": "zsm",
    "fontSet": "ww"
    },

  • Look further down that same list.  You'll see

                        "code": "zhs",
                        "fontSet": "apac_chn"
                    },
                    {
                        "code": "zht",
                        "fontSet": "apac_twn"
                    },
                    {
                        "code": "jpn",
                        "fontSet": "apac_jpn"
                    },

    A clear indication of an apac device.

  • Also:
    "worldWidePartNumber": "006-B9998-00"

    When I said "you can tell by the languages/fonts", I should've been more clear:

    - WW watches typically have more languages than APAC watches, and all the fonts/languages are WW

    - APAC watches typically have fewer languages than WW watches. Some of the fonts/languages are WW and others are APAC

    TL;DR APAC watches have support for APAC languages/fonts and WW watches don't. WW watches also have support for more Western languages than APAC watches. I think the reason for this is to conserve storage space.

    Every now and then you'll see a post in the forums from someone who lives in Asia and accidentally bought a WW watch, about how their watch doesn't show Asian characters.

    But you can also look at worldWidePartNumber.