Skip to content

pymobiledevice3

Talk to iPhones and iPads from any computer.

A pure-Python CLI and API for iOS devices: logs, files, apps, crash reports, packet capture, WebInspector and the full developer toolchain, including iOS 17+ tunnels built in-process. Windows, Linux and macOS. No Xcode, no root.

$ python3 -m pip install -U pymobiledevice3

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

Where to go next

  • Installation

    Install with uv (no Python knowledge needed) and run your first command.

  • CLI recipes

    Task-oriented examples for everyday commands.

  • Troubleshooting

    Error messages mapped to their causes and fixes.

  • iOS 17+ tunnels

    Reach developer services on modern iOS: the no-root tunnel is built for you, no flags needed.

  • Python API

    Connect to a device and drive services from your own code.

  • API reference

    Generated reference for the public classes.

  • Protocol internals

    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.