Update to MobileDevice.framework on macOS Breaks Old GarageBand
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.
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:
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:
After the update:
james@Jamess-iMac: /Applications/GarageBand.app/Contents/MacOS
$ file GarageBand
GarageBand: Mach-O 64-bit executable x86_64
And it works:
Um, if you want to check out the song I recorded, here’s a preview:
/assets/images/posts/mobile-device/shallow-preview.mp3