## Summary
Fixes the `EXC_BAD_ACCESS` crash when clicking **Preferences** on macOS by removing the invalid 3-argument `PMSessionSetColorMatchingMode` calls.
### Key changes
- All `PMSessionSetColorMatchingMode*` symbols now use the documented 2-argument `(PMPrintSession, *const CFString)` signature.
- `PMSessionSetColorMatchingModeLock` sets the mode and locks the UI in one call; it does **not** take a Boolean.
- Mode constants restricted to `AP_ApplicationColorMatching` / `ApplicationColorMatching` only (no ColorSync or vendor modes on profiling targets).
- `PMSessionGetCurrentPrinter` pre-check preserved.
- `set_session_color_matching_mode` returns `bool`; non-macOS stub updated.
- Improved error logging in `run_native_print_panel` when the printer cannot be resolved.
- New unit tests for color-bypass filtering and detection.
- `AGENTS.md` updated with the corrected SPI notes.
- Version bumped to `0.7.3`.
### Verification
- Linux CI: ✅ passed (run #448)
- Windows CI: ✅ passed (run #449)
- Manual macOS test: ✅ Epson driver shows "color managed by application"; Canon driver greys out ColorSync/Canon selection (matches Photoshop behaviour).
**Merge style: merge (no squash)** — retain full commit history.
Closes #188.
Replace the CUPS web interface fallback with the native macOS NSPrintPanel,
pre-configured with AP_ColorMatchingMode=AP_ApplicationColorMatching so the
driver's color-management controls are greyed out (application manages color).
Capture the user's media type and quality selections from the dialog and feed
them into the lp job via PrintOptions.cups_options.
- Add objc2-app-kit / objc2-application-services dependencies for NSPrintPanel
- Rewrite show_printer_properties to dispatch NSPrintPanel on the main thread
- Always add AP_ColorMatchingMode=AP_ApplicationColorMatching in build_lp_args
- Forward captured CUPS options with deduplication against explicit fields
- Detect Epson EPIJ_Medi / EPIJ_CCor / EPIJ_OSColMat PPD options
- Add parse_cups_options_string helper and filtering of internal Apple keys
- Update frontend to store and pass captured options per printer
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
- All PMSessionSetColorMatchingMode* symbols use the 2-arg (PMPrintSession, *const CFString) signature.
- PMSessionSetColorMatchingModeLock sets and locks in one call; it does not take a Boolean.
- Remove speculative 3-argument transmutes that caused EXC_BAD_ACCESS.
- Restrict color-matching modes to application-managed bypass only (AP_ApplicationColorMatching / ApplicationColorMatching).
- Preserve the PMSessionGetCurrentPrinter pre-check.
- Return bool from set_session_color_matching_mode and log SPI results.
- Update non-macOS stub to return bool.
- Improve run_native_print_panel error logging when the printer cannot be resolved.
- Add unit tests for color-bypass filtering and detection.
- Update AGENTS.md with the corrected SPI notes.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Fixes the
EXC_BAD_ACCESScrash when clicking Preferences on macOS by removing the invalid 3-argumentPMSessionSetColorMatchingModecalls.Key changes
PMSessionSetColorMatchingMode*symbols now use the documented 2-argument(PMPrintSession, *const CFString)signature.PMSessionSetColorMatchingModeLocksets the mode and locks the UI in one call; it does not take a Boolean.AP_ApplicationColorMatching/ApplicationColorMatchingonly (no ColorSync or vendor modes on profiling targets).PMSessionGetCurrentPrinterpre-check preserved.set_session_color_matching_modereturnsbool; non-macOS stub updated.run_native_print_panelwhen the printer cannot be resolved.AGENTS.mdupdated with the corrected SPI notes.0.7.3.Verification
Merge style: merge (no squash) — retain full commit history.
Closes #188.