About
Candidly connects to the Screen Sharing that's already built into macOS, so there's nothing to install on the Mac. Sign in with your Mac account, pick a display, and work with touch, a trackpad-style cursor, or a hardware keyboard and mouse. Your computers and their passwords follow you through iCloud.
- Swift 6
- SwiftUI
- UIKit & AppKit
- Metal
- Network framework
- CryptoKit & Security
- iCloud Keychain
- Swift Testing
- XcodeGen
What I built
- The VNC (RFB) protocol written from scratch in Swift, including Apple's Screen Sharing extensions: Mac account sign-in over Diffie-Hellman and RSA, display selection, the shared-or-private session choice and the Mac clipboard. No third-party code.
- ZRLE, Zlib, Hextile and CopyRect decoders hardened against a misbehaving server, with output and size limits, and tested against an in-process fake server and a real VNC server.
- Whole-session encryption with Apple's own Screen Sharing scheme (AES-128 records, on by default after Mac account sign-in), a lock in the viewer, and a per-computer setting that refuses unencrypted sessions.
- A Metal renderer that uploads only the parts of the screen that changed, so a 5K Mac stays smooth on an iPhone.
- Touch and Trackpad modes with the full gesture set: multi-finger clicks and drags, two-finger scroll, pinch zoom, edge and corner swipes, and three-finger swipes for Mission Control and Spaces.
- Saved computers sync through iCloud with merge rules and deletion tombstones, passwords live in iCloud Keychain, and Macs on the network are found with Bonjour.
- The Mac's real pointer, drawn on the device from Apple's cursor-shape messages at three sizes, so it stays sharp and moves without waiting on the network.
- A preview of each computer's last screen in the list, kept on the device only, with a switch in Settings to turn it off.
How it fits together
Apps
- iPhone & iPad viewerGestures, key bar, Metal
- Mac viewerAppKit, Metal
- Computer listSwiftUI, shared
one session per open viewer
CandidlyKit
- ComputerStoreiCloud key-value store + local file
- CredentialStoreiCloud Keychain
- BonjourBrowserFinds Macs with Screen Sharing on
connect, sign in, stream
RFBKit (Swift package, no UI)
- TransportNetwork framework, keepalive
- Sign-inVNC, Apple DH, RSA tunnel
- DecodersZRLE, Zlib, Hextile, CopyRect
- Apple extensionsDisplays, sessions, clipboard
RFB over TCP, on the LAN or Tailscale
Your Mac
- macOS Screen SharingBuilt in, nothing to install