XZip 1.0.1 (build 2)
What's New
fix: password prompting, folder drag-out, app lifecycle, and 7z Quick Look
Bump version to 1.0.1 (build 2).
Password handling:
- Prompt proactively when opening any archive whose listing succeeds but
contains encrypted entries (7z -p, ZIP, RAR without -hp). Previously the
prompt only fired when listing itself failed, so data-encrypted archives
with plaintext headers never asked for a password. - Stop treating a successful listing as proof a password is correct; verify
via a new ArchiveEngine.verifyPassword that tests only the smallest
encrypted entry (7zz t -i@), so wrong passwords are no longer saved to
the Keychain. - Classify password errors on the drag-out/Share/Quick Look extraction path
and raise the prompt instead of a generic error banner. - Defer the password sheet while another sheet owns the window's slot and
resume it when the slot frees; previously SwiftUI silently dropped it and
every later prompt queued forever. - Quit with the password prompt still up no longer hangs: Cmd-Q routes
through the delegate, which lowers the prompt before terminate: runs
(AppKit abandons termination while a sheet is attached).
Drag-out:
- Dragging a folder out of an archive now delivers the folder with its tree
intact. Folders were filtered out entirely; they now expand to their
descendant file entries, and the promise advertises public.folder so
Finder accepts the directory URL. - Quitting after a drag-out no longer deadlocks in
CFPasteboardResolveAllPromisedData: the leftover pasteboard promise is
cleared and scratch deletion moved off the main thread behind
.terminateLater.
Lifecycle:
- Finder "Open With" brings XZip frontmost in every state: cold launch
(request the default window via the LaunchServices reopen path — the
scene's external-event opt-out meant a launch caused by a file open
created no window at all), running-in-background (activate(from:)
transfers focus from Finder where plain activate() is denied), and
window-closed-but-running (recreate the window on every open). - Fix the item-count mismatch: the extract-to row no longer shows a total
("N items") that disagreed with the status bar; sidebar/window-subtitle
counts now match the status bar.
Quick Look:
- 7z archives preview correctly. LZMA2 (7-Zip's default encoding) was
undecodable because swift-archive gates its lzma decoder behind an
off-by-default trait; enable it and link a vendored universal static
liblzma (scripts/build_liblzma.sh, SHA-256-pinned XZ Utils build) since
neither Homebrew nor the SDK provides a universal liblzma.
Tests: 282 app + 782 package tests pass, including new coverage for the
sheet-slot queue, folder drag-out, data-encrypted listing prompts, and an
LZMA2 fixture that fails if the trait regresses.