• Connect IQ 3.1.9 SDK Release

    We've released Connect IQ SDK version 3.1.9, which includes additional device support. Get it on our developer site (https://developer.garmin.com/connect-iq/sdk) or install through the SDK Manager in Eclipse.

    Here is a list of the changes and updates:

    General Changes

    • Require MacOS 10.9 to run the simulator and Monkey Motion
    • Ensure navigation data angles are always in the proper range
    • Fix incorrect Eclipse plug-in link in the Getting Started section of the Programmer’s Guide
    • Fix datafield images in UX Guide Appendix
    • Add support for the Edge® 130 Plus, Edge® 1030 Plus, and the MARQ Golfer
    • Add support for Venu Mercedes-Benz® Collection
    • Fix issue causing y4m files to not be selectable as an alpha channel filter in the Monkey Motion UI tool
    • Set the conversion settings in the settings window when loading a .mmm using File > Load in the Monkey Motion UI tool
    • Prevent web request callbacks from being sent to the wrong callback
    • Update errors in documentation
    • Add Media.stopPlayback()
    • Add System.isAppInstalled()
    • Add Graphics.FONT_GLANCE_* enumerators for glance fonts
    • Fix an issue that would crash an app when receiving a JSON response that is too large to be parsed
    • Fix widgets not being able to access Position module when running as a Glance
    • Fix an issue that caused the Activity::Info::maxCadence to match averageCadence on many devices
    • Fix issue found in devices that support live glance updates where it can not support more than 4 widgets in the glance mode

    Simulator Changes

    • Enable simulator support for glances on the fr245, fr245m, and fr945
    • Fix an issue with the obscurity value for the top field in the four field layout on approachs62

    Compiler Changes

    • Remove compiler check on PRG size limits when building an app for RunNoEvil testing
    • Fix IQ file export bug, which can occur when exporting an app that has barrel dependencies that contain annotated subcomponents
    • Automatically generate an image palette of 256 colors or less for 16-bit color devices. This can be disabled by adding a automaticPalette attribute to the bitmap definition with the value “false”. Palette reduction for 16 and 64 color devices can be enabled by setting the value to “true”
    • Jun 26, 2020
  • Streamlining the Forums

    You'll see some changes happening around here in the next few days to help simplify things:

    1. We've merged the legacy bug reports forum into the Discussion forum. All of the old content is available, but this will drive any new bug reports to the bug reporting tool and avoid new reports getting lost on old discussion threads.
    2. We'll be merging the Q&A forum with the Discussion forum. Both "discussion" and "question and answer" type threads will be allowed, so you won't lose any capabilities or content - it'll just all be in one place.

    We're also making some minor tweaks to the layout and organization of the forum that will hopefully make things cleaner and easier to use.

    As an aside, there's one request we get fairly frequently: set the default ordering of the bug reports by date instead of by score. Unfortunately, there's not an option to do this (at least none that we've found), but if we discover a way, that may happen at some point. Until then, you can easily change the bug reports to order by date with the sort widget in the upper right area of the bug reporting tool:

    • Jun 12, 2020
  • Connect IQ Store 2.1 and Web Update

    The Connect IQ Store version 2.1 is now available on the Apple App Store and on Google Play. This version addresses the issues with the contact developer feature not including the user's email address, and also addresses longstanding issues with minimum firmware version of apps and updates. The web store front page has gotten a makeover as well, switching to match the mobile front page as well. 

    • May 29, 2020
  • Connect IQ Developer Award Winners

    The Connect IQ Developer Award winners have been announced! Congratulations to the winners!

    https://www.garmin.com/en-US/blog/general/2020-connect-iq-developer-awards-winners/

    • May 23, 2020
  • Garmin Developer Virtual Conference: What You Need to Know

    In February we posted about the Garmin Developer Summit with a promise of more information in the weeks to come. Since then, our global society has adopted new phrases like social distancing, exponential growth curves, and “can you see my screen?” This pandemic is changing how we live our lives and challenging us to evolve.

    During these unprecedented times, your apps and solutions are more important than ever in helping our users evolve their lifestyles and find new ways to beat yesterday.

    We want to inspire and enable you, our developer community, to continue pushing boundaries and making cool things but we also want to ensure everyone stays safe. With many regions and countries limiting public gatherings until the end of the year and the growing uncertainty for travel, it is imperative that the Garmin Developer Summit evolve for 2020.

    You, our developers, are part of our Garmin family. We value your contributions to the Garmin ecosystem and want to ensure you have the information and tools you need to keep innovating on our development platforms.

    With this in mind, we are excited to announce the Garmin Developer Virtual Conference.  Join us on October 14th for our first-ever virtual developer event. This live streamed conference will be your source of major announcements and information for the year ahead. presentations, participate in virtual breakouts and engage with our Garmin team in live Q&A

    Registration is free and will open in August.  More details to be posted soon on this forum and developer.garmin.com.

    • May 18, 2020
  • Connect IQ Store 2.0 and Developer Site Update

    We have some exciting announcements for the Connect IQ community:

    Connect IQ Store 2.0

    The Connect IQ Store 2.0 is rolling out now. The store has been redesigned from the ground up to be faster and easier to navigate, making it easier for customers to get your apps.

    Get the new store in the Apple App Store or Google Play.

    Developer Site Update

    The Connect IQ developer website has also been upgraded with several new enhancements. It now features a more efficient layout, as well as an updated compatible device page with valuable information on different Garmin devices.

    Check out the developer site now

    • Mar 31, 2020
  • Connect IQ 3.1.8 SDK Release

    We've released Connect IQ SDK version 3.1.8, which includes additional device support. Here is a list of the changes and updates:

    General Changes

    • Update minimum firmware versions for multiple APAC product variants.

    Simulator Changes

    • No Changes

    Compiler Changes

    • No Changes
    • Mar 19, 2020
  • Garmin Developer Summit: What You Need to Know

    Garmin Developer Summit: What You Need to Know

    For the past three years, we have hosted the Connect IQ Developer Summit at Garmin headquarters. The event brings together developers and Garmin partners from around the world for three days of Connect IQ announcements, networking, Kansas City barbecue, marathons and, of course, a gift box like no other. This year, we have an important announcement: it’s evolving.

    Here’s the deal: What we’ve learned over the past few years is that you are all wonderful people. Also, the ANT+ alliance members are wonderful, as are our Connect partners and our makers. Honestly, we think you should all meet each other.

    With that spirit in mind, this year will be the first-ever Garmin Developer Summit. The Garmin Developer Summit will combine Connect IQ, ANT+, Bluetooth® wireless technology, Garmin Connect API and all our developer programs. It will be a tremendous opportunity to gain knowledge from industry experts and make impactful connections that can help grow your business.

    To answer some of your questions:

    • It’s what you love about previous Summits — and more
    • Yes, there will still be barbecue
    • Yes, there will still be a marathon
    • Yes, the gift box will still be amazing

    GDS2020 will be October 14-16, 2020, at Garmin’s headquarters in Kansas City. We will be sending out additional details soon, so keep watching this forum or subscribe to our newsletter to learn more.

    • Feb 3, 2020
  • Connect IQ iOS Mobile SDK 1.4 beta 1

    We have published a new iOS Mobile SDK beta, used to build mobile companion apps for Connect IQ apps on iOS, with the following changes:

    • Package the library as an XCFramework
    • Removed stripSimulatorSlice.sh script
    • Enabled bitcode in framework

    This SDK can be downloaded from https://developer.garmin.com/downloads/connect-iq/sdks/ConnectIQ_iOS_SDK_1_4_beta1.zipIf you use this SDK and encounter any issues please post to the following thread with the details:

    https://forums.garmin.com/developer/connect-iq/f/discussion/213756/connect-iq-ios-mobile-sdk-1-4-beta-1

    • Jan 27, 2020
  • Bring Your App to Life with Animation

    Monkey Motion, the new animation feature available in Connect IQ 3.1, allows developers to import animated content into their Connect IQ apps. In this post we will discuss how to import an animation, how to use the new WatchUi.Layer to overlay content onto the animation, and best practices for using this new feature. Our end goal is to make a watch face with a little action when you check the time.

    Getting Started

    To begin with, make sure you have downloaded the Connect IQ 3.1 beta and plug in. We will create a project called DanceDanceGarmin in Eclipse. You can download the example on GitHub.

    Importing an Animation

    The Monkey Motion tool can be launched from the Eclipse plug-in.

    Clicking on Start Monkey Motion will open the tool:

    Monkey Motion accepts input from files in animated GIF or yuv4mpeg format. GIFs, a file format that is a millennial, has been used by users from the Compu-serve era to the messaging revolution. The yuv4mpeg format, which is far less known, is a very simple text-based raw format for video content. The advantage of the yuv4mpeg over GIF is that GIF will pre-palletize your colors, potentially lowering your import quality before it comes to Monkey Motion. If you care about such things, convert your content to YUV before importing, otherwise you can forget this paragraph and move on with your life.

    In our case we will creating a watch face with this GIF:

    In our case we want to download the higher quality MP4 version. As all good command line junkies we will do this with cURL.

    curl https://media.giphy.com/media/1BceylguiTgc94R5pq/giphy.mp4 > Dancers.mp4

    To convert to YUV, we will get the open source tool ffmpeg. ffmpeg is the Swiss Army knife of media file formats.

    ffmpeg -i Dancers.mp4 -f yuv4mpegpipe Dancers.yuv

    Let’s create an asset folder in our eclipse project, and have Monkey Motion put the output file there. We will also use the medium conversion quality, and use dancers as the resource identifier:

    The Monkey Motion tool will generate files for every device selected in the devices list and output a Monkey Motion Manifest (.mmm) file that maps which file maps to which product. It will also output a resource XML file in the output directory.

    When you click Generate Monkey Motion will churn and provide a viewer to watch the sample output:

    The MIP displays used by the Garmin wearables are limited to 64 colors, so color loss is expected.

    Monkey Motion and Monkey C

    Now that the animation has been converted, we want to have our project import it, so we add the asset path to our jungle file.

    project.manifest = manifest.xml
    
    base.resourcePath = $(base.resourcePath);asset

    This makes it a reference-able asset within your code.

    Connect IQ 3.1 introduces the WatchUi.Layer class. Layers are buffered bitmaps that can be stacked on top of each other within a View. During a screen refresh, layers will be combined behind on top of the View to compose the view. In our case, we want to have two layers.

    We will be using this animation logic for both the watch face and the goal view, so let’s put the animation logic in its own class, DanceDanceAnimationController. Creating the Animation from resources is very straightforward.

    // Initialize the Animation
    _animation = new WatchUi.AnimationLayer(
        Rez.Drawables.dancers,
        {
            :locX=>0,
            :locY=>0,
        }
    );
     

    Note that dancers is the resource identifier we provided to Monkey Motion. Now we want to create the overlay layer. Remember that the layer is a buffered bitmap, so the larger it is the higher the cost against your app memory. We’re going to make it large enough for a readable time, but not much larger.

    // Function to initialize the time layer
    private function buildTextLayer() {
        var info = System.getDeviceSettings();
        // Go for 60% width x 30% height. 
        // Word aligning the width and height for better blits
        var width = (info.screenWidth * .60).toNumber() & ~0x3;
        var height = info.screenHeight * .3;
    
        var options = {
            :locX => ( (info.screenWidth - width) / 2 ).toNumber() & ~0x03,
            :locY => (info.screenHeight - height) / 2,
            :width => width,
            :height => height,
            :visibility=>true
        };
    
        // Initialize the Time over the animation
        var textLayer = new WatchUi.Layer(options);
        return textLayer;
    }

    Let’s add the two layers to the view.

    view.addLayer(_animation);
    view.addLayer(_textLayer);

    Now it’s time to draw, um, the time. Rather than setting values in Drawable objects, we will draw the time directly onto the Layer using direct calls to the device context.

    // Update the view
    function onUpdate(dc) {
    	// Clear the screen buffer
        dc.setColor(Graphics.COLOR_WHITE, Graphics.COLOR_WHITE);
        dc.clear();
        // Update the contents of the time layer
        updateTimeLayer();
        return;
    }

    Now, let’s play our animation. We’re going to keep a state variable that keeps track of if we’ve already started playing our animation.

    function play() {
        if(!_playing) {
            _animation.play({
                :delegate => new DanceDanceAnimationDelegate(self)
                });
            _playing = true;
        }
    }
    
    function stop() {
        if(_playing) {
            _animation.stop();
            _playing = false;
        }
    }

    DanceDanceAnimationDelegate is a subclass of WatchUi.AnimationDelegate that calls stop once the animation completes playback.

    class DanceDanceAnimationDelegate extends WatchUi.AnimationDelegate {
        var _controller;
    
        function initialize(controller) {
            AnimationDelegate.initialize();
            _controller = controller;
        }
    
    
        function onAnimationEvent(event, options) {
            switch(event) {
                case WatchUi.ANIMATION_EVENT_COMPLETE:
                case WatchUi.ANIMATION_EVENT_CANCELED:
                    _controller.stop();
                    break;
            }
        }
    }
    

    Finally, lets trigger our playback on onExitSleep of our watch faces. This will start the animation whenever the user gestures to read the time.

    // The user has just looked at their watch. 
    // Timers and animations may be started here.
    function onExitSleep() {
         _animationDelegate.play();
    }
    

    Add Life to Your Apps

    Monkey motion makes it possible to add visual sizzle to your Connect IQ apps. Now you can create animations using your favorite tools, import them into your project, and have them play when you want. 

    • Nov 22, 2019