iOS開發(fā)記錄 隨時(shí)更新

  • 獲取設(shè)備電量返回 -1.0
UIDevice.current.isBatteryMonitoringEnabled = true  //加上這個(gè),我一般在Appdelegate里寫
let batteryLevel = UIDevice.current.batteryLevel
  • 檢查文件是否越獄
extension UIDevice {
    var isJailbroken: Bool {
        // 如果是在模擬器上運(yùn)行,直接返回 false
        if isSimulator() {
            return false
        }
        
        // 常見的越獄文件路徑檢查
        let commonJailbreakPaths = [
            "/Applications/Cydia.app",
            "/Library/MobileSubstrate/MobileSubstrate.dylib",
            "/bin/bash",
            "/usr/sbin/sshd",
            "/etc/apt",
            "/usr/bin/ssh"
        ]
        
        // 如果發(fā)現(xiàn)這些文件,判斷為越獄
        for path in commonJailbreakPaths {
            if FileManager.default.fileExists(atPath: path) {
                return true
            }
        }
        
        // 檢查是否能在受限目錄中創(chuàng)建文件
        if canCreateTestFile() {
            return true
        }
        
        // 檢查是否能打開 Cydia URL
        if canOpenCydiaURL() {
            return true
        }
        
        // 檢查是否有動(dòng)態(tài)庫注入
        if hasInjectedLibraries() {
            return true
        }
        
        return false
    }
    
    // 判斷是否是模擬器
    private func isSimulator() -> Bool {
        return TARGET_IPHONE_SIMULATOR != 0
    }
    
    // 嘗試在受限目錄中創(chuàng)建測(cè)試文件
    private func canCreateTestFile() -> Bool {
        let testFilePath = "/private/jailbreak_test.txt"
        do {
            try "Jailbreak test".write(toFile: testFilePath, atomically: true, encoding: .utf8)
            try FileManager.default.removeItem(atPath: testFilePath)
            return true
        } catch {
            return false
        }
    }
    
    // 檢查是否能打開 Cydia URL
    private func canOpenCydiaURL() -> Bool {
        guard let url = URL(string: "cydia://package/com.example.package") else { return false }
        return UIApplication.shared.canOpenURL(url)
    }
    
    // 檢查是否有注入的動(dòng)態(tài)庫
    private func hasInjectedLibraries() -> Bool {
        guard let environment = getenv("DYLD_INSERT_LIBRARIES") else {
            return false
        }
        
        let injectedLibraries = String(cString: environment)
        
        // 檢測(cè)常見的越獄庫,可以根據(jù)需要擴(kuò)展
        let knownJailbreakLibs = [
            "MobileSubstrate.dylib",
            "SubstrateInserter.dylib",
            "SubstrateLoader.dylib",
            "CydiaSubstrate.dylib"
        ]
        
        for lib in knownJailbreakLibs {
            if injectedLibraries.contains(lib) {
                return true
            }
        }
        
        return false
    }
}

越獄判斷返回的結(jié)果可能會(huì)有變化,如果長期使用,建議定期檢查一下 或者使用第三方庫)

//pod 'SystemServices'
let isJailbroken = SystemServices.shared().jailbroken != NOTJAIL
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容