Device SDK level - which source is correct?

I took the SDK manual as source for checking the current SDK level:

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

It says as example, D2 Charlie has SDK 3.0.0

But the compiler states, it has only 2.4.1:
WARNING: Device name: 'D2Tm Charlie' Part number: '006-B2994-00' CIQ ver: '2.4.1' is being ignored by the package tool because it does not support the minimum API Level set for this project

What is correct? Installed SDK is the newest one. All device definitions are up to date - no updates available.

There are some other devices with a similar error.

Device             compiler statement            SDK manual

D2 Chalie      2.4.1                                       3.0.0
Oregon 7        2.2.3                                      3.0.0
Rino 7             2.4.1                                      3.0.0
Edge 820       2.4.1                                       3.1.0
Edge 1000     2.4.2/2.4.1 (different part nr?)  2.4.0
Edge 520       2.4.4/2.4.1 (different part nr?)   2.4.0

  • The part numbers for the D2 Charlie with ciq 2.4.1 is APAC.  World Wide is CIQ 3.0.0.  So when you build an IQ file, it is building for the World Wide version but not the APAC version with your minimum API level.

    If you want to support the APAC version you need to move to a lower API Level, and protect you app with something like "has"

    What you're seeing is the SDK Manual only talks about the WW CIQ Level, not the APAC level.

  • Many thanks, I didn't know that are different versions with different SDK levels.

    I use 2.4.0 now as minimum level and check with :has for some thing wich could not existe like background, menu2, textarea. Looks good in simulator :-)

  • Hi Jim, another question about has-check...
    I get this error on export:

    ERROR: Menu2 is not supported by device 'd2charlie'.

    The menu is includes using XML

    <menu2 id="flowMenu" title="@Strings.FlowMenuTitle">
        <toggle-menu-item id="enabled"
            label="@Strings.FlowMenuEnabled"
            subLabel="@Strings.FlowMenuEnabledSubEnabled"
            disabledSubLabel="@Strings.FlowMenuEnabledSubDisabled"
            checked="true"/>
    </menu2>

    Before using it, I check with has:

            if (Toybox.WatchUi has :Menu2){
                var menu = new Rez.Menus.flowMenu();

    But it seems, the compiler is checking the resource and throws an error. Is in necessary to create the menu at runtime?

  • In apps, I typically do create the menu2 at runtime, so never checked. That way it is also easier to set the state/subLabel