I encountered an unexpected result in my latest release: the build generated output for 166 devices, despite my manifest specifying only 90. Curious, I delved into the reason behind this discrepancy.
This might be well-known to experienced developers, but it was a new and interesting discovery for me, and I wanted to share my results.
It turns out the answer is tied to the structure of the Connect IQ device files. On macOS, these files reside in ~/Library/Application Support/Garmin/ConnectIQ/Devices
, with each supported device (144 in total) having its own directory. Inside each directory, the compiler.json
file, a substantial JSON object, guides the compiler and simulator.
This file contains device identifiers, including deviceID
(matching the manifest.xml, e.g., venu3s), WorldWidePartNumber
(e.g., "006-B2337-00"), and partNumbers
. Each partNumber
entry specifies a firmwareVersion
(e.g., 500), which seems to determine font language support.
Therefore, for each device listed in the manifest, the build produces a separate bytecode file for every firmware version defined in compiler.json
. The variation in firmware versions per device, from one to seven, is likely related to hardware differences.