[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-95940":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":16,"rankGlobal":9,"rankLanguage":9,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},95940,"vphone-web","34306\u002Fvphone-web","34306","vphone-cli but you can use your mac as a host and control it over the web",null,"HTML",352,38,1,0,144,4.77,"GNU General Public License v3.0",false,"main",[],"2026-09-21 02:04:29","# vphone-web\n\nI vibe code this repo so please if you had anything issue with AI then just skip it. (i vibed but still checking the function before sharing so it must be work fine)\n\nA self-hosted web platform for running **multiple virtual iPhones** at once in the browser — user accounts + RBAC, per-user device assignment, live screen streaming (WebRTC with an MJPEG\u002FWebSocket fallback), touch & hardware-key input, IPA\u002FTIPA install, an in-browser **root shell** and a **file browser**, on top of the `vphone-cli` engine (Apple Virtualization.framework, PV=3 research VMs).\n\nYou need build the `vphone-cli` and create your own base VM locally, i did not included it here due to large files.\n\n---\n\n## Requirements\n\n- **macOS 15+ (Sequoia)** on Apple Silicon — required for PV=3 virtualization.\n- **SIP + AMFI disabled** (needed for the private Virtualization entitlements), see the vphone-cli README for the exact recovery-mode steps.\n- **Xcode + command-line tools**, Homebrew, Python 3.11+.\n- Enough **fast** disk. **Strongly recommended: keep VM images on an internal SSD**, not a slow external\u002FUSB disk — iOS first-boot does thousands of small writes and is impractically slow on slow storage.\n\n---\n\n## 1. Clone (recursive)\n\n```sh\ngit clone --recursive https:\u002F\u002Fgithub.com\u002F34306\u002Fvphone-web.git\ncd vphone-web\n```\n\nThis also creates `vendor\u002Fvphone-cli\u002F` with the full engine + toolchain.\n\n## 2. Build the vphone-cli engine\n\n```sh\ncd vendor\u002Fvphone-cli\nmake setup_tools     # brew deps, build toolchain, create its Python venv\nmake build           # build + sign the vphone-cli binary\nmake bundle          # app bundle (bundles the IPA signing cert) — recommended\ncd ..\u002F..\n```\n\n## 3. Create a base VM\n\nEach web VM is an instant copy-on-write clone of a **base VM directory**. Build one with vphone-cli's automated pipeline (downloads IPSW + cloudOS, restores, patches, installs CFW, first boot).\n\nSee **`vendor\u002Fvphone-cli\u002FREADME.md`** for the full firmware matrix, supported iOS\u002FcloudOS builds, variants (regular \u002F dev \u002F jb \u002F exp), and how to resolve IPSW URLs. When it finishes, the base lives at `vendor\u002Fvphone-cli\u002Fvm\u002F` (contains `Disk.img`, `nvram.bin`, `SEPStorage`, `config.plist`, `AVPBooter*.bin`, `.vphoned.signed`).\n\n> **Tip — one base per iOS version.** Keep each version's base in its own folder (`vm\u002F`, `vm-26.5\u002F`, `vm-27\u002F`, …) and point the matching `VPHONE_BASE_VM*` env var at it. The web only offers versions whose `Disk.img` actually exists.\n\n> **Boot cleanly.** Always **Stop** a VM from the web UI (or Ctrl-C the process) and let it finish shutting down before copying\u002Fpromoting a base — a hard kill leaves the APFS volume dirty and the next boot does a slow fsck replay.\n\n## 4. Configure & run the web\n\n```sh\ncp .env.example .env          # then edit paths (see below)\nmake web_setup                # create .venv, install web deps\nmake web_seed_admin USER=admin PASS='choose-a-strong-password'\nmake web_run                  # serves http:\u002F\u002F127.0.0.1:8080\n```\n\nOpen **http:\u002F\u002F127.0.0.1:8080**, sign in as the admin, then:\n\n1. **Admin → Create VM** — pick an iOS version; it clones the base instantly.\n2. **Admin → assign** the VM to one or more users.\n3. As a user: **Start** → **Open** → interact; drag on the screen for touch, use the home\u002Fpower\u002Fvolume buttons, or the **SSH**\u002F**Files** tabs. Drop an `.ipa`\u002F`.tipa` on the install zone to install.\n\nAdmin-only **logs** dashboard live-tails every VM at `\u002Flogs`.\n\n---\n\n## 5. (Optional) Expose it with a Cloudflare Tunnel\n\nThe server binds `127.0.0.1` only. To reach it from the internet **without opening a port**, use a [Cloudflare Tunnel](https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fconnections\u002Fconnect-networks\u002F). You need a domain on Cloudflare.\n\n```sh\nbrew install cloudflared\ncloudflared tunnel login                      # authorize your domain (opens browser)\ncloudflared tunnel create vphone              # creates a tunnel + credentials json\ncloudflared tunnel route dns vphone phone.example.com   # your hostname\n```\n\nCreate `~\u002F.cloudflared\u002Fconfig.yml` (replace the id + hostname with **yours**):\n\n```yaml\ntunnel: \u003CYOUR-TUNNEL-ID>\ncredentials-file: \u002FUsers\u002F\u003Cyou>\u002F.cloudflared\u002F\u003CYOUR-TUNNEL-ID>.json\ningress:\n  - hostname: phone.example.com\n    service: http:\u002F\u002Flocalhost:8080\n  - service: http_status:404\n```\n\nRun it:\n\n```sh\ncloudflared tunnel run vphone\n```\n\nNotes:\n- Live video uses **WebRTC** locally and automatically falls back to **MJPEG-over-WebSocket** through the tunnel (Cloudflare can't proxy WebRTC UDP).\n- IPA upload uses chunked transfer to bypass proxy body-size limits.\n- If you serve subdomains (e.g. `logs.phone.example.com`), set `VPHONE_COOKIE_DOMAIN=.example.com` in `.env` so the session cookie is shared.\n- **Never commit** your `~\u002F.cloudflared\u002F*.json` credentials or `cert.pem`.\n\n### Auto-start on boot (macOS LaunchAgent, optional)\n\nRun the web + tunnel automatically after a reboot\u002Fpower-restore by creating two per-user LaunchAgents (`~\u002FLibrary\u002FLaunchAgents\u002F…`) that `RunAtLoad` + `KeepAlive`: one execs `make web_run` (or uvicorn directly) from this repo, the other execs `cloudflared tunnel run vphone`. Web VMs need a **GUI login session** (WindowServer), so use a **LaunchAgent** (per-user), not a system LaunchDaemon; enable macOS Automatic Login for a fully unattended restore.\n\n---\n\n## Credits\n\nBuilt on [**vphone-cli**](https:\u002F\u002Fgithub.com\u002FLakr233\u002Fvphone-cli) by\n[Lakr233](https:\u002F\u002Fgithub.com\u002FLakr233). This repo adds the web platform layer on top.\n","vphone-web 是一个基于 macOS 的自托管 Web 平台，用于在浏览器中并发运行多个虚拟 iPhone 实例。它基于 vphone-cli 引擎（利用 Apple Virtualization.framework 的 PV=3 虚拟机），提供多用户账户与 RBAC 权限控制、按用户分配虚拟设备、WebRTC 实时屏幕流（含 MJPEG\u002FWebSocket 回退）、触控与硬件按键输入、IPA\u002FTIPA 安装、内置 root shell 及文件浏览器功能。需 macOS 15+（Apple Silicon）、禁用 SIP\u002FAMFI，并依赖本地构建的 base VM。适用于 iOS 应用兼容性测试、安全研究、越狱环境复现及轻量级移动设备沙箱化分析等场景。",2,"2026-09-07 02:30:03","CREATED_QUERY"]