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:
51
README.md
Normal file
51
README.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Screens (working title)
|
||||
|
||||
A VNC / RFB remote-desktop client for iPhone and iPad, modeled on [Screens by Edovia](https://www.edovia.com/en/screens/). 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](https://github.com/yonaskolb/XcodeGen):
|
||||
```sh
|
||||
brew install xcodegen
|
||||
```
|
||||
2. Generate the Xcode project from the repo root:
|
||||
```sh
|
||||
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
|
||||
|
||||
```sh
|
||||
# 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](https://github.com/royalapplications/royalvnc) (MIT) — RFB protocol, encodings, auth.
|
||||
- Apple first-party only: `Network`, `SwiftData`, `Security`, `UIKit`, `SwiftUI`, `Observation`.
|
||||
Reference in New Issue
Block a user