v0.0.8 — injection hardening & crash diagnosis
Warning
Experimental. Ennio is at an early experimental stage. APIs, package
names, internals, and behavior may change without notice between releases.
iOS only. Expect rough edges; do not rely on it for production-critical test
suites yet. The 0.0.x line is a public preview, not a stability commitment.
Hardening release driven by #44 (SIGSEGV under injection on RN 0.85 / iOS 26): the in-app swizzles are now provably safe to attach, crashes are diagnosed instead of masked, and there's a safe mode to fall back on.
Injection safety
- Signature-checked RN observer swizzle — mount-method candidates are type-encoding-checked before attaching; non-forwardable C++ signatures (e.g.
scheduleTransaction:taking a by-valuestd::shared_ptron RN 0.85) are skipped with their encoding logged. Wrappers forward viavoid *— zero ARC traffic on non-object args (#48) - Fabric commit signals preferred — on New-Architecture apps the observer now attaches a live Fabric mount method instead of the dead interop Paper selector; Paper apps unchanged. Measurably faster settle on New-Arch apps (#50)
Crash diagnosis
- When the app dies under injection, the CLI now reports what actually happened: exception type, faulting-thread frames, whether
libennio.dylibwas loaded, and the.ipscrash-report path — instead of a bareennio socket not connected(#47)
Safe mode & bisect flags
ennio test --safe-mode— run with all in-app hooks disabled; settle falls back to view-hash polling (#47)- Granular kill switches for bisecting conflicts:
ENNIO_DISABLE_RN_OBSERVER,ENNIO_DISABLE_TESTID_INDEX,ENNIO_DISABLE_SETTLE(#47)
CLI
- Verbose per-step output is now the default;
--quiet/-qsuppresses it,--verbosestill accepted and wins over--quiet(#49) - SHA-256 dylib verification — the prebuilt dylib is verified against
prebuilt/manifest.jsonbefore injection; mismatches refuse loudly. Local dev builds andENNIO_DYLIB_PATHoverrides skip the check (#50)
Docs
- README rewritten to match the shipped architecture: direct dylib injection, real
+loadgates, architecture-agnostic RN support (the New-Architecture requirement was wrong), and the actual prerequisite — a dev/debug simulator build (#50)
Full Changelog: v0.0.7...v0.0.8