Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix: merge macOS 26 compatibility fixes#940

Open
lilaflo wants to merge 81 commits into
jordanbaird:mainfrom
lilaflo:main
Open

fix: merge macOS 26 compatibility fixes#940
lilaflo wants to merge 81 commits into
jordanbaird:mainfrom
lilaflo:main

Conversation

@lilaflo
Copy link
Copy Markdown

@lilaflo lilaflo commented May 4, 2026

Summary

  • Merges the macos-26 branch (77 commits) into main to fix crashes and compatibility issues on macOS 26.4.1 (Tahoe, build 25E253)
  • Resolves the EXC_BREAKPOINT crash at startup caused by menu bar item display ID retrieval changes in macOS 26
  • Adds new MenuBarItemService XPC service for improved menu bar item handling
  • Includes all macOS 26 UI reworks, event handling improvements, and caching fixes
  • Fixes crash in ControlItem setup when accessing status item constraints

Changes

  • MenuBarItemService: New XPC service for menu bar item management with SourcePIDCache for macOS 26 compatibility
  • Bridging: Updated private API wrappers with fallbacks for macOS 26 behavior changes
  • Events: Reworked to HIDEventManager for better reliability across environments
  • UI: Multiple macOS 26-specific UI fixes for settings panels, search, and layout
  • Settings: Restructured settings models and managers for better organization
  • ControlItem: Fixed crash when accessing button.window?.contentView?.constraints on macOS 26
  • XPC Connection: Removed peer requirement to work with ad-hoc signing during development

Testing

  • Builds successfully on macOS 26.4.1 with Xcode 26.4
  • App launches without crashes
  • Menu bar items display correctly
  • Settings window opens without crashes
  • Multi-display configuration testing needed

Misc additional changes and cleanup
`RunLoopLocalEventMonitor` seems to prevent certain buttons from receiving events in macOS 26 Developer Beta 1. This might be a bug in the beta, or `RunLoopLocalEventMonitor` itself. For now, let's just move to a better mouse check implementation that doesn't use continuous event monitoring.

Note the `FIXME` (line 1057). The previous implementation had this problem too, but it was never documented.
A big part of this is hopefully a temporary measure. We need an accurate identifier for every item, and the old way just isn't cutting it right now. Items are all owned by the Control Center in macOS 26, and try as I might, I couldn't find a great way to get the _actual_ host apps for the items.

Must dig deeper into the mines...

Oh yeah, there's also a bunch of random stuff here too that I don't really want to explain. Just know that it probably all fixed something.
This is what I get for trusting Xcode to update my build settings
- Refactor screen capture
- Rework menu bar item getters
- Update immovable/non-hideable info lists
- Remove OSLog wrapper
- Minor migration rework
- Remove old entitlements file
Should also fix a crash when accessing `ControlItem.windowNumber`.
- Rework app lifecycle
- Rework how windows are initialized
- Update documentation comments
- Refactoring and cleanup
This should fix some performance issues that occur during mouse tracking operations (e.g. highlighting a button on hover).
We also store the status item and layout constraint in a separate storage class. Not sure I like this, but the idea is to convey the tightly coupled relationship between the constraint and status item, and to ensure that they are initialized (and deinitialized) at the same time.
Relying on the default behavior seemed to work fine, but is now broken in the macOS 26 Developer Beta. Probably better to handle it explicitly, even if it is just a beta bug.
jordanbaird and others added 29 commits September 2, 2025 13:13
- Documentation changes
- Misc event handling improvements
- Fix temporarily shown item interface check
- Fix broken on screen item check
- Additional minor refactoring
Revert to using a direct call to the `CGImage` initializer, rather than calling it through a static protocol method (this was originally done to suppress the deprecation warning, but it seems to cause screen capture to fail for some users).
emindeniz99 pushed a commit to emindeniz99/Ice that referenced this pull request May 13, 2026
…a11y amber)

* Updates.swift — when Sparkle wants to show a scheduled update
  prompt while Ice is in the background, activate the app with a
  regular policy and return `true` so the dialog comes up in front
  with key focus. Previously we returned `false` and Sparkle put the
  dialog up anyway, with Ice still .accessory — on macOS 26 the
  window then refused to accept clicks, which is the cluster of
  reports in jordanbaird#912 / jordanbaird#926 / jordanbaird#931 / jordanbaird#932 / jordanbaird#937. Same fix is applied
  to `standardUserDriverWillHandleShowingUpdate` for the
  user-initiated path. (Adapted from arifim's PR jordanbaird#945.)

* PermissionsView.swift — replace plain `.yellow` on the
  "Continue in Limited Mode" button with a darker amber
  (sRGB 0.75/0.45/0). The original failed accessibility contrast
  against the light button background. (Adapted from aramb-dev's
  PR jordanbaird#942 — the asset-catalog refinement in later commits of that
  PR is deferred since the current Xcode-26 sync of the project
  doesn't include the new colorset directory.)

Skipped this round:

* PR jordanbaird#940 (lilaflo) is an 80-commit re-application of
  jordanbaird/macos-26 onto another branch — same commits we
  already carry, nothing new.

* PR jordanbaird#944 (aathanwwt) targets CompactSlider 2.x's removed
  `gestureOptions:` parameter. Package.resolved locks us at 1.2.1
  with the upper bound at <2.0, so the parameter still exists in
  the version we ship.

* PR jordanbaird#941 (lixiaoning) notch-auto-hide. The diff references
  `MenuBarItem.info`, `MenuBarItemTag.iceIcon`,
  `controlItem.state == .hideItems`, and several private flags
  (`isMovingItem`, `isMouseButtonDown`, `tempShownItemContexts`,
  `itemMoveCount`) that don't exist in the macos-26 refactor of
  MenuBarItemManager. Adapting it would mean rewriting the helper
  against a different cache architecture, which I shouldn't do
  without a notched display to verify against. The negative
  windowNumber guard in the same PR is a no-op for us because we
  don't read `NSWindow.windowNumber` anywhere in the macos-26
  branch.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants