Apple Vision Pro support: wireless pairing + install over an RP tunnel#565
Apple Vision Pro support: wireless pairing + install over an RP tunnel#565rebelancap wants to merge 1 commit into
Conversation
…unnel
A Wi-Fi Apple Vision Pro isn't carried by usbmuxd, so it can't be reached
through iloader's usbmux device path like an iPhone/iPad. This adds a parallel
Vision Pro transport that reuses the RemotePairing (RSD) tunnel, alongside the
unchanged iOS/iPad usbmux path.
- src-tauri/src/vision.rs: the whole VP transport — a persistent mDNS browser
(browses _remotepairing-manual-pairing._tcp for unpaired VPs and
_remotepairing._tcp for already-paired ones), first-time pairing via the
headset 6-digit code (vision_pair, driven by vision-pair-status/-code events),
the tunnel (pair-verify on RSD 49152 -> TLS-PSK CDTunnel -> RSD services), and
sign-then-install over the tunnel. RP pairing cached by a canonical device name.
- device.rs: DeviceTransport{Usbmux,Vision} + ip/paired on DeviceInfo;
list_devices joins usbmux and mDNS discovery; set_selected_device verifies a
stored VP pairing.
- sideload.rs / pairing.rs: branch on transport — a VP signs via isideload
sign_app then installs over the tunnel and places rp_pairing_file.plist; routes
to the patched visionOS SideStore / LiveContainer builds.
- secure_storage.rs: memoize the keychain-availability probe.
- Info.plist: declare NSLocalNetworkUsageDescription + NSBonjourServices, or
macOS silently blocks the mDNS multicast a packaged build discovers the VP over.
- Frontend: a Vision Pro device card + headset code-entry modal.
- Vendor the patched isideload in-repo (stopgap until the dev-error-35 tolerance
for a visionOS-registered device ships in a crates.io release).
Validated on a real Apple Vision Pro (visionOS 27): pair -> install SideStore ->
sideload over Wi-Fi.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
d4573df to
706d2f8
Compare
|
This is amazing! Thank you so much for your work on this! I have now successfully installed Livecontainer and Sidestore and sideloaded apps on my Vision Pro. The only issue I've come across is I am unable to enable JIT despite having the pairing file. It says the Developer Disk Image is not mounted. Any suggestions you have would be really appreciated—and thank you again! |
|
Glad it’s working for you. Check out my repo for ports for visionOS with SideStore sources! I’m working on several others yet to come. I was not optimistic about JIT so I didn’t give it a real try. But I should take another look (well Claude Fable should - he’s doing the legwork here). |
|
Just had a look! Fantastic, thank you! |
|
@barlarb Unfortunately worked on this all afternoon, and visionOS 27 blocks every JIT attempt. Can mount the DDI, can attach a debugger, SideStore confirms |
|
Thank you for trying! Hopefully it can be figured out at some point, once OS27 is out, as you say. Finger's crossed! It feels a shame for Vision Pro to miss out on JIT. Thanks again for making sideloading such a breeze now! Really appreciate it. |
A Wi-Fi Apple Vision Pro isn't carried by usbmuxd, so it can't be reached through iloader's usbmux device path like an iPhone/iPad. This adds a parallel Vision Pro transport that reuses the RemotePairing (RSD) tunnel, alongside the completely unchanged iOS/iPad usbmux path.
What it does
_remotepairing-manual-pairing._tcpwhen unpaired,_remotepairing._tcponce paired — a paired VP stops advertising manual-pairing), and lists it next to usbmux devices.installation_proxy/AFC. Signs with isideload (transport-agnostic) and installs over the tunnel, then places the RP pairing file into the app.Structure
src-tauri/src/vision.rs— the whole VP transport (new module).device.rs/sideload.rs/pairing.rs— branch on a newDeviceTransport{Usbmux,Vision}discriminator onDeviceInfo; the iOS/iPad usbmux path is untouched.Device.tsx/App.tsx) — a Vision Pro device card and a "enter the code from your headset" modal.src-tauri/Info.plist— declaresNSLocalNetworkUsageDescription+NSBonjourServices(required for mDNS multicast on macOS; without them a packaged build silently finds no devices).Notes for review
src-tauri/vendor/isideloadas a stopgap: a VP registered under Apple's separate visionOS device platform makes isideload'sensure_device_registeredhit "device already registered" (developer error 35); the tolerance for that is on isideload's git HEAD but not yet in a crates.io release. Once released, this reverts to a normal dependency.Companion visionOS patches live on the rebelancap SideStore + AltSign forks.