Modern devices default to serial output over DockChannel by default, which is why macvdmtool serial doesn't work. In order to use legacy UART:
On the target device:
- Disable SIP
- Disable boot-arg filtering
- Set the following boot args:
-
serial=3(orserial=7or whatever) -
If the device is on macOS 14 or below:
use-legacy-uart=1 -
If the device is on macOS 15 or above, it gets more complicated. Apple rewrote
serial_initand this boot arg no longer exists. Instead:-
Download an IPSW for your device
-
Get the DeviceTree for your device
-
Look for the
uart0node, and find the value forAAPL,phandle(the outer one, not the one fordebug-console). Example forJ413AP:
Note that this is model specific, so you can't copy from my screenshot.
-
Add
serial-device=[value of AAPL,phandle](ie.serial-device=163)
-
- Reboot, make sure the boot args set properly
- Set up your cable between host and target, use the correct DFU port (on both machines!), etc
You can now run macvdmtool reboot serial on your host device. Enjoy! Remember that if your host is on Monterey or above, you will need to remove AppleSerialShim from the boot KC.
If you're wondering what to actually use to see the logs, something like sudo picocom -q --omap crlf --imap lfcrlf -b 115200 /dev/tty.debug-console would work.
My desperate attempt to test this without rebuilding my KC. Spoiler, /dev/cu.debug-console does not exist on iOS
Jailbreak required obviously
- Compile stacksmashing's
macvdmtoolfork (iphone15 branch) for iOS
- If you have a SDK with private headers (ie. from Theos), just set the target in the
Makefile,xcrun -sdk iphoneos make, and enjoy - If not:
cp "$(xcrun --show-sdk-path)/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOCFPlugIn.h" .- Fix the import in
AppleHPMLib.h sed -i '' 's/kIOMasterPortDefault/kIOMainPortDefault/g' main.cpp- Set the target in the
Makefile xcrun -sdk iphoneos make
- Or the cursed option:
- Build normally for macOS
vtool -set-build-version ios 15.0 15.0 -replace -output macvdmtool_ios macvdmtoolinstall_name_tool -change /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation macvdmtool_iosinstall_name_tool -change /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit /System/Library/Frameworks/IOKit.framework/IOKit macvdmtool_ios
- Sign with the following entitlements:
-
com.apple.security.iokit-user-client-class:AppleHPMUserClient -
com.apple.USBCEntitlement:trueThese entitlements are the same as
/usr/bin/hpmdiagnose
- Profit
You won't be able to use serial, but actions such as DFU and reboot will work:

You can use serial over USB on iOS with usbselfserial/(compiled for rootful). I know that it does work with rootless jailbreaks, but probably requires recompilation.