Is it possible to change the app type of a released app?

I released an app on the CIQ store as an Device App and now realized it should have been a Widget so it supports glances on older devices, Is it possible to change the app type without submitting a new app and losing your downloads and reviews?

  • Since the result for newer devices is identical, I actually think it does make sense to allow changing from a device app to a widget if your app doesn't use any APIs not available for widgets. I filed this issue as a feature request, do you think that makes sense or do you think my use case is odd?

    I think it makes sense, but I kinda doubt it will happen. It's kind of an edge case (same as the thing I mentioned about how old widgets with no getGlanceView() will no longer have a default glance view once they're ported to CIQ 4+ devices).

    I also wish there was a way to have a device app which is *not* available in the app launcher for new devices, but only as a glance. Yes, I realize this would be like bringing back the widget app type, except I wouldn't mind if the app type was still "watch-app" / device app in this case. As a compromise, there could just be a flag in the manifest which says "hide from app/activity list" or something like that.

    My reasoning is that there are some apps which only make sense as glances (and not as "full apps"). There are plenty of native Garmin glances which aren't available from the app launcher (like most of the glances that display activity tracker info).

    In general I like the "super app" functionality (where device apps and widgets have been merged), I just think there's a few edge cases which aren't covered.

    (Also worth noting that end users and reviewers like DCR absolutely still think in terms of apps and widgets, even if widgets technically don't exist anymore.)

  • But even then it's better to use: https://developer.garmin.com/connect-iq/api-docs/Toybox/Communications.html#openWebPage-instance_function that works on all devices from 1.3.0 (which IMHO is all but epix) than QR code.

    I still don't understand. Though IMHO you made a mistake here:

    3rd app = device app for (old devices)

    You mean device app for NEW devices?

    Either way, I wouldn't have added a 3rd app with the same device type I already had. Would;ve just used the 1st app for the new functionality, and still would not compile the 2nd app for new devices if there's the 1st (or 3rd) for them. That makes absolutely no sense. The only reasoning so far was to help uploading, but that that is nonsense, since old devices won't be able to upgrade to the new app, and new devices shouldn't need to see the widget in the 1st place, since they already had the 1st app that knew everything (and could know even things that were added in the 3rd app)

    I know 2 relatively reasonable developer strategies:

    1. new app for "every device" (you can divide it differently as well) => lot of work maintaining them

    2. 1 app for all => a bit more work to maintain the code, but then you upload it only once, and the bonus is that all the download numbers count towards the one and only app (less important since we only see 10k+)

    This widget vs device app is an edge case, which makes it impossible to have 1 app for all, but then it should just be 2 apps for all, but only one app for every device, not 2 and certainly not 3.

  • I have widget type apps I started in 2015, where I added backgrounding and getGlanceView when those was introduced, and now publish complications on devices that support support them.  I use jungles for complications as an extra xml file is needed, but not really for any other devices

    The app type in the manifest is still a widget, and I support most devices back to the original ones (not the epix1) to the latest.  Only one app in the store for each of the different "widgets" so easy to support

    One thing to keep in mind if changing a device-app into a widget, isn't just the API, but for example, on pre-glance devices, what can be used for input in the main view is limited.  No up or down for example.  You also can't pop the main view to exit, or use System.exit().

  • But even then it's better to use: https://developer.garmin.com/connect-iq/api-docs/Toybox/Communications.html#openWebPage-instance_function that works on all devices from 1.3.0 (which IMHO is all but epix) than QR code.

    That's another option, yeah. But it won't work if the device isn't connected to Connect via bluetooth. The dev could always check whether a bluetooth connection is available - if so, they could use this option, otherwise they could either prompt the user to connect or display a QR code.

    I still don't understand. Though IMHO you made a mistake here:

    3rd app = device app for (old devices)

    You mean device app for NEW devices?

    Yeah I was probably wrong. Here's my original reasoning:

    I released an app on the CIQ store as an Device App and now realized it should have been a Widget so it supports glances on older devices, Is it possible to change the app type without submitting a new app and losing your downloads and reviews?

    I did end up having to upload a new Widget app to the store and add a QR code with a link to the new app that shows when you open the old app.

    Ironically enough i had to upload yet another version later because i needed some Device App functionality back in the app, but now i have both a App and Widget version with different capabilities.

    "I needed some Device App functionality back in the app" seems to refer to old devices.

    My reasoning was that the new widget app (the 2nd app) will be built as a device app for new devices, which means that any required "device app functionality" (like activity recording) for new devices can be added in the 2nd app (of course it should be conditional on the app actually running on a new device).

    But actually I don't think this is possible in practice, due to the requirement to set permissions in the manifest for features like activity recording.

    I tried adding the Fit permission for activity recording (only available to device apps) to an app of type widget, and it compiles for fr955 (CIQ 4+, super apps) but not for fr935 (CIQ 2, real widgets).

    <iq:permissions>
        <iq:uses-permission id="Fit"/>
    </iq:permissions>

    The error for fr935 is:

    ERROR: fr935: The following permission is invalid for app type 'widget': 'Fit'
    ERROR: Error occurred while reading application manifest file.

    This is further proof that apps of type widget are actually built as watch-app for newer devices.

    However, since permissions can't be set on a per-device basis afaik, it seems like it would indeed be impossible to create an app of type widget that supports both old devices and new devices, with certain features that only work on device apps.

    So I'll amend my statement to guess that I think the 3rd app is a device app that provides device app functionality to new devices, and possibly for old devices as well. Whether it's intended for old devices depends on whether the 1st app only redirects users of old devices to the 2nd app, or whether it also allows the these users to continue using the app.