<!-- llms-explorer concept facts · https://llms-explorer.com/tree/scdynamicstore-and-nwpathmonitor-event-driven-change-detection-replacing-fixed-interval-probing/ · pack 2026-10-02 · ~527 tokens -->

# SCDynamicStore and NWPathMonitor event-driven change detection replacing fixed-interval probing

> Source-anchored research for SCDynamicStore and NWPathMonitor event-driven change detection replacing fixed-interval probing. Run status: COMPLETED.

Parent: [Mac App Store Readiness: Residual Gaps for Sandboxed Monitors](https://llms-explorer.com/tree/mac-appstore-readiness-residual-gaps/) · 3 facets · 4 facts · page: https://llms-explorer.com/tree/scdynamicstore-and-nwpathmonitor-event-driven-change-detection-replacing-fixed-interval-probing/

## How it works

- NWPathMonitor reports path status (satisfied, unsatisfied, requiresConnection), interface types, isExpensive/isConstrained, and supportsIPv4/supportsIPv6/supportsDNS; it calls pathUpdateHandler on the monitor's dispatch queue when the path changes. (medium confidence) — [source](https://useyourloaf.com/blog/network-path-monitoring/)
- In one third-party sandbox (Claude Code's profile, not the Mac App Store App Sandbox), SCDynamicStoreCreate returned NULL because the Mach service com.apple.SystemConfiguration.configd was blocked; this shows SCDynamicStore depends on configd IPC but says nothing definitive about App Sandbox. (low confidence) (verified as of 2026-10-02) — [source](https://github.com/anthropics/claude-code/issues/26879)

## Comparisons and alternatives

- Apple DTS (2018) says both SCNetworkReachability and NWPathMonitor can give false positives and false negatives and suffer TOCTTOU, so use path events as a hint and confirm with a real operation rather than gating behavior on them. (low confidence) — [source](https://developer.apple.com/forums/thread/105822)

## Facts and statements

- SCDynamicStore change detection from Python: create a store with a callback, call SCDynamicStoreSetNotificationKeys for keys like State:/Network/Global/IPv4 and State:/Network/Global/IPv6, add the store's run-loop source to a CFRunLoop; under PyObjC the context argument is an arbitrary Python object. (medium confidence) — [source](https://chris.improbable.org/2009/03/13/using-systemconfiguration-events-within-python/)
