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.





