After we moved to macOS 27, IAC buses we had added in Audio MIDI Setup kept quietly disappearing.
It turned out that when both of these are true, macOS 27 can no longer save Audio MIDI Setup’s configuration file (.mcfg):
- you have created a configuration in Audio MIDI Setup, and
- a connected USB MIDI device reports a port name that contains a NUL character.
Because the file is never saved, every time MIDIServer starts again your setup goes back to the last version that was saved. IAC buses you added come and go, and devices you removed come back. Without such a device, the file is saved normally and nothing is lost. macOS 26 saved the same file without trouble. We have reported this to Apple.
How we noticed
We were actually chasing a different problem. After the update, Audio MIDI Setup stopped showing the output ports of a USB MIDI interface. Removing the setting that caused it brought the ports back, until MIDIServer restarted and everything went back the way it was. Adding an IAC bus behaved the same: it vanished after a restart. Then we looked at the configuration file’s date. It had not changed once since the macOS 27 update.
MIDIServer quits by itself when no app is using MIDI and starts again when one needs it. So these restarts happen without you noticing, and the changes seem to “disappear after a while.”
The cause: an invisible NUL character
macOS keeps the MIDI setup in two places:
~/Library/Preferences/ByHost/com.apple.MIDI.<host UUID>.plist, a binary property list that is updated as you make changes;~/Library/Audio/MIDI Configurations/<name>.mcfg, the configuration you created in Audio MIDI Setup, an XML property list.
When a configuration exists, the setup returns to the contents of the .mcfg file each time MIDIServer starts, and the ByHost file is overwritten with it. Normally the .mcfg file is kept up to date as well, so this does no harm.
The catch is that some USB MIDI devices report port names with a NUL character (\0) at the end. An XML property list cannot hold NUL characters, and on macOS 27 MIDIServer gives up writing the .mcfg file, leaving the old one in place. The binary ByHost file can store NUL characters, so a Mac that has never had a configuration is fine. But once a configuration has been created, Audio MIDI Setup offers no way back to having none.
On our desk, two devices reported NUL characters (both use Apple’s class-compliant USB MIDI driver):
| Device | Port names |
|---|---|
| TASCAM Model 12 | MIDI IN\0, MIDI OUT\0, DAW Control IN\0, DAW Control OUT\0 |
| Arturia BeatStep Pro | BeatStepPro OutEditor\0\0 |
To confirm it, we made a new user account, ran no other MIDI apps, and compared the Model 12 connected and disconnected. Each time we created a configuration, added an IAC bus, then restarted MIDIServer (macOS 27.0.1):
| Model 12 connected | Model 12 disconnected | |
|---|---|---|
New Untitled.mcfg | 218 bytes, no devices at all | 32,025 bytes, 11 devices and IAC Bus 1 and 2 |
| IAC bus added before the restart | Gone | Kept |
The only difference was whether the Model 12 was plugged in.
Checking your own Mac
-
See whether you have a configuration file, and when it was last written:
ls -l ~/Library/Audio/MIDI\ Configurations/If a
.mcfgfile exists and its date does not change after you edit something in Audio MIDI Setup, your changes are not being saved. -
Check whether your current MIDI setup contains NUL characters. This converts a copy to XML and throws the result away; it does not change your files:
plutil -convert xml1 -o /dev/null ~/Library/Preferences/ByHost/com.apple.MIDI.*.plistIf you see
Invalid object in plist for property list format, at least one name contains a character that XML cannot store. In our case it was a NUL character. -
The sure test is to add a test IAC bus and restart MIDIServer:
killall MIDIServerIf the bus is gone when you open Audio MIDI Setup again, you have this problem.
Quit your music apps first. When MIDIServer quits, running apps lose their MIDI connection and usually stay disconnected (see Why does MIDI suddenly stop working in a Mac music app?).
What to do
On our Mac, unplugging the device and creating a new configuration in Audio MIDI Setup fixed it: changes are saved again and survive a MIDIServer restart. If your current configuration already contains those names, unplugging alone may not be enough; creating the new configuration is the step we confirmed.
A few things to keep in mind:
- A new configuration may give your IAC buses new IDs, so apps may need to select them again.
- Plugging the device back in will probably bring the problem back (we have not tested this). Make setup changes with the device unplugged.
- Until then, treat changes in Audio MIDI Setup as temporary, and don’t trust that they were saved until you have seen them survive a MIDIServer restart.
- Avoid switching configurations. Switching also recreates the IDs of IAC buses, and apps that remember a bus by its ID can lose it.
If you really need to keep your current configuration, you can edit the .mcfg file by hand. This is for advanced users. Because the file contains NUL characters, plutil and Python’s plistlib cannot write it back, and plistlib cannot even read it. Back it up first, change only the lines you need in a plain text editor, compare the result with the backup, then select that configuration in Audio MIDI Setup to load it.
Apple has the details. We will update this page if anything changes.
About MIDIFabric
MIDIFabric remembers your devices and IAC buses by their CoreMIDI IDs, so we always keep an eye on what survives a MIDIServer restart. The problem above is in macOS and also happens without MIDIFabric.