Skip to content

Releases

AetherScreens v2.8.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 23:46

AetherScreens v2.8.0 — Bilingual Localization Completeness, Filter Empty State Recovery, Accessibility Hit Targets & IME Cursor Tracking

Highlights

  • 100% Bilingual Localization Coverage (en & zh-Hans):
    • Added complete English and Simplified Chinese translations for all Quick Snippet editor labels, SSH config import notices, Wake-on-LAN status/error messages, Keychain SSH deletion warnings, and filter reset actions.
    • Subscribed ConnectionHistorySheet to AppLanguageSettings.shared so live language switching updates the history sheet immediately.
  • Filter-Aware Empty State & One-Tap Filter Reset (DeviceListViewModel / DeviceListView):
    • Added DeviceListViewModel.hasActiveFilters and resetFilters() and updated DeviceListView.emptyStateView so zero-result tag or smart filters display "No matching computers" with a one-tap "Reset Filters" button instead of "No computers here yet".
  • HIG Accessibility & Sheet Sizing (DeviceListRowView / QuickSnippetsSheet / TailscaleSettingsSheet):
    • Added VoiceOver .accessibilityLabels and 44×44pt hit targets on DeviceListRowView Wake/Edit actions and QuickSnippetsSheet Send/Edit/Delete buttons, and expanded TailscaleSettingsSheet with flexible minWidth/idealWidth/minHeight/idealHeight bounds.
  • macOS CJK IME Candidate Window Cursor Tracking (MacNativeInputView):
    • Updated MacNativeInputView.firstRect(forCharacterRange:actualRange:) via candidateRectInViewBounds() so macOS input method candidate windows anchor directly at the active cursor position inside the remote desktop view instead of the static window midpoint.

AetherScreens v2.7.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 23:36

AetherScreens v2.7.0 — Networking Lifecycle Hardening, Off-Main-Thread I/O & O(1) Library Tag Caching

Highlights

  • Networking Lifecycle & Pipe Safety (TailscaleClient / WakeOnLANService / BonjourDiscoveryService / HostPortReachabilityProber):
    • Redirected tailscale status --json stderr to FileHandle.nullDevice to prevent pipe buffer deadlocks and added strict path-segment percent-encoding in TailscaleClient.devicesEndpointURL().
    • Guarded WakeOnLANService.wakeDevice against port 0 (NWEndpoint.Port force-unwrap elimination) and added a thread-safe once-completion guard with a 3-second timeout and automatic NWConnection cancellation.
    • Implemented netService(_:didNotResolve:) in BonjourServiceResolver so timed-out mDNS services clean up their resolver key and retry on subsequent browse updates, and cancelled timeout DispatchWorkItems immediately in HostPortReachabilityProber.
  • O(1) Library Tag Cache & Single-Pass Batch Persistence (DeviceStore / DeviceListViewModel):
    • Added DeviceStore.batchUpdateDevices(_:) so reachability probes, SSH config imports, and bulk tag assignments/removals persist once instead of encoding JSON $N$ times.
    • Cached allTags, tagCounts, and filteredDevices in DeviceListViewModel with automatic invalidation on library/filter changes, eliminating $O(T \times D)$ allocations during SwiftUI view evaluations.
  • Off-Main-Thread Screenshot Encoding & Throttled RDP Transfer Progress (SessionViewModel):
    • Moved 4K/5K PNG screenshot encoding and disk writes off @MainActor via saveScreenshotInBackground(), reused a static DateFormatter, and throttled RDP file upload/download progress callbacks via RDPProgressGate.
  • Storage Resilience (ThumbnailStore / ConnectionHistoryStore / QuickSnippetStore / ComputerSyncService):
    • Added generation-tracked allowThumbnails(for:) so re-added/re-imported computers can store new desktop thumbnails while still blocking stale in-flight snapshots from deleted sessions, reconciled stale .active entries on ConnectionHistoryStore.load(), and bounded QuickSnippetStore title/content sizes.

AetherScreens v2.6.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 23:22

AetherScreens v2.6.0 — Protocol Stack, Audio Reassembly, Shared Drive Sandboxing & Memory Hardening

Highlights

  • RDP Audio & Format Hardening (RDPAudioFormat / RDPAudioSession / RDPAudioPlayer):
    • Eliminated a 16-bit integer overflow in RDPAudioFormat.isPCM16Bit when validating channelCount * 2, bounded channel counts (1...8) and sample rates (8,000...192,000 Hz), routed RDPSND packets through RDPStaticVirtualChannelReassembler so fragmented audio PDUs never corrupt the stream, and hardened AVAudioEngineConfigurationChange recovery.
  • O(bits) RSA Certificate Division & Strict MSB Validation (MCSConnectResponse):
    • Replaced repeated subtraction in remainderLittleEndian with $O(\text{bits})$ bitwise shift-and-subtract long division and enforced activeModulus.last != 0 so malformed server RSA blobs cannot stall the preflight thread.
  • Shared Directory Drive Sandbox & Handle Safety (RDPSharedDirectoryDrive):
    • Added lstat symlink inspection in resolveSandboxedURL to block dangling symlinks escaping the shared root, changed handleDelete on directories to use POSIX rmdir() (returning STATUS_DIRECTORY_NOT_EMPTY instead of recursive deletion), bounded open file handles at 4,096 with collision-free ID allocation, and routed RDPDR packets through static virtual channel reassembly.
  • Static & Dynamic Virtual Channel Memory Bounds (RDPStaticVirtualChannelReassembler / ConnectionPreflight):
    • Added automatic buffer reset (keepingCapacity: false) on any malformed fragment, bounded dynamic channel cbTotalDataSize to 64 MB, and fixed MCSDisconnectProviderUltimatumPDU slice index handling.
  • RFB, AppleFileCopy & RDP Client Memory Reclamation (RFBClient / RDPClient / RDPClipboardFileDownloader):
    • Replaced aligned UInt16 pointer loads with .loadUnaligned(as: UInt16.self) in RFBClient, eliminated intermediate Data copies in Tight rectangle decoding, freed readBuffer / decryptedReadBuffer / lastPublishedFiles capacities on disconnect, and replaced uncancelled asyncAfter closures with cancellable DispatchWorkItems in RDPClipboardFileDownloader.

AetherScreens v2.5.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 23:03

AetherScreens v2.5.0 (Build 2026110712)

  • Coalesced Diagnostic Logging & Category Filtering (AppLogger & DiagnosticLogView): Eliminated per-log 600-element array copies and out-of-order @MainActor snapshot resurrection after clear(), added module category filtering (RFB, RDP, Network, Auth, Metal, UI), and cached filteredEntries per render pass.
  • 4K/5K Framebuffer & Metal GPU Texture Reclamation (Framebuffer.reclaimStorage() & MetalScreenRenderer.releaseSessionResources()): Automatically shrinks disconnected session pixel storage to 1×1 (4 bytes) after final thumbnail capture and releases private MTLTexture allocations.
  • Detached Auxiliary Display Window Lifecycle (SessionWindowManager): Automatically closes and releases all detached auxiliary display windows when the parent session window closes, and subscribes AuxiliaryDisplayWindowView to session.frameUpdates.

AetherScreens 2.4.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 17:10

AetherScreens 2.4.0

Highlights / 核心更新

  • 4K/5K Thumbnail Downsampling & Low-Memory Footprint / 4K 缩略图降采样与低内存占用: ThumbnailStore.downsampleImage(_:maxPixelDimension:) scales high-DPI remote frames to <= 480px while preserving exact aspect ratio and bounding memory cache cost.
  • Performance HUD Deduplication & Smoothness / 性能 HUD 去重与流畅度提升: Quantizes moving-average RTT latency to 0.1 ms buckets and provides hasMeaningfulHUDChange so minor network jitter never triggers unnecessary SwiftUI redraws.

Checksums (SHA-256)

  • AetherScreens-macOS-AppleSilicon-v2.4.0.zip: b4cc34791aa7b38e44726fd689a99c057b1495f0c69167fcd59898504a044ea0
  • AetherScreens-macOS-AppleSilicon-v2.4.0.dmg: f4987f86012ecf027b3ca066df37cae36f0c140849aa147610e5f2fc2d122836

AetherScreens 2.3.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 16:58

AetherScreens 2.3.0

Highlights / 核心更新

  • Smart Library Filters / 智能筛选器: Filter your library by Online Only, SSH Tunneled, Tailscale Nodes, or Connected in Last 7 Days with one click.
  • Batch Tagging & Group Wake-on-LAN / 批量标签与分组一键远程唤醒: Added assignTag(_:toDeviceIDs:), removeTag(_:fromDeviceIDs:), and wakeAllDevices(matchingTag:) accessible from the Smart Filter menu and tag capsule context menus.

Checksums (SHA-256)

  • AetherScreens-macOS-AppleSilicon-v2.3.0.zip: 51637f192057497278e72c971ae1ece07cc9e8ae69ececdf8725a22249d72ead
  • AetherScreens-macOS-AppleSilicon-v2.3.0.dmg: c9e383b483c29d7656e2dff5f3de3ff895808292ff1f51d5377f3b3dd3c6dd81

AetherScreens 2.2.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 16:49

AetherScreens 2.2.0

Highlights / 核心更新

  • Per-Device Curtain Mode on Connect / 单设备连接自动开启隐私幕布: Configure curtainOnConnect on individual computers so Curtain Mode automatically engages as soon as a control session connects.
  • Custom Privacy Banner Message / 自定义隐私幕布提示语: Set a custom curtainMessage per device synced across iCloud and portable backups.

Checksums (SHA-256)

  • AetherScreens-macOS-AppleSilicon-v2.2.0.zip: 43e7b5ff26148d49acbbdce32fa9f2c6727df010846ecf8834e4eddb0e40ab1d
  • AetherScreens-macOS-AppleSilicon-v2.2.0.dmg: 922b0f00556d8cd9ff47eb0b627c24705c4a03044368bf58004042322328f98a

AetherScreens 2.1.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 16:37

AetherScreens 2.1.0

Highlights / 核心更新

  • Keystroke Pacer / 按键分块节流器: Normalizes \r\n and \r line endings and paces multi-chunk clipboard typing so remote macOS Screen Sharing, Windows RDP, and Linux VNC sessions never drop characters under high latency.
  • Remote Media & Hardware System Keys / 远端媒体与硬件控制键: Added Media & Hardware Keys submenu under Quick Actions (Volume Up, Volume Down, Mute Audio, Play / Pause, Next Track, Previous Track, Brightness Up, Brightness Down).

Checksums (SHA-256)

  • AetherScreens-macOS-AppleSilicon-v2.1.0.zip: f837b669e1f8a005354f329d1e384ab3ed964cca8e2541af899546f982471015
  • AetherScreens-macOS-AppleSilicon-v2.1.0.dmg: c35b25ebe00731789e2d39094229848c8905289ff4d138a0f0231a2ff04954e4

AetherScreens 2.0.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 16:28

AetherScreens 2.0.0

Highlights / 核心更新

  • Connection History & Session Audit Log / 连接历史与会话审计日志: Ring-buffered ConnectionHistoryStore recording session start timestamps, exact session duration, protocol badge, and connection outcome.
  • Global & Per-Device History Sheet / 全局与单设备历史记录面板: Native ConnectionHistorySheet accessible via the library toolbar clock button and per-computer context menu.

Checksums (SHA-256)

  • AetherScreens-macOS-AppleSilicon-v2.0.0.zip: cc452dd4774b540d97a61ef60093429256611c89f0f14dfab7b7fc8a8b207645
  • AetherScreens-macOS-AppleSilicon-v2.0.0.dmg: 84cde039781cae0389e4d6fc4664214d559592fd252fe5442cc7a99ec80567e2

AetherScreens v1.9.0

Choose a tag to compare

@bcblr1993 bcblr1993 released this 07 Nov 16:18

⚡️ AetherScreens v1.9.0 (Build 2026110706)

Windows RDP 共享文件夹完整双向读写(创建、写入、截断、重命名、删除)与单机只读保护开关。

1. Windows RDP 共享文件夹双向读写支持 (RDPSharedDirectoryDrive)

  • 完整文件写操作:在原有目录枚举与读取基础上,新增 CreateDisposition(create、openIf、overwrite、overwriteIf、supersede)、偏移量写入 (handleWrite)、文件大小截断 (handleSetEndOfFile)、安全重命名 (handleRename) 与删除 (handleDelete),支持从 Windows 资源管理器直接向 Mac 共享文件夹写入或管理文件。
  • 单机只读安全开关 (sharedDirectoryReadOnly):在新建/编辑设备界面新增 以只读模式共享文件夹 (Share as Read-Only) 选项并随 iCloud 同步,开启后在协议层自动拦截所有写入与删除操作 (0xC0000022)。

SHA-256:

97c437cb5fc00b0c55102c75e6c627402bfa1ab256f1a4b93600002e18a975d4  AetherScreens-macOS-AppleSilicon-v1.9.0.zip
814c2fb24db9dda142439a49014b4e0cf77a7daddd3a89db2b0df0c057e0b5f8  AetherScreens-macOS-AppleSilicon-v1.9.0.dmg