Update to MobileDevice.framework on macOS Breaks Old GarageBand

1 minute read

My old iMac isn’t supported by Mojave or Catalina, so I’m still on High Sierra. Whenever I update to a new iOS version, I get a prompt from iTunes saying A Software Update Is Required to Connect to Your iPhone, and I just blindly install.

However, the latest install seems to have broken GarageBand.

GarageBand Problem

Running from the command line:

james@Jamess-iMac: /Applications/GarageBand.app/Contents/MacOS
$ ./GarageBand
dyld: Library not loaded: /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice
  Referenced from: /System/Library/Frameworks/CoreAudioKit.framework/Versions/A/CoreAudioKit
  Reason: no suitable image found.  Did find:
	/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice: mach-o, but wrong architecture
	/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice: stat() failed with errno=45
	/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice: mach-o, but wrong architecture
Abort trap: 6

Hmmm, let’s check out MobileDevice:

james@Jamess-iMac: /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A
$ file MobileDevice
MobileDevice: Mach-O 64-bit dynamically linked shared library x86_64

64-bit only. And updated recently:

MobileDevice file listing

For some confusion:

james@Jamess-iMac: ~
$ arch
i386

james@Jamess-iMac: ~
$ uname -m
x86_64

james@Jamess-iMac: ~
$ uname -p
i386

james@Jamess-iMac: ~
$ machine
i486

Anyway, my old version of GarageBand:

james@Jamess-iMac: ~
$ /usr/bin/file '/Applications/GarageBand.app/Contents/MacOS/GarageBand'
/Applications/GarageBand.app/Contents/MacOS/GarageBand: Mach-O executable i386

Hmmm, only 32-bit Intel code.

I have a clone of my drive from before the update, let’s check out MobileDevice from back then:

james@Jamess-iMac: /Volumes/CCC/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A
$ file MobileDevice
MobileDevice: Mach-O universal binary with 2 architectures: [i386:Mach-O dynamically linked shared library i386] [x86_64]
MobileDevice (for architecture i386):	Mach-O dynamically linked shared library i386
MobileDevice (for architecture x86_64):	Mach-O 64-bit dynamically linked shared library x86_64

Built for both archs…

Sooooo, I could fiddle with csrutil and replace the new framework with the one from my clone, or, see if there’s an update. No update has ever shown up in the App Store for GarageBand, but it turns out there is one:

GarageBand update

After the update:

james@Jamess-iMac: /Applications/GarageBand.app/Contents/MacOS
$ file GarageBand
GarageBand: Mach-O 64-bit executable x86_64

And it works:

GarageBand latest version running

Um, if you want to check out the song I recorded, here’s a preview:

/assets/images/posts/mobile-device/shallow-preview.mp3