0f1d2fa6f675ec6f90af1d7325e76803d0644a2c
VNCConnection.Settings.inputMode looks like it configures keyboard-shortcut
forwarding on macOS, but in RoyalVNCKit's enqueue path it's a master gate:
// VNCConnection+Queue.swift
guard settings.inputMode != .none else { return } // every path
So every PointerEvent and KeyEvent we enqueued was discarded before hitting
the wire. The Mac received zero input even though the framebuffer was live.
Frames streamed because that queue is server→client, not gated by inputMode.
Fix: pass .forwardKeyboardShortcutsEvenIfInUseLocally. On iOS we have no
local keyboard shortcuts to steal from, so the most permissive value is
safe and it unblocks the input queue.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Screens (working title)
A VNC / RFB remote-desktop client for iPhone and iPad, modeled on Screens by Edovia. See /Users/treyt/.claude/plans/i-want-to-make-sprightly-pike.md for the full plan.
The name "Screens" is owned by Edovia. Pick a different App Store name before any public release.
Layout
Screens/
├── Screens/ # iOS app target (thin shell: @main, RootView, AppStateController)
├── Packages/
│ ├── VNCCore/ # Protocol + transport + storage. Tested with `swift test`.
│ └── VNCUI/ # SwiftUI views + UIKit framebuffer. Tested in-simulator.
├── Project.yml # xcodegen project definition — generates the .xcodeproj
├── README.md
└── .gitignore
Setup
- Install xcodegen:
brew install xcodegen - Generate the Xcode project from the repo root:
xcodegen generate - Open
Screens.xcodeprojin Xcode 16+. First open resolves the RoyalVNCKit SPM dependency. - Select an iOS 18 simulator (or a signed device) and run.
Testing
# Fast unit tests (no simulator)
cd Packages/VNCCore && swift test
cd Packages/VNCUI && swift test
# Full app + UI tests (simulator)
xcodebuild -project Screens.xcodeproj -scheme Screens -destination 'platform=iOS Simulator,name=iPhone 16' test
Phase 0 status
Scaffold only. Tapping a saved connection starts a SessionController but it only opens the TCP socket — no RFB handshake yet. Phase 1 wires RoyalVNCKit into SessionController and implements framebuffer rendering.
Dependencies
- RoyalVNCKit (MIT) — RFB protocol, encodings, auth.
- Apple first-party only:
Network,SwiftData,Security,UIKit,SwiftUI,Observation.
Description
Languages
Swift
100%