Screenshots of Pair, Feed, Thread (finished, approval, question) and New thread, taken in the Series 12 46mm simulator in demo mode. Co-Authored-By: Claude Opus 5.5 <[email protected]>
42 lines
1.9 KiB
Markdown
42 lines
1.9 KiB
Markdown
# WristCode watch app
|
|
|
|
SwiftUI, watch only, Swift 6 with strict concurrency, and no dependencies. It talks to the gateway
|
|
over HTTPS + JSON as described in [docs/api.md](../docs/api.md); `WristCode/API/Models.swift`
|
|
mirrors [gateway/src/contract.ts](../gateway/src/contract.ts).
|
|
|
|
## Build and test
|
|
|
|
```sh
|
|
cd watch
|
|
xcodegen generate # the .xcodeproj is generated and gitignored
|
|
xcodebuild -scheme WristCode -destination 'platform=watchOS Simulator,name=Apple Watch Series 12 (46mm)' build
|
|
xcodebuild -scheme WristCode -destination 'platform=watchOS Simulator,name=Apple Watch Series 12 (46mm)' test
|
|
```
|
|
|
|
## Demo mode
|
|
|
|
`DemoGateway` serves fixture data shaped like the docs/api.md examples, and it reacts to writes:
|
|
Allow moves a thread to working, a reply restarts a finished thread. The SwiftUI previews use it,
|
|
the pairing screen has a "Try the demo" button, and launch arguments open a screen directly:
|
|
|
|
```sh
|
|
xcrun simctl launch <udid> org.gbrown.wristcode -demo # feed
|
|
xcrun simctl launch <udid> org.gbrown.wristcode -demo -thread littleman/t-next # thread
|
|
xcrun simctl launch <udid> org.gbrown.wristcode -demo -screen new # new thread
|
|
```
|
|
|
|
`screenshots/` holds the screens captured this way.
|
|
|
|
## Layout
|
|
|
|
| Path | Job |
|
|
| --- | --- |
|
|
| `WristCodeApp.swift` | App entry, root navigation, `WKApplicationDelegate` for APNs registration |
|
|
| `AppModel.swift` | Paired, demo or unpaired; navigation path; the feed; 401 sends you back to pairing |
|
|
| `API/GatewayClient.swift` | `GatewayAPI` protocol and the URLSession client |
|
|
| `API/Models.swift` | Codable mirror of the contract |
|
|
| `Auth/DeviceStore.swift` | Device token and gateway URL in the Keychain |
|
|
| `Demo/DemoGateway.swift` | In-memory gateway with fixtures |
|
|
| `Views/` | Pair, Feed, Thread, New thread, and the mock B theme |
|
|
| `Notifications/NotificationHandler.swift` | Categories `approval`, `finished`, `failed`, `input`, `host` and their actions |
|