SecureStorageSample/SecureStorageSample Watch App
2026-01-19 09:00:14 -06:00
..
Assets.xcassets Add ContentView, UserProfile, SecureStorageSample_Watch_AppApp, WatchConnectivityService (+13 more); Remove Value 2026-01-19 09:00:11 -06:00
Protocols Add WatchDataHandling, handle, UserProfileWatchHandler, registerDefaultHandlers (+6 more); Remove UserProfile, updateProfile, FileDirectory, hash 2026-01-19 09:00:11 -06:00
Services Update SecureStorageSample Watch App, SecureStorgageSample 2026-01-19 09:00:13 -06:00
State Add WatchDataHandling, handle, UserProfileWatchHandler, registerDefaultHandlers (+6 more); Remove UserProfile, updateProfile, FileDirectory, hash 2026-01-19 09:00:11 -06:00
ContentView.swift Add WatchDataHandling, handle, UserProfileWatchHandler, registerDefaultHandlers (+6 more); Remove UserProfile, updateProfile, FileDirectory, hash 2026-01-19 09:00:11 -06:00
README.md Add MyDataWatchHandler, handle 2026-01-19 09:00:13 -06:00
SecureStorageSample Watch App.entitlements Add SecureStorageSample Watch App 2026-01-19 09:00:14 -06:00
SecureStorageSampleApp.swift Add ContentView, UserProfile, SecureStorageSample_Watch_AppApp, WatchConnectivityService (+13 more); Remove Value 2026-01-19 09:00:11 -06:00

SecureStorageSample Watch App

A watchOS companion app demonstrating data synchronization with the iOS app using WatchConnectivity.

Overview

This watch app receives UserProfile data synced from the paired iPhone via WCSession.updateApplicationContext. It does not use LocalData directly for storage—instead, it displays synced data in memory.

Architecture

SecureStorageSample Watch App/
├── ContentView.swift           # Displays synced profile data
├── SecureStorageSampleApp.swift
├── Protocols/
│   └── WatchDataHandling.swift # Protocol for payload handlers
├── State/
│   └── WatchProfileStore.swift # Holds synced profile in memory
└── Services/
    ├── WatchConnectivityService.swift
    └── Handlers/
        └── UserProfileWatchHandler.swift

Data Flow

  1. iOS app calls SyncHelper when storing data with syncPolicy: .automaticSmall or .manual
  2. SyncHelper sends data via WCSession.updateApplicationContext
  3. Watch app receives context in WatchConnectivityService
  4. The service dispatches each payload key to its registered WatchDataHandling handler
  5. UserProfileWatchHandler decodes the profile and updates WatchProfileStore

Adding New Sync Payloads

  1. Create a new handler conforming to WatchDataHandling:
struct MyDataWatchHandler: WatchDataHandling {
    let key = "myData"
    
    func handle(data: Data) {
        // Decode and update state
    }
}
  1. Register it in WatchConnectivityService.registerDefaultHandlers()

Limitations

  • No persistent storage on watch: Data is held in memory only
  • One-way sync: Watch receives data from iPhone; it does not send data back
  • Simulator limitations: WatchConnectivity may not work reliably in the simulator

Requirements

  • watchOS 10.0+
  • Paired with iOS app via WatchConnectivity