Phase 0: scaffold

Two SPM packages (VNCCore, VNCUI) + thin iOS app target wired via
xcodegen. Builds for iPhone 17 simulator, unit tests pass.

- VNCCore: SessionState, SessionController stub, Transport protocol
  with DirectTransport (NWConnection), DiscoveryService (Bonjour on
  _rfb._tcp and _workstation._tcp), SavedConnection @Model,
  ConnectionStore, KeychainService, ClipboardBridge
- VNCUI: ConnectionListView, AddConnectionView, SessionView,
  FramebufferView/FramebufferUIView (UIKit CALayer), InputMapper,
  SettingsView; UIKit bits guarded with #if canImport(UIKit) so
  swift test runs on macOS
- App: @main VNCApp, AppStateController state machine, RootView
- RoyalVNCKit dependency pinned to main (transitive CryptoSwift
  constraint blocks tagged releases)
- xcodegen Project.yml + README + .gitignore

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude
2026-04-16 19:29:47 -05:00
commit 2cff17fa0d
28 changed files with 1161 additions and 0 deletions

39
Project.yml Normal file
View File

@@ -0,0 +1,39 @@
name: Screens
options:
bundleIdPrefix: com.example.screens
deploymentTarget:
iOS: "18.0"
developmentLanguage: en
xcodeVersion: "16.0"
settings:
base:
SWIFT_VERSION: "6.0"
SWIFT_STRICT_CONCURRENCY: complete
ENABLE_USER_SCRIPT_SANDBOXING: YES
CODE_SIGN_STYLE: Automatic
packages:
VNCCore:
path: Packages/VNCCore
VNCUI:
path: Packages/VNCUI
targets:
Screens:
type: application
platform: iOS
deploymentTarget: "18.0"
sources:
- path: Screens
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.example.screens
PRODUCT_NAME: Screens
TARGETED_DEVICE_FAMILY: "1,2"
GENERATE_INFOPLIST_FILE: NO
INFOPLIST_FILE: Screens/Resources/Info.plist
dependencies:
- package: VNCCore
product: VNCCore
- package: VNCUI
product: VNCUI