Skip to content

LiveAudioServer-v0.1.5

Latest

Choose a tag to compare

@dsward2 dsward2 released this 10 Jun 06:51
· 3 commits to main since this release
bb61a11

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

  • LiveAudioServerCore SwiftPM library product. Depend on this
    repo and import LiveAudioServerCore from a host target. The CLI is
    unchanged; library consumers do not pull in or build the executable.
  • Public LiveAudioServer lifecycle API. Construct a
    LiveAudioServerConfig, instantiate LiveAudioServer(config:), then
    try await server.start() / await server.stop(). All orchestration
    that used to live inside the CLI's main() is encapsulated on the
    type. Errors surface as LiveAudioServerError instead of
    exit(1) / stderr writes.
  • Pluggable logger sink. Library consumers get a SilentLogger by
    default — no unexpected stderr output from the embedded server. Drop
    in StderrLogger() (or your own LiveAudioServerLogger) via
    LiveAudioServerLogging.logger to see library log lines.
  • Sendable conformance on LiveAudioServer and PCMReader for
    cleaner Swift Concurrency interop in host apps.
  • ServerConfig.tlsIdentity: sec_identity_t?. Host apps can hand
    an already-loaded sec_identity_t to LiveAudioServer instead of a
    .p12 path. When set, it takes precedence over tlsIdentityPath /
    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:) and TLSIdentityError are
    now public.
    Host apps that prefer to load their own .p12 from
    disk can share the exact loader the CLI uses instead of duplicating
    PKCS#12 → sec_identity_t plumbing.
  • @executable_path/../Frameworks rpath 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
    system openssl so no binary fixture is checked in.

Bug fixes

  • scripts/release.sh no longer accidentally captures a progress
    echo into the bin-path variable 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, --config file, or argument changes.
    Existing CLI scripts continue to work unmodified.
  • API additions are purely additive; existing
    LiveAudioServerConfig constructions compile unchanged.

Install / upgrade

  • CLI users: download
    LiveAudioServer-v0.1.5-macos-universal.zip from this release and
    follow the README's "Install — pre-built binary" instructions.
  • Homebrew tap users: bump the formula's url / sha256 to point
    at the v0.1.5 tarball, then brew upgrade dsward2/tap/liveaudioserver.
  • SwiftPM consumers (new since v0.1.2):
    .package(url: "https://github.com/dsward2/LiveAudioServer.git", from: "0.1.5")