Trey T 0f1d2fa6f6 The actual bug: inputMode:.none silently drops every pointer/key event
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>
2026-04-17 13:42:48 -05:00
2026-04-16 19:29:47 -05:00
2026-04-16 19:29:47 -05:00

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

  1. Install xcodegen:
    brew install xcodegen
    
  2. Generate the Xcode project from the repo root:
    xcodegen generate
    
  3. Open Screens.xcodeproj in Xcode 16+. First open resolves the RoyalVNCKit SPM dependency.
  4. 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
No description provided
Readme 1.6 MiB
Languages
Swift 100%