# 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`.