Is there a way to access a USB-serial port by the device id, not by the tty.* port? On linux USB-serial devices create two aliases to its serial port:
/dev/tty* and /dev/serial/by-id/&lt;my_usb_device_id&gt;

Is there a way on OSX to identify a serial port by the USB device id? Both in System Profiler and using ioreg -p IOUSB I can see the id, but that doesn't get me any closer to connecting using that id.

We're developing several pieces of hardware and it's a pain to test them as every time I connect a different device I need to verify the serial port configuration of the testing software, because on OSX the tty.* port name depends on the port on my computer, not on the device. The guys running linux are happily using the /dev/serial/by-id/&lt;my_usb_device_id&gt; port to automatically distinguish between the different devices.
Actually, you should be able to find the mapping from device ID/serial number to serial port name using ioreg. Try this command:

ioreg -r -c IOUSBHostDevice -l


It will print all the USB host devices, and it will print out all properties from the subtree of each device. You should be able to find your device on the top level based on its ID or serial number. Once you've found it, you should be able to scan through its subtree, and eventually find an object of class IOSerialBSDClient. This will contain the property IODialinDevice which is what you want.

If you then want to do this programmatically, you could add the -a option to the ioreg command, which will output a plist version of the above output. You could then parse this with a library such as plistlib.

You might find it helpful to use the IORegistryExplorer app to help visualise this, as the full ioreg output is slightly difficult to read! This is available in XCode's "Hardware IO Tools" package which you can find by searching the downloads on the Apple developer site. Here's what it looks like on my device: