Config

AppBuilder Errors/Crashes

If AppBuilder displays the "IQ!" logo or a message with "!" (such as "!Name"), please refer to the troubleshooting section.

Older CIQ1 Devices vs Modern CIQ 2 Devices

Some features are too complex for older devices which don't support Connect IQ 2 and have half the available memory of newer devices. These CIQ1 devices are:
  • FR230/235, FR630, FR920XT, Vivoactive, Fenix 3 (HR), D2 Bravo (Titanium), Quatix 3, Tactix Bravo
[CIQ2] means that a feature is supported on all devices except those listed above.

App Configuration

AppBuilder is configured through the Garmin Connect Mobile app on iOS/Android, or Garmin Express on PC/Mac. Here's a quick tutorial on the Garmin forums.

AppBuilder Options

  • Label: the data field label. e.g. "Cadence (1 leg)"
  • Formula: the math formula used to calculate the data. e.g. "Cadence / 2"
  • Display Format: how your data will be displayed: e.g. Number ("310") or Time ("5:10")
  • Record Data to FIT File:  saves formula result to the FIT file, so you can see your data as a graph in Garmin Connect.

  • FIT recording is disabled by default, and takes additional device memory. If a formula crashes with an !IQ error (out of memory), you may need to disable FIT recording.

    [CIQ2] CIQ2 devices also support recording data to the lap data (e.g. lap average cadence) and summary (e.g. average cadence).
    • The label will appear in the summary
      NOTE: The Garmin Connect website has a long-standing bug which incorrectly displays the label as "0". You should be able to see the correct label on the Garmin Connect Mobile app.
    • The current value will be automatically recorded to the activity graph. Use the record(value) function to choose your own data to record (e.g. current power). Use the norecord() function to disable automatic recording to the graph
    • Use recordsummary(value) to record a value to the summary data (e.g. maximum power)
    • Use recordlap(value) to record a value to the lap data (e.g. lap average power)
    e.g. Record max HR to summary, record lap avg HR to laps, and record current HR to activity data, while displaying current HR:
    recordsummary(max(hr)) ; recordlap(lapavg(hr)) ; record(hr)

    e.g. Record max HR to summary, don't record anything to the activity data, display current HR:
    recordsummary(max(hr)) ; norecord() ; hr

    Note for advanced users: CIQ1 devices don't record the label to the summary, to save memory, but all versions of AppBuilder will set the internal FIT field label to "AppB:YOURLABEL". You can't see this in Garmin Connect, but if you download the original file, you can open it in Notepad or TextEdit and search for "AppB". (This will be a little messy, so I recommend using the FIT SDK FitToCSV tool to look at FIT files.)
On newer CIQ2 devices, AppBuilder 5 supports four configuration profiles (label, formula, etc.)
  • Select Profile: choose one of four profiles to use.
    Select Auto if you would like AppBuilder to automatically select a profile based on the sport: running, cycling, swimming or other. This works on devices which have sport-specific HR zones.
  • Quick Profile Select Hotkey: this setting controls the hotkey used to enter profile selection mode, on the watch. Enable the hotkey if you want to select profiles directly on the watch.

AppBuilder 5 versus Classic

The original AppBuilder Classic app is now in maintenance mode. It won't change, so all of your existing formulas will continue to work. AppBuilder 5 has some useful new features for both modern and CIQ1 watches, such as user variables and switching between formulas only using the watch.

For older CIQ1 devices, AppBuilder 5 still has new features but not as many as modern devices (e.g. multiple profiles are not supported).

[AppBuilder5] means that a feature is supported by AppBuilder 5 and not Classic.

Quick Overview

The formula you configure and all the variables/functions in it are evaluated once per second, unless otherwise noted.

e.g. How fast could I be running if I max out my heart rate (assuming my max is 195)?
195 / hr * speed
This will display your "max heartrate-adjusted speed", calculated once per second.
(Okay, I'm sure the actual formula is more complicated...)

e.g. Maximum speed during activity:
max(speed)
This shows you the highest speed that is seen during the activity (sampled once per second).

e.g. Number of seconds (amount of time) spent sprinting (running faster than 16 km/h -- assuming device speed units are set to km)
sum(speed gt 16)

This works because:
- The formula is evaluated once per second
- "gt" (greater than) returns 1 if the condition is true, and 0 if the condition is false
"speed gt 16" would display 1 whenever you are sprinting and 0 when you are not.
"sum(speed gt 16)" adds up all those 1s and gives you your total time sprinting.

Display Formats

  • Auto: Decimal or number
  • Decimal: 2 places. e.g. 90.12
  • Number: no decimals. AKA "Integer". e.g. 90
    Values are rounded to the nearest integer
    e.g. 90.49 rounds to 90
    90.5 rounds to 91
  • Pace: displays speed (distance/hour) as pace (minutes:seconds/distance).
    e.g. 12 km/h becomes 5:00 (/km). 8 mph becomes 7:30 (/mi)
    (Note that the distance units are irrelevant. Any distance/hour becomes minutes/distance.)
  • Time: displays seconds as hours, minutes and seconds:
    e.g. 310 seconds becomes 5:10
    3710 seconds becomes 1:01:50
    7200 seconds (2 hours) becomes 2:00:00
  • Time2: displays seconds as minutes and seconds:
    e.g. 7200 seconds (2 hours) becomes 120:00
    NOTE: CIQ1 devices can use this option on AppBuilder Classic, not AppBuilder 5.
If Record to FIT file is enabled, the value recorded in the activity graph/summary is unaffected by the display format.

Switching between formulas [AppBuilder5]

AppBuilder 5 has four configuration profiles. A profile can be selected directly on the watch, without using a phone or computer.

Selecting profile for single field

  • In the app settings, set the Quick Profile Select Hotkey to "Double-click START once"
  • Select a sport with AppBuilder on a data page
  • Double-click the START button before the activity starts — or within the first 10 seconds — to enter "configuration mode".
    If the timer is now paused, AppBuilder will display "Press START".
    Press START to start the timer.
  • AppBuilder will display the profile number and label: e.g. "1:AppBuilder"
  • Press LAP repeatedly to switch profiles
  • Double-click START to save your changes.
    AppBuilder will display "Cfg Saved"
  • Discard the activity

The next time you start an activity with AppBuilder, your new profile will be in effect.

If you accidentally entered config mode or you want to lose your changes:

  • Discard the activity without double-clicking START
    or
  • Double-click START again, without selecting a new profile. AppBuilder will continue as if nothing happened.

Selecting profile for multiple fields

If you have multiple AppBuilder fields in the same activity, you can configure them in sequence by changing the Quick Profile Select Hotkey for each one. e.g. Suppose you have 3 fields — we'll call them A, B, and C

  • Set A's hotkey to "Double-click START once"
  • Set B's hotkey to "Double-click START twice"
  • Set C's hotkey to "Double-click START 3 times"
  • When you want to change the profiles for one or more fields, start the activity containing those fields
  • Double-click START before the activity starts, or within 10 seconds after it starts
  • Field A will display "Press START" (if the timer is not running), or the profile number and label (e.g. "1:AppBuilder"). Press START to start the timer, if necessary
  • Press LAP repeatedly to change A's profile. (If you don't want to change A's profile, don't press LAP — skip to the next step.)
  • Double-click START to save any changes to A's profile. (If changes were made, A will display "Cfg Saved", otherwise A will return to normal). This will also enter B's config mode
  • Repeat the above for B. When you double-click START to save B's changes, that will also enter C's config mode.
  • Repeat the above for C.
  • Discard activity when done
You can configure up to 4 fields independently in this manner (which is more than limit for most devices.)
The first double-click can come any time before the activity starts, or within 10 seconds after the timer starts. The next 3 double-clicks have to come within five minutes of the start of the activity.
(I'm open to suggestions on how this whole process can be improved. I want there to be some sort of time limit, because I don't want this feature being triggered in the middle of a long run or a ride, because your AppBuilder fields will be unusable after you change their profiles, until you restart the activity.)

Troubleshooting

Formula Issues

The data field will display an error if it found an issue with your formula. You can validate your formula before entering it into app config.
  • !Name: Unknown/misspelled variable or function (e.g. "timmer" instead of "timer"). Or, you used a variable not supported by your device (e.g. power, distanceToDestination).
  • !Syntax: Syntax error (e.g. "10 / 2 -"), or a function has too few arguments.
  • !Args: A function has the wrong number of arguments, or there are missing/mismatched brackets in the formula
  • !AdvFn: Formula contains a function which is unavailable on older devices
  • !AdvVar: Formula contains a variable which is unavailable on older devices

IQ! Errors

If an IQ! logo is displayed, the field has crashed because it ran out of memory or took too long to process the formula. This is especially an issue on older CIQ1 devices. You can try a few things to simplify your formula:

  • For newer devices (Edge, 645 Music, Fenix 5X, Fenix 5 Plus), converting your text formula to code will allow AppBuilder 5/5+ to use longer/more complicated formulas
  • Disable FIT file recording
  • Reduce number of samples to timeavg(). Anything much more than 100 will probably not work on older devices. For very large samples, consider using an approximation
  • Use ifs() instead of if()
  • Use find...() instead of ifs()
  • Eliminate duplicate parts of your formula with user variables: getv() / setv()

Known Issues

- Unfortunately I originally defined Distance, Speed and Altitude so that the units come from your device settings, which means that the same formula can have different results depending on your device units. This is not convenient if you want to share your formula with others.

This normally works okay, but it makes things complicated in some cases. If you need to combine distance, altitude, or speed with any other variable in the same formula, it might be better to use raw units, which never change.

- Memory is a little tight on older CIQ1 devices, so certain not-unreasonable formulas can crash the app. E.g. "Distance to next milestone" with 40 checkpoints, or timeavg(X, 300).

- WHEN() is defined awkwardly. It should probably use debouncing instead the current "enter/exit" thresholds

Resolved Issues

In the past, Garmin Connect Mobile for iOS had some issues with certain symbols such as +, < and >. It also had some issues accepting formulas containing words like IF and ALERT. These issues should be resolved by now, but in case you are still having trouble:
- Use PLUS instead of +
- Use EQ, GT, LT, etc. instead of =, >, <, etc.
- Configure on Garmin Express (PC/Mac) or use an equivalent formula:
  • IF(X, Y, Z) is the same as IFS(X, Y, 1, Z)
  • IF(X, Y, null) is the same as IFS(X, Y)
  • ALERT(X) is the same as WHEN(X, 1, 1)
  • ALERT(X, Y) is the same as WHEN(X, 1, 1, Y)
  • ALERT(X, Y, Z) is the same as WHEN(X, 1, 1, Y, Z)

Comments