Fixes wired Continuity Camera on unsupported Macs running macOS Sequoia via OpenCore Legacy Patcher.
On Mac Pro 5,1 (and similar OCLP machines) with third-party USB controllers (e.g. ASMedia XHCI), usbmuxd fails to negotiate the correct USB configuration for Continuity Camera. Specifically:
usbmuxdcallsIORegistryEntryCreateCFProperty("kCDCDoNotMatchThisDevice")which returnsNULLon unsupported hardware.- This causes
usbmuxdto skip thedeviceRequiresMuxConfigurationcode path. - The iPhone never switches to USB config 5/6 (which contain the NCM network interfaces needed for Continuity Camera).
- The
en3(iPhone USB) network interface never appears.
Two-part approach:
-
Binary patch
usbmuxd— Bypasses thekCDCDoNotMatchThisDeviceNULL check so the mux configuration logic always runs. This allows the iPhone to enumerate with all 6 USB configs (including NCM interfaces for Continuity Camera). -
Launch daemon for
en3— Automatically brings up the NCM network interface (en3) when the iPhone is connected, since macOS doesn't activate it automatically on unsupported hardware.
- Mac Pro 5,1 (or similar unsupported Mac) running macOS 15 Sequoia via OCLP
- SIP disabled and Authenticated Root disabled (required for binary patching)
- iPhone with iOS 17+ and Continuity Camera support
- USB connection (not Bluetooth/Wi-Fi)
- Python 3.10+ (for the config switcher script)
# 1. Patch usbmuxd (backs up original automatically)
sudo python3 _patch_usbmuxd.py --patch
# 2. Re-sign the binary
sudo codesign -f -s - /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd
# 3. Restart usbmuxd
sudo launchctl kickstart -k system/com.apple.usbmuxd
# 4. Install en3 auto-activate daemon
sudo cp com.local.iphone-en3-up.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/com.local.iphone-en3-up.plist
sudo chmod 644 /Library/LaunchDaemons/com.local.iphone-en3-up.plist
sudo launchctl load /Library/LaunchDaemons/com.local.iphone-en3-up.plist./build-installer.sh
# Then install the generated .pkgsudo ./uninstall.shThis restores the original usbmuxd binary from backup, removes all launch daemons/agents, and restarts services.
The patch modifies the x86_64 slice of usbmuxd at the point where it checks kCDCDoNotMatchThisDevice:
Original: test rax, rax; je 0x10000ccb3 (branch to "is NULL" error path)
Patched: jmp +0x3b; nop×7 (skip NULL check, continue to mux config)
The original binary is backed up to usbmuxd.bak alongside the patched version.
com.local.iphone-en3-up.plist runs at boot and polls every 5 seconds. When en3 exists but is inactive, it runs ifconfig en3 up.
Monitors USB for iPhone connection and switches to the optimal USB configuration (config 5/6 with NCM + Mux interfaces). Runs as a launch agent.
_patch_usbmuxd.py # usbmuxd binary patcher
iphone-usb-fix.py # USB config switcher daemon
iphone-usb-fix-launcher # Launcher script (finds Python)
iphone-usb-fix-install-python3 # Python 3 installer helper
cc-wired-hook.m # Continuity Capture agent hook (Obj-C)
com.local.iphone-usb-fix.plist # Launch agent for config switcher
com.local.iphone-en3-up.plist # Launch daemon for en3 auto-activate
com.local.iphone-cc-kick.plist # Launch daemon for CC service kick
build-installer.sh # Builds .pkg installer
uninstall.sh # Removes all components
vendor/ # Vendored libusb1 Python bindings
- macOS updates that replace
usbmuxdwill overwrite the patch. Re-run_patch_usbmuxd.py --patchafter updating. - Requires SIP disabled — this is already the case for OCLP installations.
- The patch is x86_64-specific. ARM Macs are not affected by this issue.
- Mac Pro 5,1 (2010/2012) + ASMedia USB 3.1 XHCI controller
- macOS 15.7.5 Sequoia (OCLP 2.4.1)
- iPhone 15 Pro (iOS 18.4)
MIT