beta 0.4
Pre-release
Pre-release
beta 0.4
Two reports from people running the app in ways I do not: JIT that the system had
already granted was being thrown away, and the bundle was missing keys that every
iOS app carries.
JIT
- JIT that was already granted is no longer discarded. Setting up the JIT
ground asks the attached debugger to register each chunk of executable memory,
and any chunk it did not register aborted the whole thing. But the registration
call also reports failure when no debugger is attached at all — which is the
normal state for two of the three ways this app gets JIT. LiveContainer grants
it by attaching a debugger that then detaches, and TrollStore grants it through
an entitlement with no debugger ever involved. In both cases the permission is
real and the memory works; there is simply nobody left to notify. The app was
throwing that away and falling back to the interpreter, while telling the user
"JIT unavailable" on a device where JIT was working. It now measures instead of
inferring: with no debugger present it writes a minimal function through the
write alias and calls it through the executable view, under a signal guard so
that a refusal degrades instead of taking the process down. If it runs, there is
JIT. The path with a debugger attached is unchanged, and a registration failure
there is still fatal. - Attaching JIT after the app is open now works. The ground was probed once
per session, so the first answer was cached for good. Under LiveContainer the
natural order is to open the app and enable JIT afterwards, which meant the
answer being cached was always "no" — and nothing the user did could change it
short of relaunching. The status pill re-measures now, and it also refreshes
when you return to the app, which is exactly the moment the permission has just
been granted somewhere else.