cert.fish Guide
Advanced and version-locked methods

JIT without myths

What apps using just-in-time compilation need on iOS 16, 17, 18, 26, and during the iOS 27 transition.

JIT, just-in-time compilation, lets an app create executable machine code while running. Emulators, virtual machines, language runtimes, and some LiveContainer modes rely on it. Most sideloaded apps do not.

Signing an app and enabling JIT are separate operations. An app may install perfectly and still lack JIT.

Requirements that recur

  • The target app normally needs get-task-allow.
  • Developer Mode must be enabled.
  • A debugger or debug service attaches to the target process.
  • Modern on-device methods need a valid pairing record and local tunnel/VPN path.
  • The helper, OS release, device chip, and target app must agree.

Version map

OS familyTypical current direction
iOS/iPadOS 16 and belowAltJIT and older debugger workflows are comparatively straightforward
17.0 through 17.3Newer DeviceDiscovery/RSD changes complicate older workflows; use maintained computer-server guidance
17.4 through 18.xStikDebug and current SideStore methods can use on-device pairing and LocalDevVPN
26.xHelper support is not enough; target apps may need script/protocol updates for executable regions
27 RCTreat support as experimental until public release and app-specific confirmation

Current tools

  • AltJIT: integrated with AltStore; macOS is the supported iOS 17 path in AltStore's current documentation (AltStore).
  • SideJITServer: computer-hosted JIT for iOS 17+ on Windows, macOS, and Linux (GitHub).
  • StikDebug: on-device debugger/JIT enabler for iOS 17.4+, requiring pairing and LocalDevVPN (GitHub).
  • SideStore: current releases expose JIT paths and integrate with the on-device communication stack.
  • iloader: free computer app for Windows, macOS and Linux that creates pairing files and places them in StikDebug or SideStore (iloader). Use it once when the on-device pairing route fails.

Phone-only JIT path

When no computer is available, use an on-device debugger with pairing and a local tunnel. A common sequence is to create a fresh pairing record while the device is unlocked and trusted, confirm Developer Mode and LocalDevVPN state, attach the helper to the target app, then launch the target from the helper. Replace stale pairing data after updates or restores. Computer-hosted JIT remains useful for logs and for iOS versions where on-device pairing is not supported.

iOS 26 is the sharp edge

On devices with newer TXM/SPTM behavior, attaching a debugger alone may not make every executable region usable. The target app's allocator must cooperate with the script protocol. StikJIT's maintainers explicitly state that a generic script cannot retrofit an arbitrary JIT engine (StikJIT).

Therefore “JIT enabled successfully” can coexist with an app crash. Confirm the emulator or runtime itself advertises support for your exact iOS release.

Safe troubleshooting order

  1. Confirm the app actually requires JIT.
  2. Confirm get-task-allow is present.
  3. Confirm Developer Mode.
  4. Replace stale pairing data after updates or restores.
  5. Confirm LocalDevVPN and Wi-Fi or the method's documented network state.
  6. Mount or refresh the correct Developer Disk Image if required.
  7. Check app-specific iOS 26/27 support.
  8. Preserve the helper's exact log instead of reporting only “JIT failed.”
Paid CertificatesFrom cert.fish: no computer, no weekly refresh. One purchase for one iPhone.Buy - £6.75