Expand description
§systemconfiguration-rs
Safe Rust bindings for Apple’s SystemConfiguration.framework on macOS.
Version 0.2.1 continues the screencapturekit-rs-style Swift bridge
introduced in 0.2.0: Cargo builds a small SwiftPM static library, Rust owns
opaque retained handles, and the public API stays ergonomic on the Rust side.
If you still need low-level C symbols, enable the raw-ffi feature.
§Covered areas
systemconfiguration-rs now ships safe wrappers for the logical areas covered
by the 0.2.1 bridge release:
DynamicStoreNetworkConfigurationoverview helpersNetworkConnectionReachability/NetworkReachabilityPreferencesSchemaNetworkServiceNetworkSetNetworkInterfaceBondInterfaceVlanInterfaceNetworkProtocolConsoleUserCaptiveNetworkSystemConfigurationerror helpers
See COVERAGE.md for the per-header audit, including the APIs that are still partial or intentionally skipped on macOS.
§Installation
[dependencies]
systemconfiguration-rs = "0.2"Enable raw C access when needed:
[dependencies]
systemconfiguration-rs = { version = "0.2", features = ["raw-ffi"] }The crate name is systemconfiguration-rs; the Rust library name is
systemconfiguration.
§Quick start
use systemconfiguration::{DynamicStore, NetworkConfiguration, Reachability};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let store = DynamicStore::new("com.example.systemconfiguration-rs")?;
println!("computer_name={:?}", store.computer_name());
let reachability = Reachability::with_name("apple.com")?;
println!("apple.com => {}", reachability.flags()?);
let overview = NetworkConfiguration::overview()?;
println!(
"interfaces={} services={} current_set={:?}",
overview.interface_count,
overview.service_count,
overview.current_set_name
);
Ok(())
}§Highlights
- Swift bridge primary implementation with one Swift file per logical area
- Safe Rust wrappers for property lists, preferences sessions, dynamic-store callbacks, services, sets, interfaces, bond/VLAN configuration, network connections, reachability, captive-network helpers, console-user lookup, and SystemConfiguration error helpers
raw-ffifeature preserving direct access to the underlying C APIs already declared by the crate- 11 numbered examples under
examples/and 12 smoke tests undertests/
§Architecture
build.rsbuildsswift-bridge/Package.swiftinto a static library and links it into the Rust crate.- Swift bridge entry points are
@_cdeclfunctions returning C primitives or opaque retained pointers. - Rust owns those handles via
OwnedHandleinsrc/bridge.rsand releases them through shared bridge retain/release functions. - Some structured results are serialized as JSON in Swift and decoded with
serdeon the Rust side.
§Examples
Run all examples exactly as used during verification:
for ex in examples/*.rs; do
cargo run --example "$(basename "$ex" .rs)"
doneHandy entry points:
cargo run --example 01_dynamic_store_overviewcargo run --example 03_network_reachabilitycargo run --example 06_network_servicescargo run --example 11_captive_network
§API notes
- Writing to the dynamic store or preferences can require elevated privileges; read-only smoke examples are used where the host environment denies mutation.
- Apple deprecates
SCNetworkReachability*in favor ofNetwork.framework, but these APIs remain wrapped because they are still widely deployed. CaptiveNetworkdoes not wrapCNCopyCurrentNetworkInfo, because that API is unavailable on modern macOS and generally entitlement-gated.Schema::catalog()now exposes the fullSCSchemaDefinitions.hcatalog inSchemaCatalog::all, while keeping the original curated convenience groups.
§License
Licensed under either of:
- MIT license (LICENSE-MIT)
- Apache License, Version 2.0 (LICENSE-APACHE)
Modules§
Structs§
- Bond
Interface - Bond
Status - Captive
Network - Console
User - Dynamic
Store - Dynamic
Store RunLoop Source - Network
Configuration - Network
Configuration Overview - Network
Connection - Network
Connection User Preferences - Network
Interface - Network
Interface Media Options - Network
Interface MtuInfo - Network
Protocol - Network
Service - Network
Set - Preferences
- Preferences
Notification - Property
List - Reachability
- Reachability
Flags - Schema
- Schema
Catalog - System
Configuration - System
Configuration Error - System
Configuration Last Error - Vlan
Interface