ioscpy 正在运行(已预留,作者将完整实现此功能)ioscpy 支持无线连接(BLE、Wi-Fi)(已预留,作者将完整实现此功能)一个 macOS、Linux 和 Windows 命令行工具,可通过 USB 镜像并控制已越狱的 iPhone。
只需连接一台设备,就足够了。它会自行连接。
分为两部分。Mac 应用负责运行镜像,iPhone 软件包让手机可被控制。两者都需要安装。
在 Mac 上,使用 Homebrew:
brew tap lautarovculic/ioscpy # the Mac app
brew trust lautarovculic/ioscpy
brew install ioscpy
ioscpy --version
在已越狱的 iPhone 上,在 Sileo 或 Zebra 中添加此软件源,然后从中安装 ioscpy 并重新启动 SpringBoard:
https://lautarovculic.github.io/ioscpy-repo/
该软件源同时提供 rootless 和 rootful 构建版本,软件包管理器会自动选择与越狱类型匹配的版本。
ioscpy --device <UDID> # pick a device when several are attached
ioscpy --list # list attached devices
ioscpy --no-keyboard # hide the on-screen keyboard, type from the Mac
ioscpy --mjpeg # force MJPEG video instead of the default H.264
ioscpy --record out.mp4 # record the mirrored screen while mirroring (video only)
ioscpy --debug # full diagnostics
ioscpy --version
--record PATH 会在会话运行期间将镜像屏幕上的内容写入 MP4 文件。手机已经发送的 H.264 流会直接封装到文件中,因此不会重新编码,录制的开销仅为每帧一次缓冲写入;窗口的响应速度保持不变。该流不包含音频,因此录制是静音的。重新连接会启动一个新文件(out-2.mp4、out-3.mp4……),而不是覆盖已断开会话写入的文件。
轨道从会话开始后的第一个关键帧开始,文件在窗口关闭时完成写入。录制会遵循流自身的方向,因此以横屏握持手机捕获的会话会以旋转后的形式存储;QuickTime 的旋转功能,或一次 ffmpeg -display_rotation 90 -i out.mp4 -c copy 处理,即可修复此问题,且无需重新编码。
目前还没有 Linux 的预构建版本。需要从源码构建主机端。设备端软件包与 macOS 相同,从上述 Sileo/Zebra 软件源安装。
克隆此仓库,然后运行安装程序:
./install.sh
--yes 跳过确认提示。--prefix DIR 安装到 DIR 而不是 /usr/local,并且当目录位于 $HOME 下时省略 sudo。--uninstall 移除已安装的二进制文件。
Debian/Ubuntu 上的前置依赖:
sudo apt install build-essential pkg-config nasm \
libimobiledevice-utils usbmuxd \
libxkbcommon-dev libwayland-dev \
libxcb1-dev libxkbcommon-x11-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
确保 usbmuxd 正在运行,以便设备能够被识别:
sudo systemctl enable --now usbmuxd
idevice_id -l # should print the UDID with the phone attached
以你的用户身份构建主机端,然后安装:
make host-release
sudo make install-host # installs to /usr/local/bin/ioscpy
ioscpy --version
./install.sh 在 Arch Linux 上同样可用。
sudo pacman -S --needed \
base-devel pkgconf nasm \
libimobiledevice usbmuxd \
libxkbcommon wayland libxcb libxkbcommon-x11 \
rustup curl git
rustup default stable
启用服务
sudo systemctl enable --now usbmuxd.service
检查设备是否已连接
idevice_id -l
然后运行二进制文件
cd host/target/release && chmod +x ioscpy
./ioscpy
构建步骤以你的用户身份运行,以便找到通过 rustup 安装的 cargo。install-host 是一个单独的目标,仅复制已构建的二进制文件,因此可以在 sudo 下正常运行,无需在 root 的 PATH 中提供 cargo。若要在主目录中进行免 sudo 安装,请使用 make install-host PREFIX=$HOME/.local,并确保 $HOME/.local/bin 在你的 PATH 中。
H.264 解码在 Linux 上通过 openh264 软件解码器工作。如果你更倾向于 MJPEG 路径,请传入 --mjpeg。
在拒绝服务端装饰的 Wayland 合成器(GNOME/mutter)上,ioscpy 会自动回退到 X11/XWayland,以便窗口获得正常的标题栏。传入 --wayland 可保持使用原生 Wayland。
目前还没有 Windows 的预构建版本。需要从源码构建主机端。设备端软件包与 macOS 和 Linux 相同,从 Sileo/Zebra 软件源安装。
Windows 上的 ioscpy 复用 iOS 环境已有的 USB 工具,并且不会替换任何驱动程序,因此 Frida、objection、grapefruit、ideviceinfo、iTunes 以及任何其他 usbmux 工具在它运行时都能继续工作。
Apple Mobile Device Support:从 apple.com 下载的 iTunes 安装(获取 Apple 官网版本,而非 Microsoft Store 版本),或独立的 AMDS 软件包。它提供 USB 驱动和 usbmuxd。iTunes 必须能识别手机。
libimobiledevice-win32:提供 iproxy.exe、idevice_id.exe、ideviceinfo.exe。使用 Scoop 安装:
scoop install libimobiledevice
或使用 MSYS2:
pacman -S mingw-w64-x86_64-libimobiledevice
确保这三个 .exe 文件在你的 PATH 中(或将它们放在 ioscpy.exe 旁边)。使用 idevice_id -l 检查,它应打印出你的设备 UDID。
openh264 解码器通过 cc 编译一个小型 C 库)。PATH 中:openh264 的汇编器(scoop install nasm)。git clone https://github.com/lautarovculic/ioscpy
cd ioscpy
cargo build --release --manifest-path host/Cargo.toml
.\host\target\release\ioscpy.exe --list # confirms the device is seen
.\host\target\release\ioscpy.exe # opens the mirror window
如果你更倾向于 MJPEG 路径而非 H.264,请传入 --mjpeg。如果 openh264 构建失败,请确认 nasm 在 PATH 中。
在重新启动 SpringBoard 或新连接后,在从主机端驱动手机之前,请先在手机屏幕上进行一次物理触摸。iOS 只信任来自真实数字化仪的触摸事件,因此第一次真实触摸是让注入事件得以通过的关键。你只需操作一次,之后主机端即可接管。
在 Linux 和 Windows 上,请使用 Ctrl 代替 Cmd 来执行这些快捷键(Ctrl+C、Ctrl+V 等);剪贴板仍然双向同步。
旋转手机会旋转并调整镜像窗口的大小。
主机:
设备:
| 布局 | 设备 | iOS | 注入 |
|---|---|---|---|
| roothide | iPhone11,2 | 15.5 | ElleKit |
| roothide | iPhone10,4 | 16.7.12 | ElleKit |
| roothide | iPhone10,3 | 16.7.10 | ElleKit |
| roothide | iPhone14 | 16.3 | ------- |
| rootless | iPhone13 | 15.5 | ElleKit |
ioscpy 在上述设备上开发和测试。我没有 rootful 设备或所有 iOS 版本,因此按布局的覆盖并不完整:
| 布局 | 状态 |
|---|---|
| rootless | 可构建;通过 /var/jb 在 roothide 设备上运行 |
| roothide | 正常工作(通过 /var/jb 的 rootless .deb) |
| rootful | 可构建且布局已验证;运行时未测试 |
如果你在不同的 iPhone、iOS 版本或越狱环境上运行 ioscpy,请帮助补充此表。尤其需要测试 rootful 和其他 iOS 版本。
ioscpy --debug 的输出host/ Rust host CLI (macOS, Linux, and Windows)
device/ iOS package (Theos): daemon, ctl, tweak, jbcompat, packaging
protocol/ wire format docs, kept in lockstep with the code
scripts/ device deploy, respring, log, and diagnostics helpers
docs/ architecture, jailbreak compatibility, troubleshooting, release
make host-release # macOS host binary
make device-rootless # rootless .deb (Dopamine, palera1n-rootless, /var/jb)
make device-rootful # rootful .deb (palera1n-rootful, /)
make release # host plus both device variants
需要 Rust、Theos($THEOS)、libimobiledevice(idevice_id、iproxy)、ldid 和 dpkg-deb。
ioscpy 用于在同一张桌子上,通过 USB 线缆,从你的 Mac 和 Linux(Debian、Ubuntu 和 Arch Linux)设备控制你自己的已越狱 iPhone。
对于 Linux 主机,与 macOS 相同的外部要求:libimobiledevice 工具(iproxy、idevice_id、ideviceinfo)和 usbmuxd。
它现在也能在 Windows 上运行,复用标准的 iOS USB 工具而不替换任何驱动程序。它仍然仅适用于已越狱的 iPhone。