Skip to content

Fix for macOS27 and Bump Sparkle to 2.9.6 - #994

Open
cavaldos wants to merge 63 commits into
jordanbaird:mainfrom
cavaldos:main
Open

cavaldos wants to merge 63 commits into
jordanbaird:mainfrom
cavaldos:main

Conversation

@cavaldos

Copy link
Copy Markdown

This pull request introduces several significant changes focused on improving performance, maintaining the project, and cleaning up dependencies. The most notable updates include adding a new GitHub Actions workflow for releases, optimizing menu bar detection logic for better efficiency, and removing unused dependencies and documentation.

Build and Release Improvements:

  • Added a new GitHub Actions workflow (.github/workflows/release.yml) to automate building and releasing the app on GitHub using Xcode 26+ runners, ensuring compatibility with the latest macOS SDK and streamlining the release process.

Performance Optimizations:

  • Improved menu bar detection in EventManager by introducing a short-lived cache for menu bar window frames, reducing expensive calls to WindowServer, and throttling hover/scroll event handling to prevent excessive IPC and improve responsiveness. [1] [2] [3] [4] [5]

Dependency and Project Cleanup:

  • Removed the CompactSlider and Ifrit Swift package dependencies and all related references from Ice.xcodeproj and Package.resolved, simplifying the project and reducing build complexity. [1] [2] [3] [4] [5] [6] [7]
  • Updated the Sparkle dependency to version 2.9.6 in Package.resolved for improved update handling and security.

Documentation and Codebase Maintenance:

  • Removed the FREQUENT_ISSUES.md file, likely due to outdated content or a shift to alternative support channels.
  • Added a warning comment to RunLoopLocalEventMonitor.swift to clarify its correct usage and prevent misuse that could break UI interactions on newer macOS versions.
  • Minor code improvements, including safer task cancellation handling in EventTap and removal of an unused hotkey action. [1] [2]

These changes collectively enhance the app's reliability, maintainability, and performance.

pythongod and others added 11 commits September 18, 2026 13:21
Ad-hoc signed builds get a designated requirement pinned to the binary's
cdhash rather than a stable Developer ID. Since the hash changes with every
build, the csreq recorded in the TCC database when the user first granted
Accessibility/Screen Recording no longer matches after an update. System
Settings still renders the row by bundle ID and shows the toggle as on, while
tccd denies the app — so Ice looks authorized but behaves as though it is not.

The stale rows have to be cleared before a new grant can bind to the current
signature. Add script/fix-permissions.sh to do that, and document the
behaviour in the README so users hitting it can recognize the symptom.

Also note the Homebrew conflict: upstream Ice installs as the jordanbaird-ice
cask and shares this bundle ID, so leaving it registered lets a later
brew upgrade replace this build.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Reporting every nonzero tccutil exit as "nothing to reset" hid real failures,
so the script could relaunch Ice claiming success while the stale entries were
still in place and the re-grant would not stick.

tccutil exits 64 when TCC holds no record for the bundle id at all, which is
the expected result on a fresh install that has never prompted. Treat only that
as a non-failure, report anything else with its actual message on stderr, and
exit nonzero so the caller sees it. Every service is still attempted, so one
failure does not skip the rest.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
pgrep/pkill -f matches the full argument list and treats the pattern as a
regular expression, so a bundle path containing regex metacharacters could
match more than intended. Matching the executable name is path-independent and
has no regex surface, and is the form script/run.sh already uses.

No behaviour change for the default path. Verified end-to-end for both the
default and explicit-path invocations: the running instance is detected and
quit, and the post-relaunch check passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AAEniuh7ZZnTMtTgwRcm7w
docs: document permissions and add TCC recovery script
open -a resolves its argument through LaunchServices app-name lookup,
which is the wrong tool when $APP is already a known bundle path (the
default /Applications/Ice.app or the explicit argument this script
already validated with -d). Passing the path directly to open avoids
that indirection.

Addresses the optional nit cavaldos left on PR #14 that didn't make it
into the merge: #14

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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.

3 participants