Skip to content

macOS: every self-update invalidates Accessibility and Input Monitoring, and "Ask macOS now" cannot restore them #42

Description

@iga566-gh

On macOS every self-update costs the user both permissions, and the "Ask macOS now" button cannot bring them back.

Environment: MacBook Pro 14" (M1 Pro), macOS 26.5.2, PolterType installed to /Applications,
updated in place through Restart-to-update, 0.19.0 → 0.24.0.

What happened. After the update the Setup pane showed Needs you for both Accessibility and
Input Monitoring, while both were still switched on in System Settings — the entries were there,
listed and enabled. Pressing Ask macOS now did nothing: no system prompt appeared, for either
permission. Quitting and relaunching did not help. The only thing that worked was removing
PolterType from both lists with the minus button and adding it again.

Why it happens. The app is ad-hoc signed:

$ codesign -dv --verbose=2 /Applications/poltertype.app
Identifier=org.poltertype.app
Signature=adhoc
TeamIdentifier=not set

For an ad-hoc signed bundle, TCC keys the grant to the code directory hash, not to a stable
identity. The updater replaces the bundle, the hash changes, and the existing grant no longer
matches the running binary — so the app is denied while the toggle still reads "on". And because a
record for that bundle identifier already exists, macOS treats the permission as already decided
and suppresses the prompt, which is why the button appears dead: IOHIDRequestAccess and
AXIsProcessTrustedWithOptions only raise the dialog when there is no prior record.

Consequences as a user. Self-update is the feature that made the app pleasant to keep current —
and right now every update silently disarms it. The failure is quiet: the tray icon is there, the
toggles say "on", and nothing gets corrected until you notice and go re-grant by hand. With
releases landing twice a day this is a real tax.

What would fix it properly. Signing with a Developer ID and notarizing: TCC then keys the grant
to the team identifier plus bundle identifier, and it survives bundle replacement — which is exactly
how every other menu-bar utility manages to update without asking again. I understand that means a
paid Apple Developer account, so until that is possible, two smaller things would help a lot:

  1. Detect the state and say it plainly. The app can tell "permission record exists but we are
    denied" from "no record at all". In the first case the Setup pane should not offer a button that
    cannot work; it should say: remove PolterType from this list, then press Ask again — and ideally
    open that exact pane.
  2. Warn before updating. If the updater knows the bundle swap will invalidate the grants, the
    Restart-to-update button is the right place to say so.

Happy to test any of this on Apple Silicon — this machine reproduces it every time.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions