Skip to content

Releases

v2.2.7

Choose a tag to compare

@oznetmaster oznetmaster released this 06 Nov 17:46

2.2.7 — 2026-11-06

  • Verify the accessory's SRP proof and identity signature during HAP Pair Setup. Require the final Pair Verify acknowledgement before opening an MRP or AirPlay session.
  • Close an AirPlay connection when a sent request times out or is cancelled so a late reply cannot be delivered to the next request.
  • Cache MRP artwork by its requested size and retry failed artwork fetches.
  • Save desktop auto-connect preferences separately from pairing credentials. Both WPF reference apps accept existing credential files, preserve unknown fields, and write a complete replacement before replacing a saved record.

v2.2.6

Choose a tag to compare

@github-actions github-actions released this 22 Sep 14:11

[2.2.6] - 2026-09-22

  • Update stable Protobuf and Microsoft compatibility dependencies while retaining net472 support and the existing public API.
  • Pin desktop sample credential JSON property names with attributes, preserving previously saved pairing files.
  • Retain plist-cil 2.2.0 because newer releases do not support .NET Framework 4.7.2.

NUnit 5 test package 1.1.0 - 1 October 2026

This is a test-tooling update attached to the existing release. Product binaries, product version and NuGet packages are unchanged.

Processor test package | Documentation | Validation receipt | Build sources | SHA-256 checksums

Uses NUnit 5.0.0. 237 offline cases passed in each of two runs from the packaged assembly on Windows. All packaged suite identities were checked against source discovery. Live/manual and processor runtime tests were not repeated for this migration; previous hardware results do not certify this package. The test package version is independent of the product version.

v2.2.5

Choose a tag to compare

@github-actions github-actions released this 16 Aug 10:40

[2.2.5] - 2026-08-17

Fixed

  • Fixed a missing runtime dependency: AppleTv.Hap is not itself packed (IsPackable=false), so it
    never produces its own .nuspec. Its ProjectReference from AppleTvControlLibrary and
    AppleTvControlLibrary.Mrp is marked PrivateAssets=all (added in 2.2.3 to stop a phantom
    AppleTv.Hap package dependency), which also suppressed AppleTv.Hap's transitive
    BouncyCastle.Cryptography dependency from flowing into either package's .nuspec. Since the
    bundled AppleTv.Hap.dll's SrpAuthHandler/Chacha20Cipher require BouncyCastle.Cryptography
    at runtime, consumers who didn't already reference it separately could fail with a
    TypeLoadException when HAP pairing/encryption code executed. BouncyCastle.Cryptography 2.7.0
    is now declared explicitly as a direct dependency of both AppleTvControlLibrary and
    AppleTvControlLibrary.Mrp so NuGet restores it for all consumers. Packaging only - no
    functional or public API changes.

v2.2.4

Choose a tag to compare

@github-actions github-actions released this 16 Aug 05:29

[2.2.4] - 2026-08-16

Fixed

  • Fixed the bundled AppleTv.Hap.dll's assembly version always being 1.0.0.0 regardless of the
    package release version. AppleTv.Hap is not itself packed (IsPackable=false), so it never went
    through the "Pack NuGet packages" step that stamps the other packages with the release tag's
    version; it had no Version property of its own and defaulted to 1.0.0.0. AppleTv.Hap.csproj
    now carries the same shared Version as the packable projects, and the release workflow's
    "Build solution" step now passes -p:Version so the bundled DLL is stamped with the actual
    release version at build time. Packaging only - no functional or public API changes.

v2.2.3

Choose a tag to compare

@github-actions github-actions released this 16 Aug 04:17

[2.2.3] - 2026-08-16

Fixed

  • Fixed a NuGet packaging bug: AppleTvControlLibrary and AppleTvControlLibrary.Mrp both reference
    the internal AppleTv.Hap project, which is not itself published as a NuGet package
    (IsPackable=false). Because the reference was a plain ProjectReference, NuGet emitted a
    dependency on a nonexistent AppleTv.Hap package in the generated .nuspec, which would fail to
    restore for any consumer installing from nuget.org. AppleTv.Hap.dll is now bundled directly into
    each package's lib/net472 and lib/net10.0 folders instead, and the phantom dependency entry is
    gone.
  • Marking the AppleTv.Hap ProjectReference as PrivateAssets=all to fix the issue above also
    blocked transitive compile-time access to AppleTv.Hap types for repository projects that use its
    namespaces (AppleTvControlLibrary.Auth, .Tlv8, .Opack, .Crypto) directly. Added direct
    AppleTv.Hap project references to every affected downstream project (tests, CLI tools, WPF apps)
    so the solution builds cleanly again.
  • Note: an earlier v2.2.2 tag was cut for the first fix above but never completed a successful
    build/publish, so no 2.2.2 package was ever released; 2.2.3 is the first release to include
    this fix. Packaging only - no functional or public API changes.

v2.2.1

Choose a tag to compare

@github-actions github-actions released this 15 Aug 12:43

[2.2.1] - 2026-08-14

Changed

  • Removed further allocation-heavy BitConverter/LINQ/array-copy patterns identified in a follow-up
    review: OPACK float/double pack and unpack in AppleTvControlLibrary (HAP layer) now read/write
    directly through the ReadOnlySpan<byte>/Span<byte> via MemoryMarshal/BinaryPrimitives
    instead of allocating a temporary array per field; MRP protobuf varint encode/decode
    (AppleTvControlLibrary.Mrp) now uses a stackalloc buffer instead of recursive per-byte
    allocations; and HTTP/RTSP message formatting (AppleTvControlLibrary.Mrp) now encodes headers
    directly into the final combined buffer instead of an intermediate array. This is an internal
    efficiency pass only; no public API or wire behavior changed, and all existing tests pass
    unmodified on both net472 and net10.0.

v2.2.0

Choose a tag to compare

@github-actions github-actions released this 15 Aug 09:51

[2.2.0] - 2026-08-14

Changed

  • Converted allocation-heavy hex decode, DNS TXT/name parsing, mDNS flag-string parsing, and
    HTTP/RTSP header parsing to use Span<T>/ReadOnlySpan<T> instead of Substring and per-value
    byte-array copies (AppleTvControlLibrary.Discovery, AppleTvControlLibrary HAP layer, and
    AppleTvControlLibrary.Mrp). This is an internal efficiency pass only; no public API or wire
    behavior changed, and all existing tests pass unmodified on both net472 and net10.0.

v2.1.1

Choose a tag to compare

@github-actions github-actions released this 14 Aug 14:28

[2.1.1] - 2026-08-14

Changed

  • Restored the "all packages share one version" policy: every published NuGet package -
    AppleTvControlLibrary, AppleTvControlLibrary.Discovery, AppleTvControlLibrary.All, and
    AppleTvControlLibrary.Mrp - is now bumped to 2.1.1 together, and the release workflow's pack
    step once again forces the release tag's version onto every package (overriding each project's
    own <Version>), rather than letting each project's .csproj version drift independently. The
    brief per-project versioning scheme introduced to fix the AppleTvControlLibrary.Mrp 1.0.0/2.0.0
    mismatch (see [2.0.1] below) is superseded by this entry.

v2.1.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 13:06

[2.1.0] - 2026-08-14

Changed

  • AppleTvControlLibrary.All now installs all three independent libraries -
    AppleTvControlLibrary (Companion Link), AppleTvControlLibrary.Mrp (MRP), and
    AppleTvControlLibrary.Discovery (mDNS discovery for both protocols) - instead of only the
    Companion Link and Discovery packages. Bumped to 2.1.0.
  • Fixed three XML doc <see cref> references in AppleTvControlLibrary.Mrp (AirPlayMrpConnection,
    IMrpFrameConnection, MrpProtocol) that could not be resolved and produced InvalidCref build
    warnings. Documentation-only change; no public API or behavior change.

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Aug 12:44

[2.0.0] - 2026-08-05

Added

  • AppleTvControlLibrary.Mrp, a new client library for Apple TV's MRP (Media Remote Protocol),
    tunneled over AirPlay 2, providing now-playing metadata (title, artist, album, artwork,
    position, playback rate) and playback control (play/pause/skip/seek, volume). Pairing and
    channel encryption reuse the shared AppleTv.Hap HAP pair-setup/pair-verify and
    ChaCha20-Poly1305 library, extracted from the Companion Link library so both protocols share one
    crypto/pairing implementation.
  • AppleTv.Remote.Mrp.Wpf, a WPF reference host for MRP: pairing, connecting, and a now-playing UI
    with capability-gated transport controls.
  • tools/AppleTV.AirPlay.ScanTool and tools/AppleTV.AirPlay.RemoteTool, command-line utilities
    for AirPlay discovery and MRP remote control.
  • tools/AppleTV.Mrp.ScanTool, a command-line utility for locating MRP-over-AirPlay devices, built
    on the new IMrpDiscovery/MulticastMrpDiscovery mDNS discovery added to the existing
    AppleTvControlLibrary.Discovery package (no separate discovery package was needed).
  • tests/AppleTv.Mrp.Tests and tests/AppleTv.Mrp.FakeDevice, a full MSTest suite (multi-targeted
    net472/net10.0) covering MRP pairing, protocol framing, player-state tracking, artwork
    fetch/fallback, push updates, and power-state derivation against an in-process fake Apple TV.
  • tests/AppleTv.Hap.Tests, unit tests for the shared HAP pairing/crypto library.
  • MRP documentation: new DocFX articles (overview, getting started, pairing and credentials,
    compatibility and limitations) and an MRP API reference section, published alongside the
    existing Companion Link documentation at the same GitHub Pages site.
  • Root README.md now documents both libraries, the shared AppleTv.Hap dependency, both WPF
    reference hosts, and a combined tools-and-tests overview.

Changed

  • Extracted shared HAP crypto/pairing code (SRP, TLV8, Ed25519/X25519, ChaCha20-Poly1305 helpers)
    out of the Companion Link library into a new shared AppleTv.Hap library, consumed by both
    AppleTvControlLibrary and AppleTvControlLibrary.Mrp.
  • Bumped AppleTvControlLibrary, AppleTvControlLibrary.Discovery, AppleTvControlLibrary.All,
    and AppleTvControlLibrary.Mrp to 2.0.0 to mark this repository-wide release.
  • The publish workflow now packs and publishes AppleTvControlLibrary.Mrp alongside the Companion
    Link packages, and builds/publishes AppleTv.Remote.Mrp.Wpf release assets alongside
    AppleTv.Remote.Wpf.