My past experience with MCU's has used proprietary programmers which remove technical understanding, so I apolagize if this sounds simple.
We're planning on using an in-house programming system to lower costs. We plan on having the chips boot from I2C flash memory. If I understand it correctly, we should take our code, compile it using the ARM GCC toolchain for the M0+ architecture to get the binary file and convert to a hex file. We then take that hex file and copy it verbatim to our I2C flash memory. No additional headers, no unused flash, just a straight copy starting from address 0 in the flash. Whatever the GCC spits out is proper machine-readable code?
That's what makes sense to me, but you have much more wisdom and experience in this realm, so I would love to know anything that doesn't sound right about this approach to you.