Skip to content

feat(ios): iPad → iPad screen mirroring (#123)#144

Open
peetzweg wants to merge 1 commit into
mainfrom
feat-ipad-ipad
Open

feat(ios): iPad → iPad screen mirroring (#123)#144
peetzweg wants to merge 1 commit into
mainfrom
feat-ipad-ipad

Conversation

@peetzweg

Copy link
Copy Markdown
Owner

Closes #123 — the iOS app learns to send: mirror this iPad/iPhone's screen to another device running OpenDisplay.

Why: People with a spare iPad want it as a second screen for their main iPad — the sender half was Mac-only until now.

How: A ReplayKit broadcast upload extension (the only sanctioned whole-screen capture on iOS) runs the sender pipeline — VideoToolbox H.264 with the Mac sender's low-latency settings, streamed over the existing framed-TCP wire — so the receiver app works unchanged and can't tell a Mac from an iPad on the other end. A new "Send this screen" sheet in the app picks the receiver over Bonjour (peer-to-peer enabled, so no shared WiFi needed) and hands the target to the extension via app-group defaults. Deliberate call: mirror-only and view-only — iPadOS has no virtual-display primitive (no extend) and no event injection (no touch back-channel), so receiver touches are simply ignored.

Verified by building app+extension (simulator) and the Mac target; a live two-device run is still needed. Note for the first signed build: the new App Groups capability means Xcode (signed in) must regenerate the provisioning profiles once — headless xcodebuild can't. Release signing (TestFlight workflow) will need the same capability on the App Store profile.

…on (#123)

The iOS app gains a sender role: a ReplayKit broadcast upload extension
captures the whole screen, H.264-encodes it (VideoToolbox, same
low-latency settings as the Mac sender) and streams it over the existing
framed-TCP wire protocol, so the receiver app works unchanged. The app's
new Send screen discovers receivers over Bonjour (peer-to-peer enabled,
so no shared WiFi needed) and hands the chosen target to the extension
via app-group defaults. Mirror-only and view-only by platform
constraint: iPadOS has no virtual display primitive and no event
injection.
@peetzweg peetzweg mentioned this pull request Jul 12, 2026
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.

iPad -> iPad

1 participant