mirror of
https://github.com/StikDebug/StikJIT.git
synced 2026-10-15 12:02:15 +00:00
Add support for 17.4+ and non TXM devices
This commit is contained in:
parent
df94f02fc2
commit
5b83ce273a
2 changed files with 70 additions and 1 deletions
|
|
@ -42,7 +42,18 @@ final class JITSession {
|
||||||
_ = try? sendCommand("QStartNoAckMode", over: debugProxy)
|
_ = try? sendCommand("QStartNoAckMode", over: debugProxy)
|
||||||
debug_proxy_set_ack_mode(debugProxy, 0)
|
debug_proxy_set_ack_mode(debugProxy, 0)
|
||||||
|
|
||||||
try ScriptRunner(targetPID: targetPID, debugProxy: debugProxy, progress: progress).run()
|
if ProcessInfo.processInfo.hasTXM {
|
||||||
|
try ScriptRunner(targetPID: targetPID, debugProxy: debugProxy, progress: progress).run()
|
||||||
|
} else {
|
||||||
|
try attachWithoutScript(targetPID: targetPID, debugProxy: debugProxy, progress: progress)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private func attachWithoutScript(targetPID: Int32, debugProxy: OpaquePointer, progress: (String) -> Void) throws {
|
||||||
|
progress("Attaching to pid \(targetPID). This device has no TXM, so the attach alone enables JIT and the script is skipped.")
|
||||||
|
_ = try sendCommand("vAttach;\(String(targetPID, radix: 16))", over: debugProxy)
|
||||||
|
_ = try? sendCommand("D", over: debugProxy)
|
||||||
|
progress("JIT enabled (debugger attached and detached).")
|
||||||
}
|
}
|
||||||
|
|
||||||
private func openPairingFile() throws -> OpaquePointer {
|
private func openPairingFile() throws -> OpaquePointer {
|
||||||
|
|
|
||||||
58
Sources/ProcessInfo+TXM.swift
Normal file
58
Sources/ProcessInfo+TXM.swift
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension ProcessInfo {
|
||||||
|
var hasTXM: Bool {
|
||||||
|
let hardware = Self.hardwareIdentifier()
|
||||||
|
|
||||||
|
if Self.isIOS27OrNewer {
|
||||||
|
return hardware != "iPad8,11" && hardware != "iPad8,12"
|
||||||
|
}
|
||||||
|
|
||||||
|
if Self.isIOS26OrNewer {
|
||||||
|
return Self.hasTXMSupport(hardwareIdentifier: hardware)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func hasTXMSupport(hardwareIdentifier: String) -> Bool {
|
||||||
|
let firstTXM = 14.2
|
||||||
|
let iPadTXM = 14.5
|
||||||
|
guard let version = deviceVersion(from: hardwareIdentifier) else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if hardwareIdentifier.hasPrefix("iPad") {
|
||||||
|
return version >= iPadTXM
|
||||||
|
}
|
||||||
|
return version >= firstTXM
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func deviceVersion(from identifier: String) -> Double? {
|
||||||
|
func version(forPrefix prefix: String) -> Double? {
|
||||||
|
guard identifier.hasPrefix(prefix) else { return nil }
|
||||||
|
let parts = identifier.dropFirst(prefix.count).split(separator: ",")
|
||||||
|
guard parts.count == 2, let major = Int(parts[0]), let minor = Int(parts[1]) else { return nil }
|
||||||
|
return Double("\(major).\(minor)")
|
||||||
|
}
|
||||||
|
return version(forPrefix: "iPhone") ?? version(forPrefix: "iPad")
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func hardwareIdentifier() -> String {
|
||||||
|
var size = 0
|
||||||
|
sysctlbyname("hw.machine", nil, &size, nil, 0)
|
||||||
|
guard size > 0 else { return "" }
|
||||||
|
var buffer = [CChar](repeating: 0, count: size)
|
||||||
|
sysctlbyname("hw.machine", &buffer, &size, nil, 0)
|
||||||
|
return String(cString: buffer)
|
||||||
|
}
|
||||||
|
|
||||||
|
private static var isIOS26OrNewer: Bool {
|
||||||
|
if #available(iOS 26.0, *) { return true }
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private static var isIOS27OrNewer: Bool {
|
||||||
|
if #available(iOS 27.0, *) { return true }
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue