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 @@
-
+
## 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 @@
-
+
## 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
-[](https://deepwiki.com/StikDebug/stikdebug)
+
+[](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 @@
-
+
## 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 @@
-
+
## 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
-
-[](https://deepwiki.com/StikDebug/StikDebug)
-
## License
StikDebug is licensed under **AGPL-3.0**. See [`LICENSE`](LICENSE) for details.