For those of us fortunate enough to have the privilege, late December and early January bring two things: new toys and a bit of vacation time. That makes it a great time to tinker with little tech projects, things that are inessential and maybe a bit time-consuming but fun enough and useful enough to be worth doing.

One of my projects was to experiment with classic console emulators on the new Apple TV. There aren’t many of them yet, and installation takes a little work (Apple doesn’t allow add-your-own-ROM emulators in the App Store), but new capabilities introduced in iOS 9 and the iOS-based tvOS make it possible to install them.

Emulation and the Apple TVx

Right now there are two notable emulation projects targeting tvOS. One is a distant relative of the MAME arcade emulator, though it doesn’t seem as though it’s being maintained. Another, Provenance, is the one we’ll be spending the most time with. It’s a multi-system emulator that supports most major 8- and 16-bit consoles, including the NES, SNES, Sega Master System, Sega Genesis, Sega CD, Game Boy, and Game Boy Advance.

That's basically it for now, but more consoles could show up in the future. Provenance is already heavily based on open source code from OpenEmu and other projects, so anyone with a little patience could port other emulators without much extra work.

If you want a simple set-top box exclusively for emulation, an Android TV box like the Nvidia Shield is a better bet. There are more emulators available for a larger number of systems, and they’re available directly from the Google Play Store without the need for the compiling and sideloading we’re going to outline here. But if you want Apple’s TV platform for other reasons, hey, at least emulation on Apple’s box is possible, and emulator developers typically take an “if it can run it, it should run it” approach to new hardware.

Getting started

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

With iOS 9, Apple has opened up a small loophole for sideloading apps that you can take advantage of with a little bit of work. Basically, anyone can open up an Apple developer account without spending any money, and compiling and loading apps you’ve built to test hardware doesn’t cost anything either. Downloading production and prerelease versions of iOS and submitting apps to the App Store still requires a paid account, but anyone with a Mac and Xcode 7 can do whatever they want with their own devices.

That extends to source code that you download and compile yourself, which is what we’ll be doing here. It goes without saying that you should only download code from sources you trust, since these aren’t passing through Apple’s app approval filters and could be doing things to your hardware, software, and data that are not normally possible.

With that disclaimer out of the way, here’s a quick list of things you’ll need for the Apple TV specifically:

A Mac running OS X 10.10.5 or later.

An Apple ID. Sign in at apple.com to change any old Apple ID into a developer account.

Xcode 7.2 from the Mac App Store, which needs more than 4GB of disk space all by itself. Don’t download Xcode from anyone other than Apple!

A USB C to USB A cable, for connecting your Apple TV to your Mac via its service port.

ROMs, best (legally) created using a device like the Retrode 2. If you choose to acquire them otherwise, do so at your own risk.

Finally, while it isn’t technically required, an MFI-compatible gamepad will be way better than the Siri Remote at playing old games. I personally like the Horipad Ultimate, which Apple sells in its stores for $50—it’s a Bluetooth controller in the mold of a DualShock, it charges via Lightning cables that you probably already have lying around somewhere, and it comes from a company with a reputation for making solid accessories. Annoyingly, MFI controllers won’t work as a generic Bluetooth gamepad in OS X or Windows apps, but at least the selection of compatible iOS and tvOS games keeps growing (it also works with OpenEmu, incidentally).

Setting up Xcode and loading up our emulator

Andrew Cunningham

Andrew Cunningham



Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Once Xcode is downloaded, open it, go to Preferences, and then to the Accounts tab and enter in your Apple ID. Then, on the Welcome to Xcode screen (or in the menus under “Source Control”), elect to check out an existing project. From the Provenance GitHub page, paste the HTTPS clone URL at the top of the page into the “repository location” field in Xcode. Choose the “Master” branch of the project and download it to a place where you can find it later if you want to.

Official build instructions are available if you’d like to follow them from here, but we’ll go through the basics anyway.

First, highlight the top-level “Provenance” item in the left-hand navigation sidebar and change the Bundle Identifier to something unique (I used com.andrewiscool.Provenance). Select your developer ID from the drop-down Team menu. If you see any error messages here, click “Fix It” after you’ve changed these values and they should go away. Then, connect your Apple TV to your Mac with your USB C cable.

Now, from the Scheme menu at the top of the window (wedged in between the Stop button and the status box), go to “ProvenanceTV-Release” and then select your Apple TV. Click the Build button (which looks like a Play button) and click through any messages asking you to enable Developer Mode on your Mac, and then click through any messages about fixing code signing issues after Provenance is done compiling. The end result should be a Provenance tile on your Apple TV home screen.

You can reuse these steps later with the standard “Provenance-Release” branch if you want to compile it for your iPhone, iPad, or iPod—the basic setup is all the same, though the onscreen software buttons are sub-optimal as onscreen controls often are.

Using Provenance

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Andrew Cunningham

Fire up Provenance for the first time and you’ll be greeted by… nothing. The app itself is just a blank screen with a search box and buttons for tweaking settings and importing ROMs. Hit Import ROMs first, which will start Provenance’s “web server.” Navigate to that IP address from a browser on your Mac, and you’ll be able to upload as many ROMs as you want. Upload them directly into the /roms directory without creating any subdirectories—the Provenance UI will organize them by console by itself. Unfortunately, creating your own folders doesn’t seem to do anything.

Go back to your Apple TV and click Stop—if you did things right, your games should all show up in Provenance’s library complete with box art downloaded from the same source that OpenEmu uses. This process wasn’t always perfect—sometimes it grabbed Japanese box art instead of English box art—but it fits in with the rest of the Apple TV UI, it’s organized by system, and it’s easily searchable.

From here, all you really need to do is select a game and launch it. Provenance will run it with the appropriate emulator. All games run without filters or other image processing—newbies will appreciate the simplicity and purists will appreciate the lack of smoothing, though it would be nice to have access to those settings.

The main settings screen for the app is similarly limited. You can assign different controllers to Player 1 and Player 2 (no support for more than two players, for the games that feature multitap support), perform some light maintenance on your game library, and choose whether to auto-save (on by default) and auto-load (off by default) save files when you exit and launch games. If this is off, every time you load a game you’ll start from the beginning as though you had just powered it on. If auto-saving and loading is on, you’ll always be returned to the place you were when you last stopped playing.

Controls are a little odd just because of the way MFI controllers are laid out (trying to use the Siri Remote for anything other than verifying that the emulator works is a fool’s errand). Start and Select buttons for older consoles are usually assigned to the shoulder buttons, where it’s fairly easy to hit them by accident. For SNES games, the positioning of the A and B buttons and the X and Y buttons is swapped, so the letter printed on the button doesn’t match up with letters presented to you in the game. You can't re-map buttons, so you'll need to be able to live with the defaults.

Provenance is by no means a perfect emulator, and the Apple TV isn’t as good as an Android TV box if old-school emulation is all you’re after. Full-fledged Macs and PCs are still necessary if you want to emulate anything sold in the last decade. But if you want Apple’s ecosystem and Apple’s App Store, Provenance is a reasonably good emulator that integrates well with the platform, and the Apple TV itself is capable enough to support further development.