Repository navigation
ARMSX3 for iOS 0.0.2 beta
Pre-releaseChanges since 0.0.1. Thanks to everyone who sent problem reports, since most of these fixes came from them. This is a beta: the JIT changes ran on an iPhone, and everything else was tested on a Mac. Please send a report if something works worse than in 0.0.1.
Requirements and install
ARMSX3 for iOS needs an iPhone or iPad with an A14 chip or newer, on iOS 26 or later. It isn't on the App Store, so install the IPA with SideStore, AltStore or LiveContainer. JIT needs a pairing file for your device (see Pairing files below).
Update LiveContainer first
If you run ARMSX3 inside LiveContainer, update LiveContainer to 3.8.13 or later before you install this build. That is the nightly build at the moment: https://github.com/LiveContainer/LiveContainer/releases/tag/nightly Older versions can't load the JIT helper, and ARMSX3 will fall back to StikDebug.
In LiveContainer, turn on Helper Process Support for ARMSX3, and open ARMSX3 full screen, not in a window.
Built-in JIT inside LiveContainer
ARMSX3 can now turn on JIT by itself inside LiveContainer, the same way it already did when installed on its own. You no longer need StikDebug for this. We tested it inside LiveContainer with SideStore; LiveContainer without SideStore hasn't been tested yet.
If built-in JIT can't start, the JIT and Device pane lists what it checked and how to fix each item: the LiveContainer version, Helper Process Support, full screen, and the pairing file. A new Test JIT Setup button checks the setup without restarting the app and tells you where it stopped.
Pairing files
Built-in JIT needs a pairing file made for your device. There are now more ways to give ARMSX3 one:
- Import Pairing File in Settings › JIT and Device, as before.
- Get from SideStore, when SideStore is installed.
- Share the file to ARMSX3, or use Open in from Files.
- Put a file named pairingFile.plist in ARMSX3's folder in Files. ARMSX3 picks it up the next time it starts.
- Inside LiveContainer, ARMSX3 can use the pairing file SideStore already keeps, without copying it.
The JIT pane shows which file is in use, where it came from, and whether your device accepted it.
StikDebug
StikDebug still works as a fallback when built-in JIT can't start, and the app says why it fell back. Support for StikDebug will be removed in a later version, so please move to built-in JIT when you can. Any StikDebug setting you had is switched to Built-in once, with a notice. The Force JIT Script switch is gone.
Red Dead Redemption and other games that read their depth buffer
Some games read the depth buffer they are drawing to, and ARMSX3 made a fresh copy of it for every such draw, even when nothing had changed. Red Dead Redemption did this about 150 times a frame. Those copies are now skipped when the depth buffer hasn't changed. On a Mac, Red Dead Redemption's title screen went from 8 to about 24 fps. We haven't measured it on an iPhone yet.
Faster game start
Starting a game decrypts its main program first. That now uses the iPhone's built-in AES instructions. On a Mac, Dragon Ball Xenoverse's 35 MB program decrypted in about 180 ms instead of 400 ms, and we expect a bigger saving on an iPhone.
Big games stopping with "JIT pool 3 is full"
Large games could fill the space for compiled game code while they were still loading. Sonic Unleashed did this on an iPhone 12 in every launch. Each small system module took a 2 MB block for itself, so about 75 of them used around 150 MB to hold 25 MB of code. Code now goes into 16 KB pieces, so the same modules need far less room.
With StikDebug, the app sets up that space at launch and has a time limit for it. On a slow phone the setup ran out of time every launch. When the app knows the game needs more room, the limit now grows from 15 to at most 25 seconds.
Stale graphics while shaders compile
On 4 GB iPhones a new shader can wait several seconds behind other shaders while the game keeps going. When that shader was the one that clears or fills the screen, part of the image stayed stale until it was ready. Those shaders now go first. On a Mac this cut such skipped draws from about 8,500 to about 240 per run.
Memory while recording
While an in-app recording ran, old textures were never freed. In one Dragon Ball Xenoverse report, texture memory grew from 142 MB to 2,460 MB in the first 21 seconds of a recording. Old textures are now freed during a recording too.
Problem reports
- When a game freezes, the report now says what each game thread is waiting on, and which thread holds it.
- Reports now say which JIT route ran, the result of Test JIT Setup, and more about LiveContainer.
- The RSX profiler now works on iPhone, which helps us find where graphics time goes.