initial commit
This commit is contained in:
44
_bmad-output/implementation-artifacts/7-7-icloud-sync.md
Normal file
44
_bmad-output/implementation-artifacts/7-7-icloud-sync.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
epic: 7
|
||||
story: 7.7
|
||||
title: "iCloud Sync"
|
||||
status: draft
|
||||
---
|
||||
|
||||
## Epic 7 — macOS App (Swift/SwiftUI)
|
||||
**Goal:** A beautiful, native macOS app that feels like it belongs on the platform.
|
||||
|
||||
### Story 7.7: iCloud Sync
|
||||
|
||||
As a **macOS user** with multiple Apple devices,
|
||||
I want my CalcPad settings and sheets to sync via iCloud,
|
||||
So that I can access my calculations on any device without manual import/export.
|
||||
|
||||
**Acceptance Criteria:**
|
||||
|
||||
**Given** the user is signed into iCloud on two Macs
|
||||
**When** the user changes a CalcPad setting (e.g., angle mode) on Mac A
|
||||
**Then** the setting syncs to Mac B via `NSUbiquitousKeyValueStore`
|
||||
**And** Mac B reflects the updated setting without restarting
|
||||
|
||||
**Given** the user creates a new sheet on Mac A
|
||||
**When** iCloud sync completes
|
||||
**Then** the sheet appears in the sidebar on Mac B
|
||||
|
||||
**Given** the user edits a sheet on Mac A while Mac B is offline
|
||||
**When** Mac B comes online
|
||||
**Then** the changes sync to Mac B and the sheet is updated
|
||||
|
||||
**Given** the user edits different lines of the same sheet on Mac A and Mac B simultaneously
|
||||
**When** both devices sync
|
||||
**Then** non-overlapping edits are merged successfully
|
||||
**And** the final document contains both sets of changes
|
||||
|
||||
**Given** the user edits the same line on Mac A and Mac B simultaneously
|
||||
**When** both devices sync
|
||||
**Then** a last-write-wins strategy is applied
|
||||
**And** no data corruption occurs (one version is chosen cleanly)
|
||||
|
||||
**Given** the user is not signed into iCloud
|
||||
**When** the app launches
|
||||
**Then** sheets are stored locally only and no sync errors are shown
|
||||
Reference in New Issue
Block a user