FO
ForgeObservers
Swift Package v1.0.0

ForgeObservers

Reactive system observers for iOS.
Protocol-oriented. AsyncStream-powered. Thread-safe.

$ .package(url: "...ForgeObservers", from: "1.0.0")

Quick Example

NetworkViewModel.swift
import ForgeObservers

@Observable
final class NetworkViewModel {
    private let connectivity: ConnectivityObserving

    var isOffline = false
    var isOnWifi = false

    init(connectivity: ConnectivityObserving) {
        self.connectivity = connectivity
    }

    func startObserving() async {
        for await status in connectivity.statusStream {
            isOffline = !status.isConnected
            isOnWifi = status.interface == .wifi
        }
    }
}

Why ForgeObservers

{ }

Protocol-Oriented

protocol ConnectivityObserving
protocol AppLifecycleObserving
protocol KeyboardObserving

Every observer has a protocol. Depend on abstractions, swap implementations in tests.

~>

AsyncStream

.statusStream // connectivity
.stateStream // lifecycle
.localeStream // locale

All observers expose reactive AsyncStreams. Subscribe and get updates as they happen.

</>

Thread Safe

// Any thread, any queue
lock.withLock { _status }

Every observer is internally synchronized. Read state from any thread, any queue.

Forge Ecosystem