Skip to content

feat(tools): add TrollStore deploy script - #18

Merged
tkgstrator merged 2 commits into
developfrom
feat/trollstore-deploy
Aug 1, 2026
Merged

feat(tools): add TrollStore deploy script#18
tkgstrator merged 2 commits into
developfrom
feat/trollstore-deploy

Conversation

@tkgstrator

Copy link
Copy Markdown
Contributor

What

tools/deploy.sh — ships a patched IPA to an iOS device and installs it through TrollStore over SSH.

Why

Deploying was a manual scp + ssh dance, and two device-specific gotchas kept biting:

  • trollstorehelper runs sandboxed and cannot read /tmp/ — an IPA staged there is rejected with return code 166 even though the file is physically present. The script stages into /var/mobile/Documents/ and chowns to mobile.
  • The helper binary lives in different places on TrollStore vs TrollStore Lite. The script SSH-discovers it, prefers TrollStoreLite.app, and filters out stale TrollStorePersistenceHelper.app leftovers whose entitlements have been invalidated (they SIGKILL with exit 137 / ssh 255).

It also killalls the running process before install — otherwise open <bundle-id> front-restores the old in-memory instance and the new binary never dyld_loads, which reads as "the tweak didn't take effect".

trollstorehelper commonly restarts SpringBoard mid-install, yanking the SSH session and returning exit 255 despite a successful install; that specific exit is tolerated, any other non-zero exit propagates.

Test plan

  • deploy.sh --ipa <patched.ipa> --host host.docker.internal --port 2222 --bundle-id com.neconome.shogi installs and relaunches on a TrollStore Lite device
  • Helper auto-discovery picks TrollStoreLite.app when both flavours are present
  • Missing required args exit 64 with usage

🤖 Generated with Claude Code

tkgstrator and others added 2 commits July 31, 2026 11:07
Shipping a patched IPA to a device was a manual scp + ssh dance, and two device-specific gotchas kept biting: trollstorehelper cannot read /tmp (error 166), and its location differs between TrollStore and TrollStore Lite installs.

deploy.sh stages into /var/mobile/Documents with a chown to mobile, auto-discovers the helper while filtering out stale PersistenceHelper leftovers, kills the running process so the new binary actually dyld_loads, and tolerates the ssh exit 255 that a mid-install SpringBoard restart produces.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
port_recipe re-resolves a recipe's SITES table against a new target's
dump index, rewriting the RVA and prologue columns while preserving row
order. That order is load-bearing: cave payloads are allocated in
declaration order while the dispatcher indexes by hook id, so the two
only agree when position equals id.

verify_offsets diffs il2cpp field offsets between two dump.cs files.
Prologue checks catch a moved method, but nothing catches a moved field
— a class that gains a member above the one a hook reads silently
shifts every offset below it.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@tkgstrator
tkgstrator merged commit adc49dc into develop Aug 1, 2026
2 checks passed
@tkgstrator
tkgstrator deleted the feat/trollstore-deploy branch August 1, 2026 13:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant