You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Adds an opt-in One-click extraction setting in General. Recognized archives opened through Finder/Open With/Dock extract immediately, with a remembered destination choice:
beside the archive;
a fresh folder named after the archive, including compound and split-volume names;
a native location chooser (Cancel starts no extraction).
An extraction launch avoids the archive browser/welcome window and quits when its work is done. Existing in-app browsing and explicit extraction actions retain their behavior. Multiple sources receive their own folder grants, and selected volumes of the same split archive are deduplicated. Passwords, progress and cancellation use the existing extraction flow.
One-click output is staged on the destination volume, then whole top-level items move into place with numbered conflict names. For example, an existing hello world.txt is kept and the new file becomes hello world (2).txt. This also avoids extraction failures when a file blocks a directory (or vice versa), and preserves existing dangling symlinks.
How it was verified
Added a regression using the existing defaultArchive.zip fixture and reproduced the collision with both engines before the fix: failing run. 7-Zip reported Extraction failed: Failed to create output file; XAD reported Could not create directory (error 16).
Fork PR CI passed: 657 tests in 144 suites, plus successful direct and App Store builds/architecture checks.
Added XCUITests for the three destination modes, chooser cancellation, and opening the browser when the feature is disabled.
UI verification gap:the UI evidence run timed out querying the unchanged upstream app's accessibility hierarchy. Before/after screenshots and manual UI verification have therefore not been completed. The outstanding evidence required by AI_CONTRIBUTING.md is disclosed here; no successful UI run or human QA is claimed.
The six new settings keys/comments were generated with Apple's xcstringstool from compiler output. The larger catalog diff is generated ordering/locale normalization (no → nb, pt-br → pt-BR, es-mx → es-MX); all existing translation values are preserved. The changelog entry is in the existing first untagged block, translated into its 21 languages, and references #280. Version settings and vendored submodules are unchanged.
AI disclosure: Codex was the primary author of this implementation and its tests. Submitted by N4dh1x (@n4dh1x).
Checklist
Complete verification evidence: passing core/build evidence linked above; manual UI checks and before/after screenshots still needed
Changelog entry added to Config/products/macpacker.json
AI involvement disclosed
Summary by CodeRabbit
New Features
Added optional one-click archive extraction when opening archives from Finder.
Choose extraction to the archive’s folder, a new archive-named folder, or a custom destination.
Automatically opens Finder to the extracted results.
Remembers the selected extraction destination.
Preserves existing files by assigning numbered names to conflicts.
Bug Fixes
Improved handling of split archives, sandbox permissions, cancellation, and extraction errors.
Tests
Added coverage for destinations, conflict handling, cancellation, and launch behavior.
Included review availability: This review used your included allowance. Your plan provides up to 4 included reviews per hour; 3 remain after this review.
📝 Walkthrough
The change adds an opt-in setting to extract supported archives opened from Finder. It adds destination choices, preserves existing files during extraction, and updates launch handling and tests for the new flow.
Changes: Finder One-Click Extraction
Layer / File(s)
Summary
Destination and launch settings Modules/Sources/Core/AppStorageKeys.swift, Modules/Sources/Core/OneClickExtractionDestination.swift, Modules/Sources/Core/Launch.swift, MacPacker/Features/Settings/GeneralSettingsView.swift, Modules/Tests/CoreTests/LaunchTests.swift, Config/products/macpacker.json
Adds persisted settings for enabling one-click extraction and selecting a destination. The settings UI offers same-folder, archive-folder, and chosen-folder options. Launch handling and launch tests include the new reason. The changelog adds a localized feature entry.
Extraction and destination handling Modules/Sources/Core/ArchiveExtractor.swift, Modules/Sources/Core/ArchiveState.swift, MacPacker/Core/UrlHandling/AppUrlHandler.swift, MacPacker/Core/UrlHandling/AppUrlExtractToChosenFolderHandler.swift, Modules/Tests/CoreTests/OneClickExtractionTests.swift
Adds an option to preserve existing files by extracting to staging and moving items with numbered names when paths conflict. URL handling adds shared destination selection and sandbox-scoped file access. Tests cover destination resolution and preservation of conflicting files and directories.
Finder extraction flow MacPacker/AppDelegate.swift, MacPacker/Core/UrlHandling/AppUrlOneClickExtractionHandler.swift, MacPackerUITests/MacPackerUITests.swift
AppDelegate detects supported archive launches when one-click extraction is enabled and invokes the new handler. The handler resolves destinations, processes canonical archives, extracts them, and activates Finder to select results. UI tests cover destination choices, cancellation, and disabled mode.
Issue 350 requests fewer extraction windows and questions. This change adds opt-in immediate extraction for archives opened from Finder and avoids opening the archive browser in that flow.
Suggested reviewers:sarensw, hthitoy, enaium
Merge Risk:⚪ Minimal · up to 05c5c
No actionable issue remains identified for this change; it is mergeable after normal checks.
Pre-merge checks: 4 · 1
Failed checks: 1 warning
Check name
Status
Explanation
Resolution
Docstring Coverage
Docstring coverage is 38.71% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 31 functions across 13 files. (1 skipped:…
Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed checks: 4 passed
Check name
Status
Explanation
Description Check
Check skipped - CodeRabbit’s high-level summary is enabled.
Title check
The title clearly and concisely describes the main change: configurable one-click archive extraction.
Linked Issues check
Issue #280 requests an option to extract archives opened from Finder instead of opening them in MacPacker. The PR adds the opt-in oneClickExtraction setting, destination options, Finder/Launch Servi…
Out of Scope Changes check
The changes remain connected to issue #280. Destination persistence, split-volume handling, conflict-safe staging, symlink preservation, localization, changelog updates, and regression tests support t…
Full details: Linked Issues check
Explanation
Issue #280 requests an option to extract archives opened from Finder instead of opening them in MacPacker. The PR adds the opt-in oneClickExtraction setting, destination options, Finder/Launch Services handling, immediate extraction, chooser cancellation behavior, and browser fallback when disabled. The implementation reuses the extraction flow and adds unit and UI test coverage for the requested behavior. The reported UI evidence gap concerns manual verification, not an identified unmet coding requirement.
Full details: Out of Scope Changes check
Explanation
The changes remain connected to issue #280. Destination persistence, split-volume handling, conflict-safe staging, symlink preservation, localization, changelog updates, and regression tests support the requested extraction workflow or its safe operation. No unrelated feature or unrelated behavior is identified in the supplied change summary.
Full details: Docstring Coverage
Explanation
Docstring coverage is 38.71% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 31 functions across 13 files. (1 skipped: 1 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
✨ Finishing Touches
🧪 Generate unit tests (beta)
Create a new PR
Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What & why
Closes #280.
Adds an opt-in One-click extraction setting in General. Recognized archives opened through Finder/Open With/Dock extract immediately, with a remembered destination choice:
An extraction launch avoids the archive browser/welcome window and quits when its work is done. Existing in-app browsing and explicit extraction actions retain their behavior. Multiple sources receive their own folder grants, and selected volumes of the same split archive are deduplicated. Passwords, progress and cancellation use the existing extraction flow.
One-click output is staged on the destination volume, then whole top-level items move into place with numbered conflict names. For example, an existing
hello world.txtis kept and the new file becomeshello world (2).txt. This also avoids extraction failures when a file blocks a directory (or vice versa), and preserves existing dangling symlinks.How it was verified
defaultArchive.zipfixture and reproduced the collision with both engines before the fix: failing run. 7-Zip reportedExtraction failed: Failed to create output file; XAD reportedCould not create directory (error 16).AI_CONTRIBUTING.mdis disclosed here; no successful UI run or human QA is claimed.The six new settings keys/comments were generated with Apple's
xcstringstoolfrom compiler output. The larger catalog diff is generated ordering/locale normalization (no → nb,pt-br → pt-BR,es-mx → es-MX); all existing translation values are preserved. The changelog entry is in the existing first untagged block, translated into its 21 languages, and references #280. Version settings and vendored submodules are unchanged.AI disclosure: Codex was the primary author of this implementation and its tests. Submitted by N4dh1x (@n4dh1x).
Checklist
Config/products/macpacker.jsonSummary by CodeRabbit