Skip to content

Releases: 0xjohnnydev/Applesauce

Applesauce touch fix (landscape)

Pre-release

Choose a tag to compare

@0xjohnnydev 0xjohnnydev released this 17 Aug 15:53

Follow-up to the landscape-orientation fix (ios-v0.4.2-orientation-fix): that build fixed which direction a landscape-only game launches in, but touch could still land in the wrong place, since the host was still telling SDL/UIKit that either landscape direction was fine even for a game that only supports one. That leaves the OS free to auto-rotate the actual presented surface to whichever way the phone is physically held; the picture still looks right (touchHLE rotates the framebuffer itself), but the OS then delivers raw touch coordinates in that other orientation, so taps land in the wrong spot with nothing unusual in the log.

The host now locks the SDL orientation hint to the exact single direction a landscape-only app declares in its Info.plist, instead of always permitting both.

Built from commit e8e9d67.

Applesauce landscape-orientation fix

Pre-release

Choose a tag to compare

This TrollStore release fixes landscape-only games launching rotated 180 degrees with touches mapped to the wrong edges (reported in #2).

The host only tracked "supports landscape" as one bit, not which specific direction (UIInterfaceOrientationLandscapeLeft vs ...Right) a landscape-only app's Info.plist declares. It fell back to guessing the direction from whichever way the phone physically happened to be rotated when Play was tapped — wrong about half the time. The orientation-capability bits passed from the emulator core to the native UI now carry the specific declared direction, so the host launches in the exact direction the app declares instead of guessing.

Verified on the iOS 16.4 simulator: a real landscape-only game (UIInterfaceOrientationLandscapeRight) now consistently launches with orientation=LandscapeLeft regardless of the device's physical orientation at launch time, matching the existing UIInterfaceOrientation→DeviceOrientation flip convention.

Built from commit 8231242.

Applesauce 0.4.2

Choose a tag to compare

@0xjohnnydev 0xjohnnydev released this 15 Aug 23:21

Applesauce 0.4.2

Five fixes, mostly found by pushing Blade Dash and Talking Tom until they
broke. Nothing about installing or your library changes — pick the same IPA
you used for 0.4.0.

Applesauce is an unaffiliated fork. The emulation is the work of
touchHLE and its fork
HyperHLE; neither project is connected
to this one or endorses it. Please report problems here rather than to them.

The on-screen keyboard now appears in games that use text fields

Games that focus a text field — The Sims Medieval naming your Sim or kingdom,
Peggle's profile certificate, Blokus, Spore — loaded the iOS keyboard
subsystem but no keyboard ever came up, so those names could not be entered.
The cause was run-loop starvation: the emulator holds the main thread and only
let iOS service its run loop for microseconds per frame, far too little for the
asynchronous keyboard-presentation handshake to finish, so iOS invalidated the
keyboard service connection. The emulator now services the run loop generously
while a text field is focused, which is not performance-sensitive because those
are name-entry screens.

Talking-character apps can use the microphone

Apps like Talking Tom sat silent because input audio queues were created but
never delivered any audio. They now capture through the microphone, and iOS
shows its normal microphone-permission prompt the first time a game records.
Along the way this also fixes two things that made Talking Tom unusable:

  • It no longer freezes after a couple of taps. Its recorder treated a
    buffer that reported zero packets as empty and re-enqueued it without ever
    looking at the audio, so it waited forever for speech that had already
    arrived. The real sample count is reported now.
  • Opening the upgrade screen no longer crashes. That screen loads a
    UTF-16 text file, the format Apple recommended for older apps, and the
    loader used to abort on it. It reads UTF-16 in either byte order now.

Games that crashed on launch now start

Blade Dash — and other games built on Google's protobuf/Tag Manager runtime —
crashed immediately with a stack overflow or an infinite loop. Three separate
causes:

  • The old-toolchain [super …] call was unbound, turning every super-call
    into infinite recursion on the object itself.
  • NSAllocateObject was implemented by re-sending alloc, which recursed
    forever whenever an app allocates with a computed size.
  • Legitimately deep start-up chains (protobuf nests initialisation through
    hundreds of classes) overflowed the small per-thread host stack before the
    recursion guard could catch it; threads get a much larger stack now.

Notes

These fixes are in the HyperHLE core and the shared iOS layer. As always, JIT
must be enabled before starting a game, and gameplay behaviour on a physical
device can differ from the simulator — please report anything that still
misbehaves, with the log from On My iPhone → Applesauce → touchhle-host.log.

Applesauce 0.4.1

Choose a tag to compare

@0xjohnnydev 0xjohnnydev released this 15 Aug 16:00

Applesauce 0.4.1

Two fixes, both found by playing Peggle until it broke. Nothing about
installing or your library changes — pick the same IPA you used for 0.4.0.

Games no longer hang at a full loading bar

The emulator's wcstol and wcstod only accepted a string that was all
number, where the real C functions read the leading number and ignore
whatever follows. Peggle reads its stage list exactly that way — the number
sits on a line with text after it — so the parse failed, Peggle threw away
every stage it had loaded, and the loading screen sat at a full bar waiting
for data that no longer existed. Any other game reading "number, then text"
config lines was quietly getting zeros back too.

The -39 audio error that looked suspicious in the logs turned out to be
harmless; the config parsing was the whole story.

You can type in games now

Text fields would focus and the Return key reached the game, but letters
never arrived. iOS hides the keyboard for a moment while a field is still
active — on an iPad that's the dismiss key, in the simulator it happens
immediately — and SDL responded by shutting text input down completely. The
app now keeps text input alive for as long as the game is editing a field,
and re-opens the keyboard if you tap the field again.

Peggle's profile screen takes a name, shows it, and saves it. Games with
chat boxes or level-name prompts should behave the same.

Downloads

Same three builds as 0.4.0:

  • Applesauce-iOS-unsigned.ipa — for AltStore, Sideloadly, or Xcode, which
    sign it themselves.
  • Applesauce-iOS-trollstore.ipa — fakesigned so TrollStore's "Enable JIT"
    works. Safe on every TrollStore-capable device.
  • Applesauce-iOS-trollstore-permanent-jit.ipa — JIT survives relaunches,
    but A11 and older only; it crashes on launch on A12 and newer.

Each has a .sha256 alongside it.

Applesauce black screen fix

Choose a tag to compare

This TrollStore release fixes black screens in older OpenGL ES games.

The slow composition path now reads the app's current framebuffer. This preserves unresolved tile data on iPhone GPUs. The UIKit swap path now reattaches only the SDL view that it presents. This prevents a guest context from leaving the host drawable detached without causing alternating frames.

Applesauce iOS 16 launch fix

Pre-release

Choose a tag to compare

@0xjohnnydev 0xjohnnydev released this 07 Aug 17:36

This TrollStore build contains the iOS 16 game-launch fixes from PR #28.

It fixes older games that did nothing or opened to a black screen even when JIT was enabled. It also shows a normal error after a bad game import and lets the next game launch normally.

The iPhone release passed the repository’s TrollStore IPA verifier. Runtime checks confirmed that Super Monkey Ball and the newer Flappy Bird build reach their title screens. A user also tested the build on a physical device and confirmed that the fix works.

Install with TrollStore. Enable JIT again whenever Applesauce starts as a new process.

SHA-256: 63727641f94dd6aa33774c22d1ddb484f47b820c6bef8cddfc84b3391ec95012