home / skills / nonameplum / agent-skills / swift-observation
This skill helps Swift developers model observable state with @Observable and manage change tracking for SwiftUI and async observers.
npx playbooks add skill nonameplum/agent-skills --skill swift-observationReview the files below or copy the command above to add this skill to your agents.
---
name: swift-observation
description: Apple Observation framework for Swift. Use when modeling observable state with the `@Observable` macro, tracking changes with `withObservationTracking`, integrating with SwiftUI, or working with ObservationRegistrar and Observations async sequences.
---
# Observation
## What to open
- Use `swift-observation/observation.md` for full API details and examples.
- Search within it for `@Observable`, `withObservationTracking`, `ObservationRegistrar`, `Observations`, and `ObservationIgnored`.
- Use `swift-observation/observations_pre_iOS_26_backport.md` for availability notes and backport discussion.
- Use `swift-observation/Observation/` source files to inspect the `Observations` implementation and any supporting runtime pieces when evaluating backport feasibility.
## Workflow
- Prefer `@Observable` to make models observable; do not conform to `Observable` manually.
- Read properties inside `withObservationTracking` to define the dependency set.
- Use `ObservationIgnored` for properties that should not trigger updates.
- Use `Observations` when you need async change streams.
## SwiftUI usage
- For SwiftUI, treat `@Observable` models as the source of truth and let the view read the properties it needs.
- Use `withObservationTracking` for non-SwiftUI rendering or custom observers.
## Availability and backport notes
- `Observations` is available on iOS 26+; plan for fallbacks on earlier OSes.
- For pre-iOS 26 support, consider community backports or vendor forks; see `swift-observation/observations_pre_iOS_26_backport.md` for options and caveats.
This skill documents the Apple Observation framework for Swift and explains how to model observable state with the @Observable macro, track reads with withObservationTracking, and consume change streams with Observations. It clarifies integration points with SwiftUI and provides guidance on using ObservationRegistrar, ObservationIgnored, and async Observations sequences. It also highlights availability and backport considerations for pre-iOS 26 targets.
Mark types with the @Observable macro to automatically generate observation metadata so property reads and writes can be tracked without manual conformance. Use withObservationTracking to run code while recording which observable properties were read, building a dependency set for selective updates. ObservationRegistrar and observation sequences provide programmatic registration and async streams of changes for non-UI observers. ObservationIgnored marks properties that should not participate in observation so reads/writes don’t trigger observers.
When should I use withObservationTracking vs relying on SwiftUI reads?
Use withObservationTracking for non-SwiftUI code paths or when you need an explicit dependency set. For SwiftUI, let the view read what it needs and the framework will track reads automatically.
How do I handle older OS targets that lack Observations?
Provide a compatibility layer: either use a community backport or vendor fork with documented caveats, or implement a no-op/fallback path that preserves behavior for older systems.