An iOS XCFramework that enables JIT for another process over the device's RSD tunnel. Based on StikDebug.
Find a file
2026-06-23 12:59:55 -04:00
.github/workflows Update build.yml 2026-06-23 12:22:18 -04:00
idevice Initial commit 2026-06-23 12:17:03 -04:00
Resources Initial commit 2026-06-23 12:17:03 -04:00
Sources Add support for 17.4+ and non TXM devices 2026-06-23 12:49:33 -04:00
.gitattributes Initial commit 2026-06-23 12:17:03 -04:00
.gitignore Initial commit 2026-06-23 12:17:03 -04:00
LICENSE Initial commit 2026-06-23 12:17:03 -04:00
project.yml Initial commit 2026-06-23 12:17:03 -04:00
README.md Update README.md 2026-06-23 12:59:55 -04:00

StikJIT

An iOS XCFramework that enables JIT for another process over the device's RSD tunnel.

JIT cannot be enabled in-process, since a process that attaches a debugger to itself deadlocks. StikJIT runs in a separate process, attaches a debugserver to the target by PID, enables JIT for it, then detaches. It is self-contained: the idevice FFI and universal.js are bundled inside. The target must have the get-task-allow entitlement.

Use

Because it needs a separate process, you call StikJIT from a small app extension that your app launches and hands the target app's PID to (for example over XPC). StikJIT does not include that extension, its launch, or the pairing file; your app provides those.

Add StikJIT.xcframework to the extension (Embed & Sign), then call it off the main thread:

import StikJIT

try StikJIT.enableJIT(
    targetPID: hostPID,             // process to enable JIT for
    pairingFile: pairingFileURL,    // device pairing file
    progress: { print("[StikJIT] \($0)") }
)

It blocks until done and throws StikJITError on failure. Pass configuration: to override the tunnel endpoint (defaults to 10.7.0.1:49152).

Build

xcodegen generate
xcodebuild archive -scheme StikJIT -destination 'generic/platform=iOS' \
  -archivePath build/StikJIT BUILD_LIBRARY_FOR_DISTRIBUTION=YES
xcodebuild -create-xcframework \
  -framework build/StikJIT.xcarchive/Products/Library/Frameworks/StikJIT.framework \
  -output StikJIT.xcframework

License

StikJIT is licensed under the MPL-2.0 (see LICENSE). It uses StikDebug as a reference, with the bundled idevice and universal.js retaining their own licenses.