feat(ios): iPad → iPad screen mirroring (#123)#144
Open
peetzweg wants to merge 1 commit into
Open
Conversation
…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.
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.