Releases: MustardSeedNetworks/foundation
Release list
v0.5.5
v0.5.4
v0.5.3
0.5.3 (2026-09-04)
Continuous Integration
- add CodeQL analysis and gate on its open alerts (#21) (145a1c5), closes #20
- automate releases with release-please (#19) (24e88d4), closes #18
- give main pushes their own concurrency group (#17) (b2bf510), closes #16
- give the shared security core the gates its consumers already have (#15) (4dcf1a9), closes #14
v0.5.2 — detect redaction from the data
A scan could return with every SSID and BSSID stripped and still be reported as success, because the check was the authorization status alone.
CoreWLAN redacts according to the calling process's own client identity. A bundled executable launched directly rather than through LaunchServices is a different client from its bundle — so the manager can truthfully report that the bundle holds the grant while the scan it returns is stripped. Observed on macOS 27.0: status authorized, 13 networks, not one identifier among them, no error.
DecodeScan now also returns ErrLocationDenied when a scan found networks and named none of them. A real observation always carries a BSSID, so that state is unambiguous. An empty airspace stays a successful empty scan.
This is the failure the package exists to prevent: silently recording signal strengths against nameless BSSIDs, which for a survey looks exactly like data.
v0.5.1 — authorization prompt correction
Corrects the documented reason a background agent is not prompted for Location Services.
v0.5.0 claimed the consent alert only presents for a foreground application. That was wrong. A background agent is prompted normally, provided its bundle carries com.apple.security.personal-information.location.
Under the hardened runtime — which notarization requires — locationd registers the client and then declines to display the dialog without that entitlement, logging "Client has supported the hardened runtime but doesn't have the entitlement". Because the client is still registered, the bundle appears in System Settings and can be enabled by hand, which is why the missing entitlement reads as a platform limitation.
Comment-only; no behaviour change.
v0.5.0 — Location authorization
Adds AuthorizationStatus and RequestAuthorization, plus an Authorization type that names the state instead of leaking a raw CLAuthorizationStatus.
Requesting is what registers an application with locationd, which is what makes it appear in System Settings at all — until it has been called once the permission cannot even be offered.
v0.4.0 — interface control
Extends the binding past scanning so consumers need no shell-outs at all.
Adds Interfaces, SavedNetworks, Associate, Disassociate, SetPower and Forget. SavedNetworks reads CWConfiguration.networkProfiles.
Forget rewrites the stored configuration, an administrative operation that fails without the system-configuration right rather than silently leaving the profile in place.
Uses the instance -[CWWiFiClient interfaceNames]; the class method of the same name has been deprecated since macOS 13.
v0.3.0 — CoreWLAN binding
Adds pkg/corewlan, the shared Apple CoreWLAN binding.
macOS 26 removed the airport CLI that every Mustard Seed product shelled out to for Wi-Fi work. CoreWLAN is the supported replacement and carries no deprecation attributes in the macOS 27 SDK.
CoreWLAN redacts SSID and BSSID unless the process holds Location Services authorization, and a redacted scan does not fail — it returns the right number of networks with correct RSSI and channel and every identifier emptied. DecodeScan maps that onto ErrLocationDenied rather than reporting an empty airspace.