From d4306e724b23acb880015c79b13a5f3589939e2d Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Sun, 27 Sep 2026 15:26:08 -0600 Subject: [PATCH 01/12] 3.1.12 ReadMe --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d698aa5..362417e 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@

Add AltSource   -Download .ipa +Download .ipa

## Compatibility From c03abcaa44cbb61e31085dd88b8138913921d94e Mon Sep 17 00:00:00 2001 From: Stephen Date: Mon, 28 Sep 2026 07:32:03 -0400 Subject: [PATCH 02/12] Update AutoScriptAssignments.swift --- StikDebug/Support/AutoScriptAssignments.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/StikDebug/Support/AutoScriptAssignments.swift b/StikDebug/Support/AutoScriptAssignments.swift index ec5ffd2..a0b1b93 100644 --- a/StikDebug/Support/AutoScriptAssignments.swift +++ b/StikDebug/Support/AutoScriptAssignments.swift @@ -23,7 +23,8 @@ extension ScriptStore { "HyperHLE", "Applesauce", "RPCS3", - "AetherPS4" + "AetherPS4", + "MeloCafe" ], resource: ScriptResource(resourceName: "universal", fileName: "universal.js") ), From 4b3c8d6e883c46fa9d5379e15d3f92bc1815b5f0 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Mon, 28 Sep 2026 08:24:29 -0600 Subject: [PATCH 03/12] =?UTF-8?q?Rename=20'MeloCafe'=20to=20'MeloCaf=C3=A9?= =?UTF-8?q?'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- StikDebug/Support/AutoScriptAssignments.swift | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/StikDebug/Support/AutoScriptAssignments.swift b/StikDebug/Support/AutoScriptAssignments.swift index a0b1b93..4c6934f 100644 --- a/StikDebug/Support/AutoScriptAssignments.swift +++ b/StikDebug/Support/AutoScriptAssignments.swift @@ -15,7 +15,7 @@ extension ScriptStore { "Amethyst", "MeloNX", "XeniOS", - "MeloCafe", + "MeloCafé", "Manic EMU", "DukeX", "TachyonU", @@ -23,8 +23,7 @@ extension ScriptStore { "HyperHLE", "Applesauce", "RPCS3", - "AetherPS4", - "MeloCafe" + "AetherPS4" ], resource: ScriptResource(resourceName: "universal", fileName: "universal.js") ), From 4bdfc92aa7cebd7a534f1e1ef56415f5727402de Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Mon, 28 Sep 2026 08:29:15 -0600 Subject: [PATCH 04/12] 3.1.13 --- README.md | 2 +- StikDebug.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 362417e..20d2ac5 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@

Add AltSource   -Download .ipa +Download .ipa

## Compatibility diff --git a/StikDebug.xcodeproj/project.pbxproj b/StikDebug.xcodeproj/project.pbxproj index d304102..b48192d 100644 --- a/StikDebug.xcodeproj/project.pbxproj +++ b/StikDebug.xcodeproj/project.pbxproj @@ -482,7 +482,7 @@ "$(PROJECT_DIR)/StikDebug/idevice", ); MACOSX_DEPLOYMENT_TARGET = 15.1; - MARKETING_VERSION = 3.1.12; + MARKETING_VERSION = 3.1.13; PRODUCT_BUNDLE_IDENTIFIER = com.stik.stikdebug; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -544,7 +544,7 @@ "$(PROJECT_DIR)/StikDebug/idevice", ); MACOSX_DEPLOYMENT_TARGET = 15.1; - MARKETING_VERSION = 3.1.12; + MARKETING_VERSION = 3.1.13; PRODUCT_BUNDLE_IDENTIFIER = com.stik.stikdebug; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; From 871f1461d92b358624ec044700ea348d379fdae5 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Sun, 4 Oct 2026 14:09:38 -0600 Subject: [PATCH 05/12] Update README.md --- README.md | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 20d2ac5..d56a860 100644 --- a/README.md +++ b/README.md @@ -7,24 +7,16 @@

An on-device debugger/JIT enabler for iOS versions 17.4+ powered by idevice.

-
- - - - - - - - - - - - -
+

+   +   +   + +

## Features -- **JIT:** Enable Just In Time compilation for sideloaded apps that have the `get-task-allow` entitlement. +- **JIT:** Enable Just-In-Time compilation for sideloaded apps that have the `get-task-allow` entitlement. - **App Launching:** Launch every app installed on your device. - **Console:** Live app and system logs. - **Scripts:** Manage automation scripts (mainly used for iOS 26 JIT). @@ -69,12 +61,12 @@ StikDebug enables **JIT** for sideloaded apps on iOS 17.4+ without needing a com - Launch LocalDevVPN and enable the VPN. 4. **Enable JIT for an app** - - Launch StikDebug and tapp the `Enable JIT` button. + - Launch StikDebug and tap the `Enable JIT` button. - Select your sideloaded app from the list in StikDebug. **Troubleshooting** - "Connection dropped" or loopback errors → Check iOS version compatibility / beta warnings. -- Heartbeat errors → Ensure that the VPN is on and that you are connecected to Wi-Fi. It may be a pairing file issue. +- Heartbeat errors → Ensure that the VPN is on and that you are connected to Wi-Fi. It may be a pairing file issue. - Pairing file issues → Replace file with device unlocked & trusted. - Still stuck? Join the [Discord](https://discord.gg/ZnNcrRT3M8) with logs/screenshots. @@ -147,13 +139,15 @@ To propose a new feature, open a feature request issue and provide: ### Code Contributions (Best Practices) - Follow normal Swift and SwiftUI style. -- Write clear and easy to understand code. +- Write clear and easy-to-understand code. - Keep your changes consistent with how the project is already set up. - Make sure everything builds and works without errors. We appreciate your time and effort in helping improve this project. ## Code Help -[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/StikDebug/stikdebug) + +[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/StikDebug/StikDebug) + ## License StikDebug is licensed under **AGPL-3.0**. See [`LICENSE`](LICENSE) for details. From 775fba15f3fbadc18f7f1444dc6ffb1566adaa4c Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Sat, 10 Oct 2026 17:53:12 -0600 Subject: [PATCH 06/12] Update AutoScriptAssignments.swift --- StikDebug/Support/AutoScriptAssignments.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/StikDebug/Support/AutoScriptAssignments.swift b/StikDebug/Support/AutoScriptAssignments.swift index 4c6934f..57eabd9 100644 --- a/StikDebug/Support/AutoScriptAssignments.swift +++ b/StikDebug/Support/AutoScriptAssignments.swift @@ -23,7 +23,8 @@ extension ScriptStore { "HyperHLE", "Applesauce", "RPCS3", - "AetherPS4" + "AetherPS4", + "Husk" ], resource: ScriptResource(resourceName: "universal", fileName: "universal.js") ), From 300ebff50ba24a75e7bac7cf1621c6534528abc8 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Sun, 11 Oct 2026 21:13:08 -0600 Subject: [PATCH 07/12] 3.1.14 --- README.md | 2 +- StikDebug.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d56a860..f4a264c 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@

Add AltSource   -Download .ipa +Download .ipa

## Compatibility diff --git a/StikDebug.xcodeproj/project.pbxproj b/StikDebug.xcodeproj/project.pbxproj index b48192d..8fef17f 100644 --- a/StikDebug.xcodeproj/project.pbxproj +++ b/StikDebug.xcodeproj/project.pbxproj @@ -482,7 +482,7 @@ "$(PROJECT_DIR)/StikDebug/idevice", ); MACOSX_DEPLOYMENT_TARGET = 15.1; - MARKETING_VERSION = 3.1.13; + MARKETING_VERSION = 3.1.14; PRODUCT_BUNDLE_IDENTIFIER = com.stik.stikdebug; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -544,7 +544,7 @@ "$(PROJECT_DIR)/StikDebug/idevice", ); MACOSX_DEPLOYMENT_TARGET = 15.1; - MARKETING_VERSION = 3.1.13; + MARKETING_VERSION = 3.1.14; PRODUCT_BUNDLE_IDENTIFIER = com.stik.stikdebug; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; From e4665d74b55c73b7e577916e78572724a7e4f042 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Mon, 12 Oct 2026 06:56:17 -0600 Subject: [PATCH 08/12] Update SettingsView.swift --- StikDebug/Views/SettingsView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StikDebug/Views/SettingsView.swift b/StikDebug/Views/SettingsView.swift index 871fe31..fc4bc3e 100644 --- a/StikDebug/Views/SettingsView.swift +++ b/StikDebug/Views/SettingsView.swift @@ -7,7 +7,7 @@ import SwiftUI import UIKit private enum SettingsLinks { - static let githubStars = URL(string: "https://github.com/StikDebug/StikDebug/stargazers")! + static let githubStars = URL(string: "https://github.com/StikDebug/StikDebug")! static let pairingFileGuide = URL(string: "https://github.com/StikDebug/StikDebug-Guide/blob/main/pairing_file.md")! static let localDevVPN = URL(string: "https://apps.apple.com/us/app/localdevvpn/id6755608044")! static let discord = URL(string: "https://discord.gg/qahjXNTDwS")! From cd5e60938753afe2d67175d94bcaae639837bbb6 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Mon, 12 Oct 2026 06:56:38 -0600 Subject: [PATCH 09/12] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f4a264c..9e06a52 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@

    -   +  

From 734361bb9d03817ed8dd82cb27cf8b2b3792b458 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Wed, 14 Oct 2026 23:26:00 -0400 Subject: [PATCH 10/12] fix: handle legacy and cryptex DDI service discovery --- StikDebug/Device/IdeviceFFIBridge.swift | 76 +++++++++++++------------ StikDebug/Device/JITEnableContext.swift | 26 ++++----- StikDebug/Device/mountDDI.swift | 1 + 3 files changed, 54 insertions(+), 49 deletions(-) diff --git a/StikDebug/Device/IdeviceFFIBridge.swift b/StikDebug/Device/IdeviceFFIBridge.swift index 3e1c98e..2c2c805 100644 --- a/StikDebug/Device/IdeviceFFIBridge.swift +++ b/StikDebug/Device/IdeviceFFIBridge.swift @@ -39,7 +39,8 @@ private enum IdeviceBridge { } let code = Int(ffiError.pointee.code) - let message = string(from: ffiError.pointee.message) ?? fallback + let detail = string(from: ffiError.pointee.message) ?? fallback + let message = detail == fallback ? fallback : "\(fallback): \(detail)" idevice_error_free(ffiError) return makeError(domain: domain, code: code, message: message) } @@ -264,45 +265,50 @@ private enum IdeviceBridge { extension JITEnableContext { func isDeveloperDiskImageMounted() throws -> Bool { try IdeviceBridge.withTunnelHandles(for: self) { adapter, handshake in - var installed: UnsafeMutablePointer? - let ffiError = cryptexd_installed_ddi(adapter, handshake, &installed) - let queryError = ffiError.map { - IdeviceBridge.consumeFFIError($0, fallback: "Failed to query installed DDI cryptex") - } - defer { cryptexd_free_installed_cryptex(installed) } - if installed != nil { - return true + var cryptexQuerySucceeded = false + var cryptexQueryError: NSError? + if DeveloperDiskImageService.usesCryptexDDI { + var installed: UnsafeMutablePointer? + defer { cryptexd_free_installed_cryptex(installed) } + if let ffiError = cryptexd_installed_ddi(adapter, handshake, &installed) { + cryptexQueryError = IdeviceBridge.consumeFFIError(ffiError, fallback: "Failed to query installed DDI cryptex") + } else { + cryptexQuerySucceeded = true + if installed != nil { + return true + } + } } - let legacyMounted = (try? IdeviceBridge.withConnectedClient( - fallback: "Failed to connect to image mounter", - missingClientMessage: "Image mounter client was not created", - connect: { image_mounter_connect_rsd(adapter, handshake, $0) }, - cleanup: { image_mounter_free($0) } - ) { client in - var devices: UnsafeMutablePointer? - var deviceCount = 0 - if let error = image_mounter_copy_devices(client, &devices, &deviceCount) { - throw IdeviceBridge.consumeFFIError(error, fallback: "Failed to fetch mounted devices") - } - if let devices { - for index in 0..? + var deviceCount = 0 + if let error = image_mounter_copy_devices(client, &devices, &deviceCount) { + throw IdeviceBridge.consumeFFIError(error, fallback: "Failed to fetch mounted devices") } - idevice_data_free( - UnsafeMutableRawPointer(devices).assumingMemoryBound(to: UInt8.self), - UInt(deviceCount * MemoryLayout.stride) - ) + if let devices { + for index in 0...stride) + ) + } + return deviceCount > 0 } - return deviceCount > 0 - }) ?? false - if legacyMounted { - return true + } catch { + if cryptexQuerySucceeded { + return false + } + throw cryptexQueryError ?? (error as NSError) } - if let queryError { - throw queryError - } - return false } } diff --git a/StikDebug/Device/JITEnableContext.swift b/StikDebug/Device/JITEnableContext.swift index 9a37cf2..d2c65f0 100644 --- a/StikDebug/Device/JITEnableContext.swift +++ b/StikDebug/Device/JITEnableContext.swift @@ -117,7 +117,8 @@ final class JITEnableContext { guard let ffiError else { return makeError(fallback) } - let message = nsString(from: ffiError.pointee.message, fallback: fallback) + let detail = nsString(from: ffiError.pointee.message, fallback: fallback) + let message = detail == fallback ? fallback : "\(fallback): \(detail)" let error = makeError(message, code: Int(ffiError.pointee.code)) idevice_error_free(ffiError) return error @@ -457,22 +458,19 @@ final class JITEnableContext { private func withConnectedRemoteServer( _ body: (OpaquePointer) throws -> T ) throws -> T { - try ensureTunnel() - guard let adapter, let handshake else { - throw makeError("Tunnel is not connected") - } + try withFreshDebugTunnel(hostname: "StikDebugRemoteServer") { adapter, handshake in + var remoteServer: OpaquePointer? + if let ffiError = remote_server_connect_rsd(adapter, handshake, &remoteServer) { + throw error(from: ffiError, fallback: "Failed to connect remote server") + } - var remoteServer: OpaquePointer? - if let ffiError = remote_server_connect_rsd(adapter, handshake, &remoteServer) { - throw error(from: ffiError, fallback: "Failed to connect remote server") - } + guard let remoteServer else { + throw makeError("Remote server handle was not created") + } - guard let remoteServer else { - throw makeError("Remote server handle was not created") + defer { remote_server_free(remoteServer) } + return try body(remoteServer) } - - defer { remote_server_free(remoteServer) } - return try body(remoteServer) } private func withProcessControl( diff --git a/StikDebug/Device/mountDDI.swift b/StikDebug/Device/mountDDI.swift index 61128b5..0716ebb 100644 --- a/StikDebug/Device/mountDDI.swift +++ b/StikDebug/Device/mountDDI.swift @@ -27,6 +27,7 @@ func checkMountStatus() -> MountCheckResult { do { return try JITEnableContext.shared.isDeveloperDiskImageMounted() ? .mounted : .notMounted } catch { + LogManager.shared.addErrorLog("Failed to check DDI mount status: \(error.localizedDescription)") return .unreachable } } From 3422fc4725cd9d1fbc255ea36c6fe06eecfdf459 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Thu, 15 Oct 2026 10:30:45 -0400 Subject: [PATCH 11/12] 3.1.15 --- README.md | 2 +- StikDebug.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9e06a52..67102d1 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@

Add AltSource   -Download .ipa +Download .ipa

## Compatibility diff --git a/StikDebug.xcodeproj/project.pbxproj b/StikDebug.xcodeproj/project.pbxproj index 8fef17f..02930a2 100644 --- a/StikDebug.xcodeproj/project.pbxproj +++ b/StikDebug.xcodeproj/project.pbxproj @@ -482,7 +482,7 @@ "$(PROJECT_DIR)/StikDebug/idevice", ); MACOSX_DEPLOYMENT_TARGET = 15.1; - MARKETING_VERSION = 3.1.14; + MARKETING_VERSION = 3.1.15; PRODUCT_BUNDLE_IDENTIFIER = com.stik.stikdebug; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -544,7 +544,7 @@ "$(PROJECT_DIR)/StikDebug/idevice", ); MACOSX_DEPLOYMENT_TARGET = 15.1; - MARKETING_VERSION = 3.1.14; + MARKETING_VERSION = 3.1.15; PRODUCT_BUNDLE_IDENTIFIER = com.stik.stikdebug; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; From 1256c52803f63f8c993a8fcc25574c5f4ea6f7d1 Mon Sep 17 00:00:00 2001 From: CelloSerenity <195480169+CelloSerenity@users.noreply.github.com> Date: Thu, 15 Oct 2026 11:41:27 -0400 Subject: [PATCH 12/12] Fix DeepWiki embed --- README.md | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 67102d1..77a72a1 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,10 @@       - +   +
- + ## Features - **JIT:** Enable Just-In-Time compilation for sideloaded apps that have the `get-task-allow` entitlement. @@ -145,9 +146,5 @@ To propose a new feature, open a feature request issue and provide: We appreciate your time and effort in helping improve this project. -## Code Help - -[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/StikDebug/StikDebug) - ## License StikDebug is licensed under **AGPL-3.0**. See [`LICENSE`](LICENSE) for details.