Skip to content

Add support for wirelessly sideloading on tvOS - #241

Draft
ZomkaDEV wants to merge 2 commits into
claration:mainfrom
ZomkaDEV:main
Draft

ZomkaDEV wants to merge 2 commits into
claration:mainfrom
ZomkaDEV:main

Conversation

@ZomkaDEV

@ZomkaDEV ZomkaDEV commented Sep 4, 2026

Copy link
Copy Markdown

New models that don't come with an Ethernet port cannot be paired via USB and have to use remote pairing.

Roadmap:

  • Pairing (plumesign)
  • Pairing (GUI)
  • Installing (since there are some issues from what I found)

Features I implemented:

  • Pairing
    • Pairing through the GUI would be added later
    • Pairing can be done via plumesign. Enter your Apple TV into pairing mode, run plumesign pair discover -t 10, then use the provided IP and port of your Apple TV to pair to it plumesign pair --ip IP --port PORT. You can then verify whether it's paired or not using plumesign pair list. It uses mDNS to discover it, I used the mdns-sd library for it.
  • Fixed installing on tvOS
    • For whatever reason, Impactor requested iOS provisioning profiles even for tvOS devices. Now it does proper requests.

Special thanks:

  • bitxeno for their project, atvloadly, which I used as a reference! :)

@ZomkaDEV
ZomkaDEV marked this pull request as draft September 4, 2026 13:20
@ssalggnikool ssalggnikool linked an issue Sep 5, 2026 that may be closed by this pull request
5 tasks
@ssalggnikool

Copy link
Copy Markdown
Collaborator

was this written by an llm

@ZomkaDEV

ZomkaDEV commented Sep 5, 2026

Copy link
Copy Markdown
Author

@ssalggnikool

I wrote the code myself. I have used an LLM to troubleshoot a few issues I had with pairing but that’s about it.

@ZomkaDEV

Copy link
Copy Markdown
Author

I currently don’t have access to an Apple TV (my parents have one, but I don’t). If anyone wants to implement pairing using the UI, I’d be happy to merge the change into my PR!

@nickclyde

nickclyde commented Sep 15, 2026

Copy link
Copy Markdown

Tested the provisioning fix on tvOS 27 and it works.

Setup: Apple TV 4K (2nd gen) on tvOS 27, macOS 27, paired through Xcode beforehand so the device shows up in the picker over Wi-Fi.

On stock v2.6.3, installing Stremio fails at the install step with 0xe8008015 ("A valid provisioning profile for this executable was not found"). Cherry-picking f4b8d36 alone onto current main (e5e2a82) and rebuilding fixes it: the install completes and the app launches on the Apple TV.

Since that commit is self-contained and applies cleanly, it might be worth splitting it into its own PR. It's enough on its own for anyone who pairs the Apple TV through Xcode, and it could land without waiting on the GUI pairing work.

EDIT: If I get any extra time this week, I might attempt to implement pairing!

@ZomkaDEV

Copy link
Copy Markdown
Author

@nickclyde
Thanks for testing my PR! Honestly, I kinda forgot that Xcode had a way to pair Apple TVs, oops... Well, either way, if you won't end up implementing pairing, I'll split the provisioning fix into its own PR since well, I would assume both features would be desired lol

@claration

Copy link
Copy Markdown
Owner

Some advice, using Xcode to pair is not ideal for many people. People are not going to be willing to download gigabytes of data just to pair their ATV through Impactor.

@ZomkaDEV

Copy link
Copy Markdown
Author

Oh, of course, I'm not planning on abandoning the pairing code I already added.

@skeet70

skeet70 commented Sep 16, 2026

Copy link
Copy Markdown

I tested this out locally and had to make some changes to get it working (to this and to things outside the scope of this PR).

The wireless module is only referenced by pair.rs, nothing in the sign/install path uses it so:
- Device::install_app in device.rs ends up erroring with "Device is not connected via USB" when usbmuxd_device is None
- get_device_for_id in the same file only goes over UsbmuxdConnection::default().get_devices()

That leaves pairing working but my install failed, idevice id -l and -n were both empty but devicectl saw it, because my AppleTV used RemotePairing.

Kind of related but kind of not, get_device_for_id compares d.device_id.to_string() == device_id while the flag is --udid, so passing a real UDID returns "not found" when the device is actually present.

My setup details: Apple TV 4K 3rd gen (AppleTV14,1), tvOS 26.6 (23L773), macOS 26.5.1, Xcode 26.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Wireless Apple TV pairing/install support

5 participants