Commit graph

759 commits

Author SHA1 Message Date
James
346bff696e
Merge pull request #2 from dizzafizza/revert-1-claude/error-investigation-n934o5
Revert "Fix cryptic error for pairing files missing required fields"
2026-07-14 07:33:28 -07:00
James
dad59fab0c
Revert "Fix cryptic error for pairing files missing required fields" 2026-07-14 07:31:14 -07:00
James
2b56d47fed
Merge pull request #1 from dizzafizza/claude/error-investigation-n934o5
Fix cryptic error for pairing files missing required fields
2026-07-14 06:27:59 -07:00
Claude
2ee7a0c71f
Fix cryptic error for pairing files missing required fields
When rp_pairing_file_read fails to parse the local pairing plist (e.g. an
older/incompatible file missing public_key), the raw Serde/plist debug
string was surfaced as a generic "Connection Error" with a useless "Try
Again" button — retrying a local parse failure can never succeed. Reclassify
this failure to the same error code used for invalid pairing files so it
routes to the existing "Select New File" prompt instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DAnD7odyVzX36xY1vvZcJL
2026-07-14 13:25:49 +00:00
Claude
abcc0cfc78
Fix build: convert packet.count to UInt for debug_proxy_send_raw
debug_proxy_send_raw expects a UInt (uintptr_t) length; packet.count is Int,
which does not auto-convert. Archive failed with "cannot convert value of type
'Int' to expected argument type 'UInt'".

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qznh32XffG6vwFLMcwm1Mq
2026-07-14 13:03:23 +00:00
Claude
84a5a5eff6
Add experimental "hold app alive in background" mode
Targets the real problem: an app (e.g. Roblox) getting closed/disconnected by
iOS once it's in the background. iOS won't let one app keep another alive —
except that a process a debugger is attached to is not suspended on
backgrounding (the same reason an Xcode-run app keeps executing in the
background). This uses that.

- JITEnableContext.keepAppAlive: launch the app suspended, vAttach (which sets
  CS_DEBUGGED so JIT is on and marks the process debugger-owned), disable its
  memory limit to reduce background jetsam kills, send a raw continue so it
  runs, then hold the debug connection open with a heartbeat until the user
  stops it — then interrupt + detach so the app keeps running on its own. The
  hold is a single-threaded sleep-poll (no blocking socket reads, no concurrent
  handle access), so it's cleanly cancellable.
- BackgroundAliveManager + HoldToken: own one active hold, keep StikDebug itself
  alive via DebugKeepAliveLease for the duration, publish the active app name.
- UI: an experimental Settings toggle ("Hold App Alive in Background"); when on,
  tapping an app in Home holds it alive instead of a normal one-shot JIT, and a
  banner with a Stop button appears while a hold is active.

Caveats (documented in-app): experimental and unverified on-device; requires
StikDebug to stay running, so it's best-effort not bulletproof; cannot revive
an app iOS already killed; higher battery use.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qznh32XffG6vwFLMcwm1Mq
2026-07-14 12:53:28 +00:00
Claude
656ec6d512
Keep JIT/debug sessions alive when backgrounded and support cellular
When you enable JIT for an app and switch to it (e.g. a game), StikDebug
gets backgrounded. If iOS suspends it, the debug connection it holds — and
the marco/polo heartbeat that keeps that connection trusted — goes idle, the
device tears it down, and the app loses its session after a while. The app
also assumed Wi-Fi even though the tunnel rides LocalDevVPN and works on
cellular.

Session survival (backgrounding):
- DebugKeepAliveLease now forces the silent-audio and background-location
  keep-alive on for the whole debug session, regardless of the user's
  keep-alive toggles, so a session survives being switched out even if those
  toggles are off.
- Stop the background-task expiration handler from tearing the whole
  keep-alive down. It used to call invalidate() (killing audio/location) the
  moment the ~30s assertion elapsed; now it just renews the assertion while
  the silent-audio keep-alive continues to sustain background execution, so a
  long backgrounded session keeps running instead of dropping.
- Play an inaudible non-zero signal instead of digital silence so iOS does
  not treat the audio session as idle and reclaim it (suspending the app).

Cellular support:
- Add NetworkPathMonitor (NWPathMonitor) so the app observes the real path
  (Wi-Fi, cellular, or VPN) instead of assuming Wi-Fi.
- Retry the tunnel connect with backoff so transient cellular failures
  recover instead of erroring, skipping permanent errors (bad/missing pairing
  file, invalid target IP).
- Reconnect the tunnel on network-path changes (Wi-Fi<->cellular handoff).
- Remove the false "Wi-Fi required" wording from the connection alerts and
  the README.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qznh32XffG6vwFLMcwm1Mq
2026-07-14 08:59:20 +00:00
Claude
984a94a031
Speed up route preparation for long routes
Long routes took minutes to prepare (or appeared stuck) because of three
compounding costs, each now fixed:

- Overpass fetch: the query covered the route's whole bounding box, so a
  long or diagonal route pulled every speed-limited road in a huge
  rectangle. Replace it with an 'around' corridor query over a
  downsampled route line (75 m spacing, capped at 700 points), so the
  payload scales with route length, not bounding area. POST the query
  (corridor strings outgrow GET URLs) with an explicit 30 s timeout so a
  slow server can no longer stall route prep indefinitely — failures
  fall back to profile/ETA pacing as before.

- Speed-limit matching: nearestSpeedLimit rescanned every OSM way
  segment for every route segment (O(route x ways), tens of millions of
  distance checks on long routes). Add RouteSpeedIndex, a grid-bucketed
  spatial index (~440 m cells) probed via its 3x3 neighborhood; every
  search radius is well below one cell, so results are unchanged. The
  bus-stop approach check and the dwell snapping pass (previously
  O(stops x samples)) use the same bucketing.

- Route densification: 10 m sampling made a 300 km route produce 30k+
  points on the main thread. Sampling now widens adaptively past a 25k
  point cap; playback interpolates per tick within segments anyway, so
  smoothness is unaffected.
2026-07-14 07:56:59 +00:00
Claude
3e3fc5ebc5
Catch bus stops mapped with the public_transport schema
Previously only OSM nodes tagged highway=bus_stop were fetched and drawn,
which misses most stops in regions that use the newer public_transport
schema (platform / stop_position with bus=yes). Query and decode all of
these tag combinations so bus mode surfaces the full set of stops instead
of the sparse few tagged the legacy way.
2026-07-14 05:55:32 +00:00
Claude
8ea835e291
Show bus stops on the map in bus simulator mode
The bus stops fetched from OpenStreetMap for bus-mode pacing/dwell were
only used to compute playback timing and never drawn. Surface them from
the prefetch result into view state and render them as orange bus markers
whenever the Bus speed profile is active.
2026-07-14 05:49:25 +00:00
Claude
f848bca707
Add map style options to location simulator (satellite, hybrid, traffic, transit stops)
- New toolbar menu on the location simulator map to switch between
  Standard, Satellite, and Hybrid map types
- Traffic overlay toggle for Standard/Hybrid modes
- Points-of-interest mode: All Places, Transit Stops (surfaces bus
  stops), or Hidden
- Selections persist across launches via AppStorage

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CUJbpUQiRUbjiTiYA4v7UK
2026-07-14 05:39:06 +00:00
sandbox
69d7a1d9cc Fix build: return RouteSpeedContext, not [], in fetchRouteSpeedContext
Leftover empty-array return from the pre-refactor signature caused
'cannot convert [Any] to RouteSpeedContext' at MapSelectionView.swift:338.
2026-07-13 22:08:46 -07:00
dizzafizza
7880604f2d Add speed profiles for route playback (walking/jogging/cycling/driving/bus/custom)
Adds a SpeedProfile picker to route simulation with fixed paces for
walking, jogging, and cycling; road-speed-limit-based driving; a
capped bus profile that slows on approach to and dwells at Overpass
bus_stop nodes; and a custom km/h speed entered by the user. Also
extends OverpassResponse.Element with lat/lon so bus stop nodes
(which report coordinates directly rather than via geometry) can be
parsed.
2026-07-13 22:01:41 -07:00
James
61f43e6bc0
Update build_ipa.yml 2026-07-13 19:08:18 -07:00
James
c3cda9f1fd
Update build_ipa.yml 2026-07-13 18:53:33 -07:00
James
e380f633b2
Update build_ipa.yml 2026-07-13 18:40:29 -07:00
James
07577f574e
Create swift.yml 2026-07-13 18:27:04 -07:00
James
c9f0ec9294
Update MapSelectionView.swift
made the default speed walking speed
2026-07-13 18:24:52 -07:00
Stephen
c5b23e2282 Fix my mistake 2026-06-18 13:27:49 -04:00
CelloSerenity
1bb753086f
Update readme 2026-06-16 22:12:39 -06:00
CelloSerenity
7f2808bfb5
3.1.6 2026-06-16 21:53:53 -06:00
CelloSerenity
ef5e962b38
Merge pull request #416 from CelloSerenity/main
Fix TXM detection on iOS 27
2026-06-16 21:28:09 -06:00
Stephen
c504ef3ef5 Add a toggle 2026-06-02 07:50:20 -04:00
ca2df1efd2
Update README.md 2026-06-01 07:32:57 -04:00
Stephen
754fba0291 3.1.5 2026-06-01 07:29:22 -04:00
848ddbbfa4
Update README.md 2026-05-31 21:12:34 -04:00
Stephen
b4caf9dd8e Clean up app 2026-05-31 21:02:17 -04:00
Stephen
57ede80dad Merge branch 'main' of https://github.com/StephenDev0/StikDebug 2026-05-31 20:53:40 -04:00
Stephen
ec278d6963 Fix an issue with the script sheet 2026-05-31 20:53:38 -04:00
d16f318844
Update AutoScriptAssignments.swift 2026-05-31 20:11:25 -04:00
Stephen
577e9ba574 Fix Version 2026-05-31 20:08:50 -04:00
Stephen
1faead2751 3.1.5 2026-05-31 20:07:01 -04:00
CelloSerenity
34d0f80e3a
Update AutoScriptAssignments.swift 2026-05-30 07:29:42 -06:00
Stephen
ec147679e1 Hopefully fix some weird issues 2026-05-20 10:07:09 -04:00
Stephen
f9c1f46fad Change StikJIT to StikDebug 2026-05-20 09:07:55 -04:00
Stephen
ef2cabc9a7 Bump ver and update old naming 2026-05-20 09:05:00 -04:00
Stephen
4b20cd3d1e Push missing 3.1.3 commits and hopefully add better error clarity 2026-05-20 09:02:20 -04:00
8a7b39dbe2
Refactor build_ipa.yml workflow triggers and permissions
Updated workflow to only trigger on 'main' branch and adjusted permissions.
2026-05-18 11:03:44 -04:00
faaf0fecaa
Update StikDebug download link to version 3.1.3 2026-05-18 10:50:55 -04:00
b2ef1deb32
Change UPLOAD_IPA default value to 'true' 2026-05-18 10:38:43 -04:00
Stephen
47e36b8bdd Update news item 2026-05-18 10:22:55 -04:00
Stephen
fdbcec2908 Test 2026-05-18 10:19:33 -04:00
Stephen
c84b6b4219 Bump Version 2026-05-18 09:44:11 -04:00
Stephen
a4ce84cdd4 Hopefully fix issue #330 2026-05-18 09:38:57 -04:00
Stephen
08830f1125 3.1.3 WIP 2026-05-18 09:25:24 -04:00
78551b8592
Update Extensions.swift 2026-05-18 09:21:26 -04:00
215b3fd50d
Change default UPLOAD_IPA value to 'false' 2026-05-18 09:12:54 -04:00
Stephen
3b1e779aa6 Add more accessibility features 2026-05-12 12:00:57 -04:00
Stephen
0169ec97fe
Update StikDebug download link to version 3.1.2 2026-04-12 02:41:49 -04:00
Stephen
918877a191 3.1.2 2026-04-12 02:33:26 -04:00