• Stars
    star
    2,244
  • Rank 20,522 (Top 0.5 %)
  • Language
    Rust
  • License
    Mozilla Public Li...
  • Created almost 2 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

High-level emulator for iPhone OS apps. This repo is used for issues, releases and CI. Submit patches at: https://review.gerrithub.io/q/project:hikari-no-yume/touchHLE+status:open

touchHLE: high-level emulator for iPhone OS apps

touchHLE is a high-level emulator (HLE) for iPhone OS apps. It runs on modern desktop operating systems and Android, and is written in Rust.

As an HLE, touchHLE is radically different from a low-level emulator (LLE) like QEMU. The only code the emulated CPU executes is the app binary and a handful of libraries; touchHLE takes the place of iPhone OS and provides its own implementations of the system frameworks (Foundation, UIKit, OpenGL ES, OpenAL, etc).

The goal of this project is to run games from the early days of iOS:

  • Currently: iPhone and iPod touch apps for iPhone OS 2.x. A few of these are known to work, and of course we are trying to make the list longer. :)
  • Next: iPhone OS 3.0 support.
  • Longer term: iPhone OS 3.1, iPad apps (iPhone OS 3.2), iOS 4.x, …
  • Never: 64-bit iOS.

Support for apps that aren't games isn't a priority: it's more complex and less fun.

Visit our homepage! https://touchhle.org/

If you're curious about the history and motivation behind the project, you might want to read the original announcement. For an introduction to some of the technical details, check out touchHLE in depth.

Important disclaimer

This project is not affiliated with or endorsed by Apple Inc in any way. iPhone, iOS, iPod, iPod touch and iPad are trademarks of Apple Inc in the United States and other countries.

Only use touchHLE to emulate software you legally own.

Platform support

  • Officially supported: x64 Windows, x64 macOS and AArch64 Android.
    • These are the platforms with binary releases. (Android support is not in a release yet. It's coming soon, please wait!)
    • If you're an Apple Silicon Mac user, the x64 build reportedly works in Rosetta.
  • Probably works, but you must build it yourself: AArch64 macOS, x64 Linux, AArch64 Linux.
  • Never?: other architectures.

Input methods:

  • For simulated touch input, there are three options:
    • Mouse/trackpad input (tap/hold/drag by pressing the left mouse button)
    • Virtual cursor using the right analog stick on a game controller (tap/hold/drag by pressing the stick or the right shoulder button)
    • Real touch input, if you're on a device that has a touch screen
  • For simulated acceleremeter input, there are two options:
    • Tilt control simulation using the left analog stick of a game controller
    • Real accelerometer input, if you are using a phone, tablet or some other device with a built-in accelerometer (TODO: support game controllers with accelerometers)

Development status

Real development started in December 2022, and this is so far a single person's full-time passion project. There's only been a handful of releases so far and no promises can be made about the future. Please be patient.

Currently, the supported functionality is not much more than what's needed by a handful of supported apps, although the code tries to be reasonably complete where it can. The completeness varies a lot between APIs, e.g. UIKit is easily the most hacky and incomplete of the large frameworks that have been implemented, whereas the OpenGL ES and OpenAL implementations are probably complete enough to cover a large number of early apps.

Usage

First obtain touchHLE, either a binary release or by building it yourself (see the next section).

You'll then need an app that you can run (check the list of supported apps). Note that the app binary must be decrypted to be usable.

There's a few ways you can run an app in touchHLE.

(TODO: Android usage directions.)

Graphical user interface

If you'd prefer not to use the command line:

  • You can put an app's .ipa file or .app bundle in the touchHLE_apps directory, then when you run touchHLE (on Windows: double-click on touchHLE.exe) you can select the app from the app picker.
  • On Windows, you can also directly drag and drop an app's .ipa file or .app bundle onto touchHLE.exe.

To configure the options, you can then edit the touchHLE_options.txt file. To get a list of options, look in the OPTIONS_HELP.txt file.

Command-line user interface

You can see the command-line usage by passing the --help flag.

If you're a Windows user and unfamiliar with the command line, these instructions may help you get started:

  1. Move the .ipa file or .app bundle to the same folder as touchHLE.exe.
  2. Hold the Shift key and right-click on the empty space in the folder window.
  3. Click “Open with PowerShell”.
  4. Type .\touchHLE.exe "YourAppNameHere.ipa" (or .app as appropriate) and press Enter. If you want to specify options, add a space after the app name (outside the quotes) and then type the options, separated by spaces.

Other stuff

Currently language detection doesn't work on Windows. To change the language preference reported to the app, you can type SET LANG= followed by an ISO 639-1 language code, then press Enter, before running the app in the command line. Some common language codes are: en (English), de (Deutsch), es (español), fr (français), it (italiano) and ja (日本語). Bear in mind that it's the app itself that determines which languages are supported, not the emulator.

Any data saved by the app (e.g. saved games) are stored in the touchHLE_sandbox folder.

If the emulator crashes almost immediately while running a game listed as supported, please check whether you have any overlays turned on like the Steam overlay, Discord overlay, RivaTuner Statistics Server, etc. Sadly, as useful as these tools are, they work by injecting themselves into other apps or games and don't always clean up after themselves, so they can break touchHLE… it's not our fault. 😢 Currently only RivaTuner Statistics Server is known to be a problem. If you find another overlay that doesn't work, please tell us about it.

Building and contributing

Please see the BUILDING.md, DEBUGGING.md and CONTRIBUTING.md files in the git repo.

License

touchHLE © 2023 hikari_no_yume and other contributors.

The source code of touchHLE itself (not its dependencies) is licensed under the Mozilla Public License, version 2.0.

Due to license compatibility concerns, binaries are under the GNU General Public License version 3 or later.

For a best effort listing of all licenses of dependencies, build touchHLE and pass the --copyright flag when running it.

Please note that different licensing terms apply to the bundled dynamic libraries (in touchHLE_dylibs/) and fonts (in touchHLE_fonts/). Please consult the respective directories for more information.

Thanks

We stand on the shoulders of giants. Thank you to:

More Repositories

1

obj-to-html

A small application to convert a 3D model in .obj format into HTML and CSS
Rust
30
star
2

Firth

Firth is a functional, strongly dynamically-typed, concatenative stack-oriented programming language.
JavaScript
27
star
3

Hanno

Asynchronous I/O with generators for PHP 5.5
PHP
22
star
4

newType

A handy function for creating opaque types
PHP
18
star
5

blog

A minimal blog static site generator written in PHP
PHP
18
star
6

PictoSwap

Clone of Nintendo Letter Box/Swapnote for the Nintendo 3DS web browser
JavaScript
18
star
7

manic.js

A Minecraft Classic client written in JavaScript
JavaScript
16
star
8

oneko-uxn

oneko-uxn - uxn 猫. port of oneko-sakura to uxn using chibicc-uxn
C
15
star
9

TypedArrays

A Composer package which implements ECMAScript Typed Arrays for PHP 7.
PHP
14
star
10

lunasync

synctube died so I made lunasync! It uses node.js.
JavaScript
13
star
11

escapes

Bareword escapes!
PHP
12
star
12

ElePHPants-Love-Coffee

why, Andrea, why
PHP
9
star
13

app-compatibility-db

Simple web app for managing a public app compatibility database for an emulator project. Used by touchHLE, intended to be usable for other projects too.
PHP
8
star
14

lib3DS

A tiny JavaScript library to help you write games and applications that run on the Nintendo 3DS Web Browser.
JavaScript
8
star
15

unifont-appreciator

experimenting with reading GNU Unifont with uxn/varvara
6
star
16

NATO

Tango Hotel Echo "November Alfa Tango Oscar" Papa Hotel Papa Lima India Bravo Romeo Alfa Romeo Yankee
PHP
6
star
17

ponyplace

ponyplace is a 2d pony chatroom powered by node.js and WebSocket.
JavaScript
5
star
18

jInsert

jInsert is my tiny DOM manipulation library. Some people like to j*Query* the DOM. I prefer to j*Insert* into it.
JavaScript
5
star
19

Meta_Bot

/u/Meta_Bot2 is a reddit bot that replies to a submission or comment, if a link to that submission or comment was submitted to a subreddit.
JavaScript
5
star
20

portable-business-card

i spent a whole day coding and debugging a small opengl app for the sake of a pun
C
4
star
21

pico8bot.php

@pico8bot's image generation reimplemented in PHP as a little programming language
PHP
4
star
22

this-repository-breaks-windows

This repository contains a directory with the special name “aux”, which is one of a number of reserved names on Windows. Therefore, you can't clone it from Windows (at least Win32; WSL is possibly an exception).
4
star
23

SchnitzelCraft0

A Minecraft server written in C
C
3
star
24

SchnitzelCraft

A custom Minecraft Classic server written in Python, adding additional features and utilising Twisted and numpy.
Python
3
star
25

Twitter-archive-analyser

Generates lists of mutual and non-mutual Twitter followers sorted by reply count
PHP
3
star
26

crockfordfacts.org

Facts about Douglas Crockford
JavaScript
3
star
27

Faucet-HTTP-Extension

Easy-to-use, minimal HTTP support for Game Maker 8.0 written with and depending on Faucet Networking.
Game Maker Language
3
star
28

PHP7-Twitter-Bot

Twitter Bot framework for PHP 7.0
PHP
2
star
29

DevPerc.c

A (currently unfinished) interpreter for the Deviating Percolator (DevPerc) language, written in pure `-Wall -pedantic` C99.
C
2
star
30

dotfiles

BSD, Lunix, Debian and Mandrake are all versions of an illegal hacker operation system, invented by a Soviet computer hacker named Linyos Torovoltos, before the Russians lost the Cold War.
Shell
2
star
31

LetterMaster-Unidrv

A failed attempt to write a Unidrv minidriver for the Royal LetterMaster daisy wheel printer
2
star
32

hnfollowbutton

HackerNews Follow Discussion Button (CSS)
2
star
33

BitcoinOrBitcon

A sophisticated PHP 7.0 library for determining the practicality of cryptocurrencies.
PHP
2
star
34

pet-tha-focks

a game about petting a cute focks
Haskell
2
star
35

PHP4_Constructor_Finder

Finds PHP4-style constructors
PHP
2
star
36

schnitzelVerse

schnitzelVerse is a WIP 2d online world powered by node.js and WebSocket.
JavaScript
1
star
37

BBCode630

Print processor for Diablo 630-compatibles
Haskell
1
star
38

GGON

GGON parser for PHP
PHP
1
star
39

sitecfg

Small PHP script I use to manage my websites
PHP
1
star
40

dream-sparer

Simple tool for extracting chunks from RIFX files.
Rust
1
star
41

SoundPalette

WIP SysEx editor for Roland SC-55 (GS), Roland SC-7, and eventually maybe Yamaha XG
Rust
1
star
42

OpenGL-state-table-parser

Makes nice HTML from the OpenGL and OpenGL ES specs' state table sections
TeX
1
star
43

DevPerc

An interpreter for the Deviating Percolator (DevPerc) language
Python
1
star