Version 1.8.1
Categories:
RawCull Changelog โ v1.8.0 โ 1.8.1
Updated on Apple App Store.
A stability and resource-hygiene release. Focus is on eliminating main-thread hangs in the zoom preview, tightening security-scoped resource lifecycles, and fixing actor-isolation gaps in the rsync copy path.
๐ Security-Scoped Resource Lifecycle
- Catalog access is now scoped to the active catalog, not every catalog ever opened in the sidebar. Long sessions no longer accumulate stale security-scoped accesses.
- Added explicit
startSecurityScopedAccess(for:),stopSecurityScopedAccess(for:), andstopActiveSecurityScopedAccess()onRawCullViewModel. - Catalog cancellation and app shutdown both route through the same cleanup path;
deinitis now a last-resort fallback rather than the primary stop point. - Picker flow simplified โ view no longer manually pairs start/stop calls.
โก Zoom Preview โ No More Main-Thread Hangs
ZoomPreviewHandlersidecar JPG decode moved off the MainActor into aTask.detached(priority: .userInitiated).- Opening the zoom overlay on a large Sony JPEG no longer blocks the UI while ImageIO opens and decodes the file.
- Cancellation is now checked between every async step, so dismissing the overlay early stops in-flight work cleanly.
loadCGImage(from:)and the disk-cache accessor are markednonisolatedto make the off-main path explicit.
๐ ๏ธ Rsync Copy Path (ExecuteCopyFiles)
- Security-scoped URLs for source and destination are now paired with a single, idempotent
cleanup()call covering: rsync success, launch failure, user close/cancel, sheet dismissal, anddeinit. - Progress streaming callback hops to
@MainActorbefore touchingprogressContinuation, removing a latent actor-isolation race that strict concurrency would flag. - Progress continuations and streaming handler state are finished/cleared exactly once.
๐งต Catalog Loading & Cancellation
startCatalogLoad(for:)short-circuits cleanly when the active catalog already has live security-scoped access โ no redundant cancel/restart cycles.cancelCatalogLoad()now also clearscurrentselectedSourceand stops active security-scoped access, preventing a new load from racing previous cleanup.
๐งช Tests
- New
RawCullViewModelSecurityScopeTestscovering start/stop pairing, re-selection no-op behavior, and cancellation cleanup. ThumbnailProvider*tests updated for the refreshed memory and cancellation surface.
๐งน Cleanup
- Removed legacy
documents/ver176.md; addeddocuments/ver181.mdcapturing the v1.8.0 review findings actually shipped in this release. - Minor follow-ups in
RawCullViewModel+Catalog,SharpnessScoringModel, and project settings.