-
fix: pre-release hardening on v2.6.0 surfaces
发布于
2026-05-24 06:10:52 +00:00 | 75 次提交 在此版本后已推送到 main-
AppBundleDragHandle now uses NSItemProvider(object: bundleURL as NSURL)
which is the exact shape Finder emits for an .app drag. The previous
contentsOf form registered as a generic file-copy and could be rejected
by System Settings' Privacy panes that read the URL representation
directly. -
ConfettiView no longer overwrites the AppKit-provided CALayer on its
NSView host. The override discarded the layer's backing-store scale
and rendered particles at 1x on Retina displays. wantsLayer alone is
enough; AppKit supplies a properly-scaled layer. -
ConfettiView's two asyncAfter cleanup blocks now use weak captures
plus a window-nil bail so a confetti burst on a dismissed view stops
allocating particles immediately rather than running for the full
4-second cycle against an orphaned layer. -
OnboardingView records hasSeenConfetti the moment the burst fires
(+0.35s) instead of after it finishes (+4s). A user who clicks Start
within the first second of the ready scene now still gets the
once-per-install guarantee — previously, a fast click would skip the
flag write and re-show the burst on the next launch. -
PermissionCoordinator.requestAccess now cancels any pending grant
DispatchWorkItem in addition to clearing the prior callback. Without
this, a second requestAccess() during the 1-second post-grant delay
would fire both callbacks — the queued one for the prior batch and
the new one for the current request. -
AppState.removeSelectedFiles refuses re-entry while a prior batch's
permission sheet is still active. This closes a race where a second
removeSelectedFiles() call could overwrite lastFailedRemovalURLs
before the first batch's retry closure read it, causing the retry to
execute against the wrong batch with the first sheet's app-name
context.
下载附件
-