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:
- 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.
- 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.
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:
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:
IOHIDRequestAccessandAXIsProcessTrustedWithOptionsonly 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:
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.
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.