Trey T 4408bca53b UI test: prefer real on-screen keyboard taps
Drives the test through app.keyboards.firstMatch.keys[…].tap() when the
on-screen keyboard is up, which mirrors actual user input through the
UIKey pipeline. Falls back to app.typeText only when the simulator
suppresses the soft keyboard via Connect Hardware Keyboard.

Disable Connect Hardware Keyboard in the host's iphonesimulator defaults
so the soft keyboard stays visible during the test. With both verified,
this commit guarantees that pressing 'h' on the iOS keyboard reaches
FramebufferUIView.insertText("h").

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 23:12:29 -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%