Jailbreak detection (iOS)
final result = await DeviceShield.checkJailbreak();iOS only. On Android, and on the iOS Simulator, the status is
CheckStatus.notApplicable. Use root detection on Android.
Signals
Section titled “Signals”| Signal | What it checks | Strength |
|---|---|---|
jailbreak_app_paths |
/Applications/Cydia.app, Sileo.app or Zebra.app exists |
Strong |
suspicious_system_paths |
One of 9 paths that stock iOS doesn’t expose, such as /Library/MobileSubstrate/MobileSubstrate.dylib, /bin/bash, /usr/sbin/sshd, /etc/apt |
Strong |
writable_outside_sandbox |
The app can write, then delete, a file under /private/ |
Strong |
process_spawn_check |
posix_spawn("/bin/ls") succeeds, which the sandbox normally blocks |
Strong |
dyld_env_var |
DYLD_INSERT_LIBRARIES is set, meaning libraries are being injected |
Strong |
How the result is computed
Section titled “How the result is computed”Every jailbreak signal is strong, so any one of them means detected.
Limitations
Section titled “Limitations”- Rootless jailbreaks (Dopamine, palera1n rootless) install under
/var/jband may not trigger the classic path checks. - Jailbreak-hiding tweaks can hook the file-system calls these checks use.
posix_spawnand writes to/private/may draw questions in App Store review. See iOS setup.