construct>=2.9.29
construct-typing>=0.7.0
asn1
coloredlogs
IPython
bpylist2>=4.0.1
pygments
hexdump
daemonize
gpxpy<1.7.0,!=1.6.0
pykdebugparser>=1.2.7
pyusb>=1.2.1
tqdm
requests
xonsh
parameter_decorators
packaging
pygnuutils>=0.0.7
cryptography>=41.0.1
pycrashreport>=2.0.0
fastapi>=0.93.0
uvicorn>=0.15.0
wsproto
Pillow
inquirer3>=0.6.0
ipsw_parser>=1.6.0
ifaddr
hyperframe
srptools
qh3>=1.0.0,<2
developer_disk_image>=0.0.2
opack2
psutil
pytun-pmd3>=3.0.3
prompt_toolkit
sslpsk-pmd3>=1.0.3;python_version<'3.13'
python-pcapng>=2.1.1
plumbum
pyimg4>=0.8.8
pyiosbackup>=0.2.4
typer>=0.23.2,<0.24.0;python_version<'3.10'
typer>=0.25;python_version>='3.10'
typer-injector>=0.2.0
defusedxml
pywin32 ; platform_system == "Windows"
av>=14.0.0 ; platform_system != "Darwin"
# pmd-pytcp — the no-root userspace tunnel's TCP/IP stack, a minimal PyTCP fork
# (https://github.com/doronz88/pmd-pytcp). Pulls its pmd-net-addr / pmd-net-proto siblings in
# transitively. Supported on Python 3.9+ (the whole pymobiledevice3 range); if the import or
# stack init fails the tunnel transparently falls back to the kernel path (see cli_common).
# 0.1.0 floor: the pure-asyncio stack — the socket API is awaited (async
# connect/accept/recv/send), stack.start()/stop() are coroutines and no worker threads exist;
# userspace_tunnel.py is written against that API and cannot drive the older threaded stack.
# (Supersedes the temporary >=0.0.6,<0.1.0 cap that guarded master against the 0.1.0 break.)
pmd-pytcp>=0.1.0 ; python_version >= "3.9"
