All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
🚀 New in v1.2.0
@noobdigital/react-native-shieldscan v1.2.0 is now live — a stability and accuracy-focused release covering both iOS and Android.
🔧 Fixed
- A major stability and reliability update for both Android and iOS. This release focuses on eliminating false positives, improving platform compatibility, and enhancing the user‑experience of sensitive‑screen protection.
Improvements
- Expanded iOS hooking-framework indicator list (Substrate ecosystem, additional Frida/tweak binaries).
A note on false positives
As always, we recommend treating rooted, hooksDetected, and fridaDetected as signals to log and monitor before wiring them into hard blocks. No detection library — including this one — can guarantee zero false positives across every device, OEM skin, and SDK combination in the wild.
- Screen Security
- Background blur
- iOS: overlay shown on
willResignActive, removed ondidBecomeActive - Android: overlay shown on window focus loss (Home / App Switcher), removed on regain
- iOS: overlay shown on
- Screenshot / screen‑recording prevention
- iOS: secure rendering via
UITextFieldsecure layer trick — blank in screenshots and recordings - Android:
WindowManager.LayoutParams.FLAG_SECURE— blocks screenshots and recents preview
- iOS: secure rendering via
- Screen recording detection
- iOS:
UIScreen.main.isCaptured(all OS versions) - Android: supported only on Android 15 (API 35+) via
WindowManager.addScreenRecordingCallback
- iOS:
- Background blur
- Architecture Cleanup & Stability Fixes
- Removed all TurboModule / JSI integration
- Removed all codegen-related files and configuration
- Cleaned Android build to remove stale codegen outputs
- Fixed “No such module 'React'” error
- Screen Security (v1.1.0+)
- Background blur
- iOS: overlay shown on
willResignActive, removed ondidBecomeActive - Android: overlay shown on window focus loss (Home / App Switcher), removed on regain
- iOS: overlay shown on
- Screenshot / screen‑recording prevention
- iOS: secure rendering via
UITextFieldsecure layer trick — blank in screenshots and recordings - Android:
WindowManager.LayoutParams.FLAG_SECURE— blocks screenshots and recents preview
- iOS: secure rendering via
- Screen recording detection
- iOS:
UIScreen.main.isCaptured(all OS versions) - Android: supported only on Android 15 (API 35+) via
WindowManager.addScreenRecordingCallback
- iOS:
- Background blur
- Android platform limitation:
WhenFLAG_SECUREis enabled, Android blanks the entire recents/app‑switcher snapshot.
This is a system‑level restriction — the blur overlay cannot appear simultaneously because the OS refuses to render any content (including overlays) into the snapshot.
iOS does not have this conflict; both blur and screenshot prevention can operate independently.
1.0.2 - 2026-07-03
developerModedetection — Android: Developer Options viaSettings.Secure, iOS: alwaysfalsegetDeviceRiskAssessment()— weighted risk scoring engine returningthreatLevel,score(0–100),signals[], andrecommendation- Five threat levels:
CLEAN/LOW/MEDIUM/HIGH/CRITICAL CompromisedResultTypeScript type exported from package root- Native debugger detection via
TracerPidin/proc/self/status(catches lldb/gdb) Debug.waitingForDebugger()added to Android debugger check- Sensor count heuristic for emulator detection (real devices ≥ 15 sensors, emulators < 5)
- Emulator coverage expanded: Bluestacks, Nox, LDPlayer, MEmu, Andy, Droid4X, Genymotion/VirtualBox
- Zygisk path added to suspicious file list (
/data/adb/modules/.zygisk) s.swift_version = "5.0"added to podspec
isDeviceCompromised()now uses weighted score threshold (≥ 30) internally — fully backward compatibleSecurityScanResultextended withdeveloperMode: boolean- Android
compileSdkVersion/targetSdkVersionbumped to35 - RootBeer bumped
0.1.1→0.1.2 - Example app redesigned with risk score card, threat level indicator, score bar, and severity badges
podspecdir→__dir__(causedpod installcrash in consuming apps)podspecsource_filesglobios/*/*.→ios/**/*.(recursive)hooksDetectedfalse positives eliminated:- Removed
isAdbRootOrDebuggable()(flagged BrowserStack / Firebase / LambdaTest real devices) - Removed duplicate
hasEdXposedInstalled()call - Replaced broad
"frida"substring → specific"frida-agent"/"frida-gadget" - Replaced broad
"epic"substring → path-based"/epic/"(avoidslibepic_perf.soon Samsung/Huawei) - Replaced broad
"xposed"substring → specific"XposedBridge" /proc/self/mapsscanner now checks pathname column only — skips anonymous mappings
- Removed
- Removed
Build.USER == "android-build"from emulator detection (false positive on Firebase Test Lab / AWS Device Farm real devices) - Removed
Build.TAGS.contains("test-keys")from emulator detection (false positive on some OEM builds)
1.0.1 - 2026-06-27
hooksDetectedfield added toSecurityScanResult- iOS: dyld image scan for Substrate, Substitute, LibHooker, TweakInject
- Android:
/proc/self/mapsscan for Xposed, LSPosed, EdXposed, SandHook, Epic, Frida gadget
hooksDetectedincluded inisDeviceCompromised()checkhooksDetectedmapped to OWASP M10 in documentation- Example app (
example/SampleApp/) added to repository - Screenshots added to README (Android + iOS)
- README overhauled — badges, full
SecurityScanResultJSDoc, VAPT compliance table, example app section, architecture section - RootBeer bumped
0.1.0→0.1.1(16 KB ELF page alignment for Android 15+ / Google Play November 2025 compliance)
NativeShieldScan.tsTurboModule spec missinghooksDetected— causedbob buildfailure blocking npm publish
1.0.0 - 2026-06-26
- Initial release
- iOS: jailbreak detection (file paths, sandbox write test, symlink check)
- iOS: Frida detection (dylib injection, port 27042, environment variable)
- iOS: debugger detection via
sysctl/kinfo_procP_TRACED flag - iOS: simulator detection via
targetEnvironment(simulator) - iOS: hooking framework detection via dyld image scan
- Android: root detection via RootBeer
0.1.0 - Android: file-based root detection (Magisk, SuperSU, Xposed, Frida paths)
- Android: Frida detection (file paths + TCP port 27042)
- Android: emulator detection via
Buildfingerprint heuristics - Android: debugger detection via
Debug.isDebuggerConnected() - Old Architecture (Bridge) and New Architecture (Turbo Modules / JSI) support
runSecurityChecks()andisDeviceCompromised()public API- TypeScript types for all public API