# pi-remote iOS Native iOS app for the [pi-remote-control](https://git.vpsj.de/jay/pi-remote-control) sidecar. ## Requirements - Xcode 16.4+ - iOS 17.0+ device - pi-remote-control sidecar running (Phase 1) ## Building ```bash # Open in Xcode (first time: Xcode downloads device support files automatically) open piRemote.xcodeproj # Or via CLI (after first Xcode open with device connected): xcodebuild build -project piRemote.xcodeproj -scheme piRemote \ -destination "platform=iOS,name=" \ CODE_SIGNING_STYLE=Automatic DEVELOPMENT_TEAM=KNXX8R3648 ``` ## Project structure ``` Sources/ ├── App/ — @main entry, ContentView, Assets ├── Core/ │ ├── Network/ — WebSocketClient, FrameCodec, ResumeCursor, TLS pinning │ ├── Auth/ — Keychain, Pairing (QR exchange) │ ├── Sessions/ — SessionRegistry, SessionConnection, PreConnectPool │ ├── Push/ — APNs NotificationDelegate, DeviceTokenRegistrar │ └── Persistence/ — ScrollbackCache, Preferences └── UI/ ├── Terminal/ — SwiftTerm wrapper, themes, fonts ├── Input/ — ModifierBar, sticky Ctrl, paste sheet ├── Status/ — StatusBar (pi state) ├── Sessions/ — SessionSwitcher ├── Pairing/ — QR scanner flow └── Settings/ — Face-ID gate, sidecar info ``` ## Dependencies (via SPM) - [SwiftTerm](https://github.com/migueldeicaza/SwiftTerm) — terminal emulator - [Starscream](https://github.com/daltoniam/Starscream) — WebSocket client ## Apple Developer setup (one-time) 1. In [Apple Developer Portal](https://developer.apple.com/account): - Create App ID: `de.vpsj.pi-remote`, enable **Push Notifications** - Generate an **APNs Auth Key** (`.p8`) — *download once, keep safe* - Note your **Key ID** and **Team ID** (`KNXX8R3648`) 2. Copy `.p8` key to `~/.local/share/pi-remote/apns/AuthKey_.p8` 3. Update `[apns]` section in pi-remote-control config ## Status Phase 2 — in development. See `pi-remote-control/docs/PHASE-2-ios-mvp.md`.