vphone-cli позволяет запустить виртуальный iPhone с джейлбрейком на Mac

На GitHub опубликован проект vphone-cli, консольная утилита, которая с нуля разворачивает виртуальный iPhone на Mac с процессором Apple Silicon. Инструмент использует официальный Virtualization.framework Apple и исследовательскую инфраструктуру виртуальных машин Apple, обозначенную в проекте как PCC; что именно стоит за этой инфраструктурой и почему проект на неё опирается, в документации не раскрыто.
Для работы нужен хост на Apple Silicon с macOS 15+ (Sequoia), установленные Xcode и iOS SDK (ими кросс-компилируется гостевой демон), а также частичное снятие защит SIP и AMFI, оно нужно, чтобы разрешить приватные права PV=3 для неподписанных бинарников. Полный список зависимостей ставится через Homebrew, сам проект, через git clone с подмодулями и два скрипта: setup_tools.sh (сборка тулчейна, venv) и build.sh (сборка и подпись самого vphone-cli).
Одна команда, vphone-cli vm create <имя> -V <вариант>, проходит весь конвейер: скачивание и слияние образов прошивки (IPSW), патч загрузочной цепочки, восстановление через режим DFU, установку кастомной прошивки (CFW, требует sudo) и первую загрузку; следом vm launch включает готовую машину. Те же шаги можно выполнить вручную по отдельности, от vm new (пустой бандл с настройками CPU/памяти/диска) до fw prepare --iphone-version (загрузка нужной версии iOS), fw patch --variant и ручного DFU-восстановления. Обновление на более новую iOS делает та же команда fw prepare с указанием пути к новому файлу прошивки. Всего доступно пять вариантов патча с разной глубиной обхода защиты, от минимального до максимального; один из них, джейлбрейк-вариант (jb).
Готовая машина управляется отдельными командами (список, информация, клонирование через APFS с новой идентичностью устройства, экспорт/импорт архивом, переименование, удаление) и доступна по SSH на порту 22222 (для джейлбрейк-варианта, пользователь mobile с паролем alpine, для обычной/dev-сборки, root) либо по VNC на порту 5901. Все данные vphone-cli хранит в ~/.vphone/, путь можно переопределить переменными окружения ($VPHONE_ROOT и более точечные $VPHONE_LIBRARY_ROOT, $VPHONE_VENV_DIR).
Отдельно проект описывает известный баг в текущей стабильной версии ldid-procursus из Homebrew (до 2.1.5-procursus7 включительно): при переподписи некоторых системных бинарников с entitlements-значением, равным нулю, функция bytes(uint64_t) вызывает __builtin_clzll(0) без проверки на ноль, это неопределённое поведение, которое на данной сборке приводит к нулевой длине и переполнению счётчика цикла, из-за чего ldid зависает, дописывая буфер по одному байту, а установка кастомной прошивки виснет с неограниченно растущей памятью. Исправление уже есть в исходном коде, но не попало в тегированный релиз, авторы советуют пересобрать ldid-procursus из исходников. Отдельно vphone-cli открывает управляющий сокет (vphone.sock) для программного управления виртуальным устройством, скриншоты, тач, свайпы, аппаратные кнопки, буфер обмена, каждое действие возвращает встроенный скриншот; для этого есть отдельный MCP-сервер vphone-mcp, ориентированный на AI-driven end-to-end тестирование.
Ключевые факты
- vphone-cli грузит полноценный виртуальный iPhone на Apple Silicon Mac через Virtualization.framework Apple и её исследовательскую VM-инфраструктуру (в проекте обозначена как PCC).
- Хосту нужны macOS 15+ (Sequoia), Xcode с iOS SDK и частичное снятие защит SIP/AMFI, для приватных прав PV=3 у неподписанных бинарников.
- Одна команда
vphone-cli vm createпроходит весь конвейер, скачивание прошивки, патч загрузочной цепочки, DFU-восстановление, установку кастомной прошивки и первую загрузку; доступно пять вариантов патча разной глубины, включая джейлбрейк (jb). - Готовая машина доступна по SSH (порт 22222, для джейлбрейка, пользователь mobile/пароль alpine) и по VNC (порт 5901); данные хранятся в ~/.vphone/ с переопределением пути через переменные окружения.
- В текущей стабильной версии ldid-procursus (до 2.1.5-procursus7) есть баг с неограниченным ростом памяти при установке кастомной прошивки; фикс есть в исходниках, но не в тегированном релизе.
Почему это важно
Полноценная виртуализация iPhone, не эмулятор и не симулятор iOS от Apple, а настоящая гостевая ОС с загрузочной цепочкой, DFU-режимом и кастомной прошивкой, через официальный Virtualization.framework и внутреннюю исследовательскую VM-инфраструктуру Apple выглядит нестандартным применением этих технологий. Это выводит тестирование и джейлбрейк iOS с уровня физического устройства на уровень виртуальной машины, которую можно клонировать, экспортировать и пересоздавать за минуты.
Кому это важно
Инструмент рассчитан на разработчиков и исследователей безопасности, которым нужна настоящая iOS-среда без физического устройства, на сообщество джейлбрейка, а также на инженеров автоматизированного тестирования: управляющий сокет vphone.sock и обёртка vphone-mcp дают программный доступ к экрану и вводу виртуального iPhone, в том числе для AI-driven end-to-end тестирования.
Как это применить
Установка идёт через Homebrew (зависимости) и git clone с подмодулями, затем scripts/setup_tools.sh и scripts/build.sh. Дальше одна команда vphone-cli vm create <имя> -V <вариант> создаёт машину целиком, vm launch, включает её. Ручной режим даёт контроль над каждым шагом: vm new, fw prepare --iphone-version, fw patch --variant, DFU-восстановление, cfw install --variant. Управление запущенной машиной, командами vm list/info/config/clone/export/import/rename/delete, доступ, по SSH (22222) или VNC (5901). Каталог данных по умолчанию ~/.vphone/, путь переопределяется переменными окружения $VPHONE_ROOT и более точечными $VPHONE_LIBRARY_ROOT, $VPHONE_VENV_DIR.
Можно ли доверять
Источник, прямая документация проекта в его репозитории на GitHub, подробная и техническая: команды, порты, структура каталогов и разбор конкретного бага описаны предметно, а не декларативно. При этом в тексте не назван автор или сопровождающий проекта, не указана лицензия, нет данных о числе пользователей или установок и нет упоминания какой-либо реакции Apple на такое использование её фреймворка и исследовательской инфраструктуры, эти детали проверить не на чем.
Риски и подводные камни
Работа требует частичного снятия защит SIP и AMFI на хосте, минимум debug-relaxed режима, максимум полного отключения SIP с AMFI-boot-arg, то есть реального ослабления защиты самой машины разработчика. Виртуализация не работает, если хост сам является виртуальной машиной (вложенная виртуализация PV=3 не поддерживается). При первичной настройке iOS в гостевой системе нельзя выбирать регионом Японию или страны ЕС, там включаются дополнительные регуляторные проверки, которые виртуальная машина не проходит. На образах iOS 18 систематически всплывает краш с EXC_GUARD, требующий пересборки патча с флагом --force-exc-guard. Отдельно, уже упомянутый баг в стабильной версии ldid-procursus, из-за которого установка кастомной прошивки может зависнуть с неограниченно растущим потреблением памяти.