pymobiledevice3 is a pure Python 3 implementation for interacting with iOS devices
(iPhone, iPad, ...). It ships both a command-line tool and a Python API, and runs on
Windows, Linux, and macOS. Coming from Android? Think of it as adb for iOS.
What it can do¶
- Screen mirroring and control in any browser or VNC client: touch, buttons, keyboard, audio and a shared clipboard (iOS 27+)
- Packet capture per process: every packet on every interface, labelled with the app that sent it, straight into Wireshark
- strace for iOS: every syscall of every process with decoded arguments and paths, live, on a stock device
- JavaScript shell into any Safari tab or inspectable WebView, with completion from the live page
- Chrome DevTools, VS Code and Playwright on iOS Safari and WebViews through a CDP bridge
- Developer services without Xcode: screenshots, process control, location simulation, sysmon; on iOS 17+ over a no-root tunnel built for you, on Windows and Linux too
- Syslog and oslog streaming
- Device files: shell, copy, and mount as a drive
- Apps and profiles: install, list, manage
- Crash reports collection
- Firmware update and restore, recovery and DFU, without Finder or iTunes
- Backups: create, restore, browse
- Discovery over USB and Wi-Fi, plus TCP port forwarding
- Notifications and SpringBoard control
- Python API for all of the above
Where to go next¶
-
Install with uv (no Python knowledge needed) and run your first command.
-
Task-oriented examples for everyday commands.
-
Error messages mapped to their causes and fixes.
-
Reach developer services on modern iOS: the no-root tunnel is built for you, no flags needed.
-
Connect to a device and drive services from your own code.
-
Generated reference for the public classes.
-
How the iDevice stack, RemoteXPC, and DTX actually work.
License and credits¶
Licensed under GPL-3.0-or-later. See the project page for the full list of contributors.
Can I use pymobiledevice3 in a closed-source app?¶
Not by asking for an exception. Requests for written permission or a commercial license come in regularly, and the answer is always no. The reason is that no single person can grant one:
- pymobiledevice3 has well over a hundred contributors and no contributor license agreement, so each contributor keeps the copyright on their own code.
- The userspace tunnel's TCP/IP stack (
pmd-pytcp,pmd-net-addr,pmd-net-proto) is a fork of Sebastian Majewski's PyTCP, which is also GPL.
What you can do:
- Release your app under the GPL. You can still sell it. The GPL lets you charge for the app as long as you also provide its source code.
- Run pymobiledevice3 as a separate program that your app launches and talks to (for example through its CLI), instead of linking it into your closed code. Whether that keeps your app separate enough depends on how closely the two are tied together. This page is not legal advice, so check your setup with a lawyer.
Either way, also check the licenses of the other dependencies you bundle. Contributions back are always welcome.