Device Testing
Manual checklist for testing a patched IPA on a real iPhone via AltStore Classic.
forge patch produces a signed, standard-structure .ipa. Everything up to
that point is covered by the automated test suite (pytest tests/). What is
not and cannot be automated in this environment is confirming AltStore
Classic itself accepts, installs, launches, and refreshes the result on a
real iPhone. This is a manual procedure to run by hand.
Prerequisites
- AltServer running on the same Mac/PC used to sign the IPA, paired with your iPhone over USB or Wi-Fi (see AltStore Classic's own setup docs).
- A real (not synthetic)
.ipato patch, or thefixtures/synthetic_app.ipafixture for a structural-only smoke test (it will install and its process will launch, but it has no UI). - A matching
.mobileprovisionand signing identity for your Apple ID's team, produced the normal way through AltServer's own account/profile management (see Signing identity & profile).
Checklist
Patch
forge patch --ipa <input> --patches <patches.yaml> --identity <identity> --profile <profile> --output patched.ipaInstall
In AltStore's "My Apps" tab, use "+" and select patched.ipa.
Launch
Tap the installed app icon on the home screen.
Expected: app launches without an "Unable to Install" / "Untrusted Developer" prompt (trust the developer certificate in Settings if iOS prompts for it on first launch of a personal-team build).
Confirm the patch took effect
Check whatever the patch definition changed (a swapped resource, a binary behavior change, etc).
Force a refresh
In AltStore's "My Apps", pull to refresh (or wait for AltServer's background refresh). Confirm the app's expiry date extends and the app still launches afterward without re-signing errors.
Expiry note
A free Apple ID sideload expires after 7 days and AltStore currently limits free accounts to 3 active sideloaded apps and 10 App IDs per rolling 7-day window — if refresh silently fails, check those limits before assuming the patcher produced a bad IPA.
If any step fails
Capture forge patch --verbose output (the manifest) and the on-device
error text — both are needed to tell a patcher bug apart from an
AltStore/account-limit issue.