Repository navigation
Releases
Releases · bcblr1993/AetherScreens
AetherScreens v2.8.0
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
ConnectionHistorySheettoAppLanguageSettings.sharedso live language switching updates the history sheet immediately.
- Filter-Aware Empty State & One-Tap Filter Reset (
DeviceListViewModel/DeviceListView):- Added
DeviceListViewModel.hasActiveFiltersandresetFilters()and updatedDeviceListView.emptyStateViewso zero-result tag or smart filters display"No matching computers"with a one-tap"Reset Filters"button instead of"No computers here yet".
- Added
- HIG Accessibility & Sheet Sizing (
DeviceListRowView/QuickSnippetsSheet/TailscaleSettingsSheet):- Added VoiceOver
.accessibilityLabels and 44×44pt hit targets onDeviceListRowViewWake/Edit actions andQuickSnippetsSheetSend/Edit/Delete buttons, and expandedTailscaleSettingsSheetwith flexibleminWidth/idealWidth/minHeight/idealHeightbounds.
- Added VoiceOver
- macOS CJK IME Candidate Window Cursor Tracking (
MacNativeInputView):- Updated
MacNativeInputView.firstRect(forCharacterRange:actualRange:)viacandidateRectInViewBounds()so macOS input method candidate windows anchor directly at the active cursor position inside the remote desktop view instead of the static window midpoint.
- Updated
AetherScreens v2.7.0
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 --jsonstderr toFileHandle.nullDeviceto prevent pipe buffer deadlocks and added strict path-segment percent-encoding inTailscaleClient.devicesEndpointURL(). - Guarded
WakeOnLANService.wakeDeviceagainst port0(NWEndpoint.Portforce-unwrap elimination) and added a thread-safe once-completion guard with a 3-second timeout and automaticNWConnectioncancellation. - Implemented
netService(_:didNotResolve:)inBonjourServiceResolverso timed-out mDNS services clean up their resolver key and retry on subsequent browse updates, and cancelled timeoutDispatchWorkItems immediately inHostPortReachabilityProber.
- Redirected
-
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, andfilteredDevicesinDeviceListViewModelwith automatic invalidation on library/filter changes, eliminating$O(T \times D)$ allocations during SwiftUI view evaluations.
- Added
-
Off-Main-Thread Screenshot Encoding & Throttled RDP Transfer Progress (
SessionViewModel):- Moved 4K/5K PNG screenshot encoding and disk writes off
@MainActorviasaveScreenshotInBackground(), reused a staticDateFormatter, and throttled RDP file upload/download progress callbacks viaRDPProgressGate.
- Moved 4K/5K PNG screenshot encoding and disk writes off
-
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.activeentries onConnectionHistoryStore.load(), and boundedQuickSnippetStoretitle/content sizes.
- Added generation-tracked
AetherScreens v2.6.0
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.isPCM16Bitwhen validatingchannelCount * 2, bounded channel counts (1...8) and sample rates (8,000...192,000 Hz), routedRDPSNDpackets throughRDPStaticVirtualChannelReassemblerso fragmented audio PDUs never corrupt the stream, and hardenedAVAudioEngineConfigurationChangerecovery.
- Eliminated a 16-bit integer overflow in
-
O(bits) RSA Certificate Division & Strict MSB Validation (
MCSConnectResponse):- Replaced repeated subtraction in
remainderLittleEndianwith$O(\text{bits})$ bitwise shift-and-subtract long division and enforcedactiveModulus.last != 0so malformed server RSA blobs cannot stall the preflight thread.
- Replaced repeated subtraction in
-
Shared Directory Drive Sandbox & Handle Safety (
RDPSharedDirectoryDrive):- Added
lstatsymlink inspection inresolveSandboxedURLto block dangling symlinks escaping the shared root, changedhandleDeleteon directories to use POSIXrmdir()(returningSTATUS_DIRECTORY_NOT_EMPTYinstead of recursive deletion), bounded open file handles at4,096with collision-free ID allocation, and routedRDPDRpackets through static virtual channel reassembly.
- Added
-
Static & Dynamic Virtual Channel Memory Bounds (
RDPStaticVirtualChannelReassembler/ConnectionPreflight):- Added automatic buffer reset (
keepingCapacity: false) on any malformed fragment, bounded dynamic channelcbTotalDataSizeto 64 MB, and fixedMCSDisconnectProviderUltimatumPDUslice index handling.
- Added automatic buffer reset (
-
RFB, AppleFileCopy & RDP Client Memory Reclamation (
RFBClient/RDPClient/RDPClipboardFileDownloader):- Replaced aligned
UInt16pointer loads with.loadUnaligned(as: UInt16.self)inRFBClient, eliminated intermediateDatacopies in Tight rectangle decoding, freedreadBuffer/decryptedReadBuffer/lastPublishedFilescapacities on disconnect, and replaced uncancelledasyncAfterclosures with cancellableDispatchWorkItems inRDPClipboardFileDownloader.
- Replaced aligned
AetherScreens v2.5.0
AetherScreens v2.5.0 (Build 2026110712)
- Coalesced Diagnostic Logging & Category Filtering (
AppLogger&DiagnosticLogView): Eliminated per-log 600-element array copies and out-of-order@MainActorsnapshot resurrection afterclear(), added module category filtering (RFB,RDP,Network,Auth,Metal,UI), and cachedfilteredEntriesper render pass. - 4K/5K Framebuffer & Metal GPU Texture Reclamation (
Framebuffer.reclaimStorage()&MetalScreenRenderer.releaseSessionResources()): Automatically shrinks disconnected session pixel storage to1×1(4 bytes) after final thumbnail capture and releases privateMTLTextureallocations. - Detached Auxiliary Display Window Lifecycle (
SessionWindowManager): Automatically closes and releases all detached auxiliary display windows when the parent session window closes, and subscribesAuxiliaryDisplayWindowViewtosession.frameUpdates.
AetherScreens 2.4.0
AetherScreens 2.4.0
Highlights / 核心更新
- 4K/5K Thumbnail Downsampling & Low-Memory Footprint / 4K 缩略图降采样与低内存占用:
ThumbnailStore.downsampleImage(_:maxPixelDimension:)scales high-DPI remote frames to<= 480pxwhile preserving exact aspect ratio and bounding memory cache cost. - Performance HUD Deduplication & Smoothness / 性能 HUD 去重与流畅度提升: Quantizes moving-average RTT latency to
0.1 msbuckets and provideshasMeaningfulHUDChangeso minor network jitter never triggers unnecessary SwiftUI redraws.
Checksums (SHA-256)
AetherScreens-macOS-AppleSilicon-v2.4.0.zip:b4cc34791aa7b38e44726fd689a99c057b1495f0c69167fcd59898504a044ea0AetherScreens-macOS-AppleSilicon-v2.4.0.dmg:f4987f86012ecf027b3ca066df37cae36f0c140849aa147610e5f2fc2d122836
AetherScreens 2.3.0
AetherScreens 2.3.0
Highlights / 核心更新
- Smart Library Filters / 智能筛选器: Filter your library by
Online Only,SSH Tunneled,Tailscale Nodes, orConnected in Last 7 Dayswith one click. - Batch Tagging & Group Wake-on-LAN / 批量标签与分组一键远程唤醒: Added
assignTag(_:toDeviceIDs:),removeTag(_:fromDeviceIDs:), andwakeAllDevices(matchingTag:)accessible from the Smart Filter menu and tag capsule context menus.
Checksums (SHA-256)
AetherScreens-macOS-AppleSilicon-v2.3.0.zip:51637f192057497278e72c971ae1ece07cc9e8ae69ececdf8725a22249d72eadAetherScreens-macOS-AppleSilicon-v2.3.0.dmg:c9e383b483c29d7656e2dff5f3de3ff895808292ff1f51d5377f3b3dd3c6dd81
AetherScreens 2.2.0
AetherScreens 2.2.0
Highlights / 核心更新
- Per-Device Curtain Mode on Connect / 单设备连接自动开启隐私幕布: Configure
curtainOnConnecton individual computers so Curtain Mode automatically engages as soon as a control session connects. - Custom Privacy Banner Message / 自定义隐私幕布提示语: Set a custom
curtainMessageper device synced across iCloud and portable backups.
Checksums (SHA-256)
AetherScreens-macOS-AppleSilicon-v2.2.0.zip:43e7b5ff26148d49acbbdce32fa9f2c6727df010846ecf8834e4eddb0e40ab1dAetherScreens-macOS-AppleSilicon-v2.2.0.dmg:922b0f00556d8cd9ff47eb0b627c24705c4a03044368bf58004042322328f98a
AetherScreens 2.1.0
AetherScreens 2.1.0
Highlights / 核心更新
- Keystroke Pacer / 按键分块节流器: Normalizes
\r\nand\rline 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 Keyssubmenu 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:f837b669e1f8a005354f329d1e384ab3ed964cca8e2541af899546f982471015AetherScreens-macOS-AppleSilicon-v2.1.0.dmg:c35b25ebe00731789e2d39094229848c8905289ff4d138a0f0231a2ff04954e4
AetherScreens 2.0.0
AetherScreens 2.0.0
Highlights / 核心更新
- Connection History & Session Audit Log / 连接历史与会话审计日志: Ring-buffered
ConnectionHistoryStorerecording session start timestamps, exact session duration, protocol badge, and connection outcome. - Global & Per-Device History Sheet / 全局与单设备历史记录面板: Native
ConnectionHistorySheetaccessible via the library toolbar clock button and per-computer context menu.
Checksums (SHA-256)
AetherScreens-macOS-AppleSilicon-v2.0.0.zip:cc452dd4774b540d97a61ef60093429256611c89f0f14dfab7b7fc8a8b207645AetherScreens-macOS-AppleSilicon-v2.0.0.dmg:84cde039781cae0389e4d6fc4664214d559592fd252fe5442cc7a99ec80567e2
AetherScreens v1.9.0
⚡️ 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