touchHLE

touchHLE is a high-level emulator for iPhone OS apps, designed to run on modern desktop operating systems and Android. Written in Rust, touchHLE emulates early iPhone and iPod touch applications without directly simulating the hardware. Instead, it implements the system frameworks such as Foundation, UIKit, OpenGL ES, and OpenAL, allowing the emulated CPU to execute the app binary and a handful of libraries.

Project Goals

The primary aim of touchHLE is to run games from the early days of iOS:

  • Current Support: iPhone and iPod touch apps for iPhone OS 2.x and iPhone OS 3.0.
  • Future Plans: iPhone OS 3.1, iPad apps (iPhone OS 3.2), iOS 4.x, etc.
  • Limitations: Support for 64-bit iOS apps is not planned.

Support for non-game apps is not a priority due to increased complexity.

App Compatibility

The touchHLE app compatibility database tracks which apps are supported by touchHLE. This database is crowdsourced, and contributions from the community are welcome.

Platform Support

  • Officially Supported: x64 Windows, x64 macOS, AArch64 Android (with binary releases available).
  • Additional Platforms: AArch64 macOS, x64 Linux, AArch64 Linux (requires manual build).
  • Unsupported: Other architectures are not supported.

Input Methods

Simulated Touch Input:

  • Mouse/trackpad input (tap/hold/drag with the left mouse button).
  • Virtual cursor using a game controller.
  • Game controller button mapping.
  • Real touch input on touch screen devices.

Simulated Accelerometer Input:

  • Tilt control using a game controller's left analog stick.
  • Real accelerometer input on devices with built-in accelerometers (note: issues on certain Android devices).

Development Status

Since its inception in December 2022, touchHLE has grown from a passion project to a collaborative effort with multiple contributors. The project's progress is driven by the specific needs of contributors, leading to varying levels of completeness across different APIs. UIKit, for example, is less complete due to limited usage in games, whereas OpenGL ES and OpenAL are more robust.

Usage

To use touchHLE, download a binary release or build it from source. You'll need a decrypted app binary to run in the emulator. The app compatibility database can help you find compatible apps.

Android Specifics

On Android, use the graphical user interface to manage and run apps:

  1. Place .ipa files or .app bundles in the touchHLE_apps directory.
  2. Use the app picker to select and run your apps.

File management can be tricky due to Android's restrictions. Use the device's file manager or ADB for transferring files.

Graphical User Interface

touchHLE features a built-in app picker. Place your .ipa files and .app bundles in the touchHLE_apps directory to see them in the app picker. Configure options by editing the touchHLE_options.txt file.

Command-line Interface

On desktop platforms, you can use the command line to run apps:

  1. Move the .ipa or .app bundle to the same folder as touchHLE.exe.
  2. Open PowerShell in the folder.
  3. Run .\touchHLE.exe "YourAppNameHere.ipa".

Development and Contributions

For contributing to the project, see the CONTRIBUTING.md file in the repository. For building touchHLE, refer to dev-docs/building.md.

Similar Projects