Repository navigation
Releases
Releases · oznetmaster/AppleTVControlLibrary
v2.2.7
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
[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
[2.2.5] - 2026-08-17
Fixed
- Fixed a missing runtime dependency:
AppleTv.Hapis not itself packed (IsPackable=false), so it
never produces its own.nuspec. ItsProjectReferencefromAppleTvControlLibraryand
AppleTvControlLibrary.Mrpis markedPrivateAssets=all(added in 2.2.3 to stop a phantom
AppleTv.Happackage dependency), which also suppressedAppleTv.Hap's transitive
BouncyCastle.Cryptographydependency from flowing into either package's.nuspec. Since the
bundledAppleTv.Hap.dll'sSrpAuthHandler/Chacha20CipherrequireBouncyCastle.Cryptography
at runtime, consumers who didn't already reference it separately could fail with a
TypeLoadExceptionwhen HAP pairing/encryption code executed.BouncyCastle.Cryptography 2.7.0
is now declared explicitly as a direct dependency of bothAppleTvControlLibraryand
AppleTvControlLibrary.Mrpso NuGet restores it for all consumers. Packaging only - no
functional or public API changes.
v2.2.4
[2.2.4] - 2026-08-16
Fixed
- Fixed the bundled
AppleTv.Hap.dll's assembly version always being1.0.0.0regardless of the
package release version.AppleTv.Hapis 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 noVersionproperty of its own and defaulted to1.0.0.0.AppleTv.Hap.csproj
now carries the same sharedVersionas the packable projects, and the release workflow's
"Build solution" step now passes-p:Versionso the bundled DLL is stamped with the actual
release version at build time. Packaging only - no functional or public API changes.
v2.2.3
[2.2.3] - 2026-08-16
Fixed
- Fixed a NuGet packaging bug:
AppleTvControlLibraryandAppleTvControlLibrary.Mrpboth reference
the internalAppleTv.Happroject, which is not itself published as a NuGet package
(IsPackable=false). Because the reference was a plainProjectReference, NuGet emitted a
dependency on a nonexistentAppleTv.Happackage in the generated.nuspec, which would fail to
restore for any consumer installing from nuget.org.AppleTv.Hap.dllis now bundled directly into
each package'slib/net472andlib/net10.0folders instead, and the phantom dependency entry is
gone. - Marking the
AppleTv.HapProjectReferenceasPrivateAssets=allto fix the issue above also
blocked transitive compile-time access toAppleTv.Haptypes for repository projects that use its
namespaces (AppleTvControlLibrary.Auth,.Tlv8,.Opack,.Crypto) directly. Added direct
AppleTv.Happroject references to every affected downstream project (tests, CLI tools, WPF apps)
so the solution builds cleanly again. - Note: an earlier
v2.2.2tag was cut for the first fix above but never completed a successful
build/publish, so no2.2.2package was ever released;2.2.3is the first release to include
this fix. Packaging only - no functional or public API changes.
v2.2.1
[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 inAppleTvControlLibrary(HAP layer) now read/write
directly through theReadOnlySpan<byte>/Span<byte>viaMemoryMarshal/BinaryPrimitives
instead of allocating a temporary array per field; MRP protobuf varint encode/decode
(AppleTvControlLibrary.Mrp) now uses astackallocbuffer 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 bothnet472andnet10.0.
v2.2.0
[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 useSpan<T>/ReadOnlySpan<T>instead ofSubstringand per-value
byte-array copies (AppleTvControlLibrary.Discovery,AppleTvControlLibraryHAP 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 bothnet472andnet10.0.
v2.1.1
[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.csprojversion drift independently. The
brief per-project versioning scheme introduced to fix theAppleTvControlLibrary.Mrp1.0.0/2.0.0
mismatch (see[2.0.1]below) is superseded by this entry.
v2.1.0
[2.1.0] - 2026-08-14
Changed
AppleTvControlLibrary.Allnow 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 inAppleTvControlLibrary.Mrp(AirPlayMrpConnection,
IMrpFrameConnection,MrpProtocol) that could not be resolved and producedInvalidCrefbuild
warnings. Documentation-only change; no public API or behavior change.
v2.0.0
[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 sharedAppleTv.HapHAP 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.ScanToolandtools/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 newIMrpDiscovery/MulticastMrpDiscoverymDNS discovery added to the existing
AppleTvControlLibrary.Discoverypackage (no separate discovery package was needed).tests/AppleTv.Mrp.Testsandtests/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.mdnow documents both libraries, the sharedAppleTv.Hapdependency, 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 sharedAppleTv.Haplibrary, consumed by both
AppleTvControlLibraryandAppleTvControlLibrary.Mrp. - Bumped
AppleTvControlLibrary,AppleTvControlLibrary.Discovery,AppleTvControlLibrary.All,
andAppleTvControlLibrary.Mrpto 2.0.0 to mark this repository-wide release. - The publish workflow now packs and publishes
AppleTvControlLibrary.Mrpalongside the Companion
Link packages, and builds/publishesAppleTv.Remote.Mrp.Wpfrelease assets alongside
AppleTv.Remote.Wpf.