iOS检测当前设备是否越狱系统 因国外客户对接进行代码扫描就扫出这么个问题,那就解决一下吧,进行记录一下mark 一下

新建JarBroken.swift

import Foundation

import UIKit

var isSimulator: Bool {

return TARGET_OS_SIMULATOR != 0

}

var isJailBroken: Bool {

get {

// if UIDevice.current.isSimulator { return false } // 模拟器不检测

if JailBrokenHelper.hasCydiaInstalled() { return true }

if JailBrokenHelper.isContainsSuspiciousApps() { return true }

if JailBrokenHelper.isSuspiciousSystemPathsExists() { return true }

return JailBrokenHelper.canEditSystemFiles()

}

}

private struct JailBrokenHelper {

static func hasCydiaInstalled() -> Bool {

return UIApplication.shared.canOpenURL(URL(string: "cydia://")!)

}

static func isContainsSuspiciousApps() -> Bool {

for path in suspiciousAppsPathToCheck {

if FileManager.default.fileExists(atPath: path) {

return true

}

}

return false

}

static func isSuspiciousSystemPathsExists() -> Bool {

for path in suspiciousSystemPathsToCheck {

if FileManager.default.fileExists(atPath: path) {

return true

}

}

return false

}

static func canEditSystemFiles() -> Bool {

let jailBreakText = "Developer Insider"

do {

try jailBreakText.write(toFile: jailBreakText, atomically: true, encoding: .utf8)

return true

} catch {

return false

}

}

/**

Add more paths here to check for jail break

*/

static var suspiciousAppsPathToCheck: [String] {

return ["/Applications/Cydia.app",

"/Applications/blackra1n.app",

"/Applications/FakeCarrier.app",

"/Applications/Icy.app",

"/Applications/IntelliScreen.app",

"/Applications/MxTube.app",

"/Applications/RockApp.app",

"/Applications/SBSettings.app",

"/Applications/WinterBoard.app"

]

}

static var suspiciousSystemPathsToCheck: [String] {

return ["/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",

"/Library/MobileSubstrate/DynamicLibraries/Veency.plist",

"/private/var/lib/apt",

"/private/var/lib/apt/",

"/private/var/lib/cydia",

"/private/var/mobile/Library/SBSettings/Themes",

"/private/var/stash",

"/private/var/tmp/cydia.log",

"/System/Library/LaunchDaemons/com.ikey.bbot.plist",

"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",

"/usr/bin/sshd",

"/usr/libexec/sftp-server",

"/usr/sbin/sshd",

"/etc/apt",

"/bin/bash",

"/Library/MobileSubstrate/MobileSubstrate.dylib"

]

}

}

还有添加白名单

在info.plist的LSApplicationQueriesSchemes密钥中添加“Cydia”。否则canOpenURL将始终返回false。

LSApplicationQueriesSchemes

cydia

使用

/// 检测当前设备是否越狱,越狱则禁止允许

let isBroken = isJailBroken;

if isBroken {

NSLog("当前系越狱系统,禁止使用")

} else {

NSLog("当前系越狱系统,禁止允许")

}

禁止使用进行提示后,代码退出当前APP到home页面代码在我上篇博客,有需要可以自己去看,哈哈 参考资料: https://developerinsider.co/best-way-to-check-if-your-ios-app-is-running-on-a-jailbroken-phone/

推荐阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。