LiveAudioServer v0.1.5
This release bundles two host-app embedding tracks that landed since
v0.1.2: a SwiftPM library product with a public lifecycle API, and a
TLS-identity injection path so an embedder can share one self-signed
certificate across multiple in-process listeners. The CLI itself is
unchanged.
What's new — Library / embedding
LiveAudioServerCoreSwiftPM library product. Depend on this
repo andimport LiveAudioServerCorefrom a host target. The CLI is
unchanged; library consumers do not pull in or build the executable.- Public
LiveAudioServerlifecycle API. Construct a
LiveAudioServerConfig, instantiateLiveAudioServer(config:), then
try await server.start()/await server.stop(). All orchestration
that used to live inside the CLI'smain()is encapsulated on the
type. Errors surface asLiveAudioServerErrorinstead of
exit(1)/ stderr writes. - Pluggable logger sink. Library consumers get a
SilentLoggerby
default — no unexpected stderr output from the embedded server. Drop
inStderrLogger()(or your ownLiveAudioServerLogger) via
LiveAudioServerLogging.loggerto see library log lines. Sendableconformance onLiveAudioServerandPCMReaderfor
cleaner Swift Concurrency interop in host apps.ServerConfig.tlsIdentity: sec_identity_t?. Host apps can hand
an already-loadedsec_identity_tto LiveAudioServer instead of a
.p12path. When set, it takes precedence overtlsIdentityPath/
tlsPassword. Lets the host own the certificate lifecycle —
generation, storage in App Support, rotation — and reuse the same
identity for every listener in the process.loadTLSIdentity(p12Path:password:)andTLSIdentityErrorare
now public. Host apps that prefer to load their own.p12from
disk can share the exact loader the CLI uses instead of duplicating
PKCS#12 →sec_identity_tplumbing.@executable_path/../Frameworksrpath added to the executable
target so the built binary can resolve sibling dylibs in a standard
bundle layout — relevant to host apps that ship the CLI alongside
their.app.- README gains two new sections: "Use as a Swift Package" and
"Embedding in a host app," each with a minimal recipe.
What's new — Other
- Library-API integration tests that drive
start()→ real HTTP
request →stop()end-to-end on an ephemeral port, plus
isRunning/ double-start / no-op-stop coverage. - TLS-identity-resolution tests covering the injected-wins,
path-fallback, and no-identity-returns-nil cases — including an
end-to-end test that synthesizes a self-signed PKCS#12 via the
systemopensslso no binary fixture is checked in.
Bug fixes
scripts/release.shno longer accidentally captures a progress
echointo thebin-pathvariable when running a fresh build,
which previously broke signing on a clean checkout.
Compatibility
- macOS 13 (Ventura) or later — unchanged from v0.1.2.
- No CLI flag, HTTP endpoint,
--configfile, or argument changes.
Existing CLI scripts continue to work unmodified. - API additions are purely additive; existing
LiveAudioServerConfigconstructions compile unchanged.
Install / upgrade
- CLI users: download
LiveAudioServer-v0.1.5-macos-universal.zipfrom this release and
follow the README's "Install — pre-built binary" instructions. - Homebrew tap users: bump the formula's
url/sha256to point
at the v0.1.5 tarball, thenbrew upgrade dsward2/tap/liveaudioserver. - SwiftPM consumers (new since v0.1.2):
.package(url: "https://github.com/dsward2/LiveAudioServer.git", from: "0.1.5")