One-click 32-bit → 64-bit patcher for the macOS releases of the Shadowrun trilogy:
- Shadowrun Returns
- Shadowrun Dragonfall – Director's Cut
- Shadowrun Hong Kong – Extended Edition
These titles shipped as 32-bit Unity 4.x builds. macOS 10.15 (Catalina) and later refuse to launch 32-bit binaries. This tool automates the well-known community fix — swap in the 64-bit standalone playback engine from the matching Unity 4.x installer — so non-technical users can do it by double-clicking.
For each detected Shadowrun install the patcher:
- Downloads the exact Unity 4.x
.dmgthe game was built against (Returns → 4.2.2, Dragonfall → 4.3.4, Hong Kong → 4.6.2), caching it under~/Library/Caches/com.shadowrun-patcher/. - Verifies the download against the published MD5.
- Mounts the
.dmg, copies the 64-bitUnityPlayerbinary and theFrameworks/tree out ofUnity.app/.../macosx64_nondevelopment_mono/UnityPlayer.app/Contents/. - Renames the game's existing
.appto a timestamped backup, clones it back to the original location, then drops the new binary (renamed to matchCFBundleExecutable) and merges the Frameworks. - Removes the download-quarantine xattr and ad-hoc resigns the bundle so Gatekeeper / Apple Silicon's launch policy don't refuse it.
- Verifies the patched bundle is
Mach-O 64-bit executable x86_64and thatcodesign --verifypasses.
On Apple Silicon Rosetta 2 is required (Unity 4.x is x86_64-only). The patcher
detects its absence and offers to install it via softwareupdate --install-rosetta.
The technique is documented at https://github.com/boggydigital/mac-gaming-guides/blob/main/common/unity-porting.md.
- Download Shadowrun-Patcher-v1.0.zip from the
latest release
and unzip — you'll get
Shadowrun Patcher.app. - Double-click it. A single admin password prompt covers the whole run.
- Native progress bar shows download → mount → patch per game.
Prefer to build from source? Clone the repo and run ./build.sh on a Mac —
produces an equivalent Shadowrun Patcher.app in the repo root.
The bash core is fully standalone:
# Auto-detect installed games and prompt
src/shadowrun_patcher.sh --cli
# Patch every detected game without prompting
sudo src/shadowrun_patcher.sh --cli --all
# Patch a specific game
sudo src/shadowrun_patcher.sh --cli --game dragonfall
# See what would happen, change nothing
src/shadowrun_patcher.sh --cli --all --dry-run
# List detected games (id<TAB>path)
src/shadowrun_patcher.sh --listLogs go to ~/Library/Logs/shadowrun-patcher.log.
The patcher pulls each Unity 4.x installer from download.unity3d.com on
first run. Unity Technologies has previously removed older installers
from their CDN without warning, and if they do
that again the download step will start failing with an HTTP error.
As a backstop, this repo includes the three exact installers under the
unity/ folder (LFS-tracked because they're ~700 MB each).
To use them when Unity's CDN is unreachable:
-
Grab the three DMGs. Either:
- Clone the repo with LFS support and copy them out:
brew install git-lfs && git lfs install git clone https://github.com/reeseboisse/shadowrun_64bit_macos.git # the unity/ folder now contains real DMG files
- Or download them individually from the GitHub UI by clicking each
file under
unity/and pressing Download (the GitHub UI proxies LFS so you get the real bytes, not the pointer text).
- Clone the repo with LFS support and copy them out:
-
Drop them into the patcher's cache directory:
mkdir -p ~/Library/Caches/com.shadowrun-patcher cp unity/unity-*.dmg ~/Library/Caches/com.shadowrun-patcher/
-
Run the patcher normally (double-click
Shadowrun Patcher.apporsrc/shadowrun_patcher.sh --cli). It checks the cache before the network: each cached DMG that matches the manifest MD5 is reused, and the download step is skipped entirely. The cache lookup tolerates either filename convention (unity-4.2.2.dmgfrom Unity's URL orunity-4.2.2f1.dmgfrom a previous run), so no renaming is needed.
If you only have one of the three (e.g. just Returns), drop in only that one. The patcher will use the cached file for that game and still attempt to download for the others.
Every patch leaves the original bundle alongside the patched one as
<GameName>.backup-<UTC-timestamp>.app. To revert:
cd "/Applications/Shadowrun Dragonfall - Director's Cut"
rm -rf "Shadowrun Dragonfall.app"
mv "Shadowrun Dragonfall.backup-20260528T120000Z.app" "Shadowrun Dragonfall.app"- macOS 10.15 or later
- Network access for the first run of each Unity version (~500 MB per DMG)
- Admin password (a single prompt per run)
- About 1.5 GB of free disk during patching (cache + staging + backups)
src/
shadowrun_patcher.sh # bash entrypoint
lib/
games.sh # game/Unity manifest
unity.sh # download / mount / extract helpers
patch.sh # per-game pipeline
dialogs.sh # native osascript dialog wrappers
log.sh # logging + progress reporting
launcher.applescript # AppleScript glue (compiled into the .app)
build.sh # macOS-only: builds Shadowrun Patcher.app
Copyright (C) 2026 Reese Boisse.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. See LICENSE for the full text.