Skip to content

v0.0.8 — injection hardening & crash diagnosis

Choose a tag to compare

@enzomanuelmangano enzomanuelmangano released this 06 Jun 08:48
· 47 commits to main since this release

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-value std::shared_ptr on RN 0.85) are skipped with their encoding logged. Wrappers forward via void * — 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.dylib was loaded, and the .ips crash-report path — instead of a bare ennio 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 / -q suppresses it, --verbose still accepted and wins over --quiet (#49)
  • SHA-256 dylib verification — the prebuilt dylib is verified against prebuilt/manifest.json before injection; mismatches refuse loudly. Local dev builds and ENNIO_DYLIB_PATH overrides skip the check (#50)

Docs

  • README rewritten to match the shipped architecture: direct dylib injection, real +load gates, 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