GUIDE / BEFORE YOU INSTALL

Before you build a Switch-native Mac app

Two projects work this way today: MacNativeGames for Tears of the Kingdom and D2R Mobile for Diablo II: Resurrected. They share the idea and the rules, but not the tools or the commands.

Shared checklist

  • The supported game versionKeep the base and update files separate where the builder requires it. The comparison below lists the accepted inputs.
  • Your prod.keysHave the path ready. MacNativeGames reads it during the build; D2R Mobile’s extraction step uses it to unpack the game.
  • Comfort with TerminalBoth are run as commands. Keep the first error line if something stops; it names the step.
  • Free space on an APFS volumeTens of gigabytes during the build (see the table). Do not put the work folder on a cloud-synced or temporary folder.
  • Do not move the work folder afterwardsMacNativeGames reuses it for rebuilds; D2R Mobile’s app refers to files in ~/dm-work and the older-API build keeps its recompiled shaders in the output folder.

How the two builders differ

MacNativeGames (Tears of the Kingdom)D2R Mobile (Diablo II: Resurrected)
Game and versionTears of the Kingdom base 1.0.0, optionally with the separate 1.1.2, 1.2.1 or 1.4.3 updateDiablo II: Resurrected Switch release 1.0.34.0 (PC 3.3.94012) with the Reign of the Warlock expansion
What you hand itThe game file itself (XCI or NSP) and prod.keys; the script unpacks itThe ExeFS (main, sdk, subsdk0) and RomFS data/ folders placed in ~/dm-work — or a game package and prod.keys through dm/tools/extract_game.sh, which needs hactool
Tools on the MacXcode command line tools, Homebrew, opus, libvpx, Python 3.14Full Xcode (26.6 used by the project) with its Metal compiler, Homebrew, xcodegen, spirv-cross, .NET 10 SDK, Python 3
Build MacApple silicon with macOS 26 or laterApple silicon with full Xcode 26.6; that Xcode version requires macOS Tahoe 26.2–26.x
App runs onmacOS 26 or latermacOS 26 or later for the default app; 15–25 with the older-API build
Free spaceAbout 25 GB for the work folder (40 GB with an update); about 17 GB more if the app is on another volumesetup.sh asks for 30 GB before the game files are in place, 15 GB after: about 12 GB for the workspace and about 20 GB more to extract a game package

The D2R older-API option changes the app’s runtime target. It does not make Xcode 26.6 run on an older Mac system. See the D2R build prerequisites before preparing that build.

MacNativeGames · TOTK

Command shape
python3.14 build_app.py <game> -k <prod.keys> [--update …]
What you get
Tears of the Kingdom.app, next to the game file unless you pass -o
First launch
macOS checks the app once at the end of the build; the first start then verifies the game data
Version check
Every extracted file is compared with pinned hashes; a different version stops the build

D2R Mobile · Diablo II

Command shape
./setup.sh, then dm/tools/mac_app.sh (DM_MAC_M3=1 for macOS 15–25)
What you get
D2R Mobile.app in ~/dm-work/out/macapp
First launch
Asks you to choose the game resource folder (~/dm-work/data/switch/3.3.94012/Update)
Version check
The rewrite rules and scripts check the version item by item; another version stops with a message

Why this is not emulation

  1. Same processor family

    A Switch and an Apple silicon Mac both use ARM64 processors, so the game’s own program can run on the Mac’s chip after the parts macOS does not allow are rewritten.

  2. A small host

    The Switch system services the game calls are answered by a host program written for the Mac.

  3. Graphics on Metal

    The Switch’s NVN graphics calls are rebuilt on Metal, and the game’s shaders are translated (both projects use Ryujinx’s shader translator for this step).

The cost of this approach: each builder supports one game and specific versions, and new versions need new work from the project. A general route for other Mac programs is explained in native, Rosetta or CrossOver.

Go to your game