Agent-skills-standard ios-state-management

Implement reactive state with Combine, Observation framework, and UDF patterns. Use when implementing state management with Combine, @Observable, or reactive patterns in iOS. (triggers: **/*.swift, Observable, @Published, PassthroughSubject, @Observable, @Namespace)

install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/ios/ios-state-management" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-ios-state-management && rm -rf "$T"
manifest: skills/ios/ios-state-management/SKILL.md
source content

iOS State Management

Priority: P0

Implementation Workflow

  1. Choose observation approach — Use
    @Observable
    (iOS 17+) for modern SwiftUI;
    Combine
    with
    @Published
    for UIKit or broader compatibility.
  2. Expose state clearly — Use UDF pattern: ViewModel exposes
    Input
    enum (events) and
    Output
    struct (state).
  3. Manage subscriptions — Store Combine subscriptions in
    Set<AnyCancellable>
    with
    .store(in: &cancellables)
    .
  4. Dispatch to main thread — Use
    @MainActor
    or
    .receive(on: DispatchQueue.main)
    for UI updates.
  5. Use exhaustive ViewState — Prefer single
    ViewState
    enum (
    .loading
    ,
    .success(data)
    ,
    .error(failure)
    ).

See Combine and Observation framework examples

Anti-Patterns

  • No Uncleared Subscriptions: Always use
    .store(in: &cancellables)
  • No Background UI Updates: Use
    .receive(on: .main)
    or
    @MainActor
  • No Manual
    objectWillChange.send()
    : Use
    @Published
    or
    @Observable
    instead

References