github LNPANDY/NX2Apple v0.4.5
NS Port Builder v0.4.5 — Mac app output, older iPhone/iPad support

latest releases: v1.4.0-rc5, v1.4.0-rc4, v1.4.0-rc3...
17 days ago

Two new capabilities: a Mac app as an output, and support for iPhones and iPads that were out of reach before.

🖥️ A Mac app as an output

The same build can now produce a double-clickable .app for this Mac instead of an iPhone IPA — pick it in the footer. Same extraction, code rewrite and shaders; the RomFS goes inside the app, so the archive step is skipped. Success is the .app existing rather than the exit code, because the script can exit 0 without writing one (a checkout missing dm/mac/pack_app.py), and that case now says so.

📱 Older iPhones and iPads

BC-compressed textures need GPU support that only A19 and later advertise. A build can now decode them on the CPU instead, which brings A15 / A16 and earlier devices into range — iPhone 13 and older, A16 iPads. It is a switch under the build progress, off by default: newer devices keep the faster GPU path. The switch is written into the app's environment file, so no host rebuild is needed.

Not verified on an A15/A16 device — none was available. The decoder itself is tested (a known BC block decodes byte-identically to an independent DXT1 implementation), but the on-device result is unconfirmed. If you try it on an older device, please report what you see.

Also

  • Per-game data folders. Game data lives in Documents/games/<title ID>/ — romfs/, save/, temp/, optionally its own msl/. The build writes that layout directly, so the games folder is copied onto the phone (or into a folder the Files app exposes on an external drive) without renaming. Older layouts still load.
  • The NRO header is no longer scanned as code (issue #14): a module loaded with nn::ro starts with an 0x80-byte header, and the rewrite scan read its build ID as instructions.
  • 72 games (up from 69): Pokémon Brilliant Diamond, Shin Megami Tensei V: Vengeance, Sea of Stars.
  • Windows front end: the dependency installer works — it fetches PortableGit, LLVM-MinGW and the iPhoneOS SDK, with every step in the log. Still in testing; this release's app is macOS.

What this build is

NS-Port-Builder-macOS-arm64.zip — the app itself, ad-hoc signed, Apple Silicon, macOS 13+. Unzip, then right-click → Open on first launch (or xattr -dr com.apple.quarantine "NS Port Builder.app"). v0.4.2 and later update themselves.

This is a front end only. It drives the scripts of NX2Apple; the repository group downloads them with one button.

Verified games

Game Update required Status
Tears of the Kingdom 1.4.3 (v720896) Verified — builds, installs and runs on an iPhone; 304,243 files into 127 archive shards, byte-verified
Hades II 1.0.137848 (v1) Verified — builds, installs and runs on an iPhone; 33-file archive
Animal Crossing: New Horizons 3.0.3 (v2228224) Verified — builds, installs and runs smoothly on an iPhone; 103,645 files into 72 archive shards

Every other game is unverified by this fork. 45 are reported playable upstream; the full table with per-game versions is in the README.

Requirements

  • An Apple Silicon Mac, macOS 13+
  • Xcode with the iOS SDK (Xcode 15+ downloads the platform separately; the dependency panel says so and can fetch it)
  • Python 3.9+ with lz4, capstone, fontTools, zstd and nsz — the dependency panel manages a venv with all of it
  • .NET SDK 10 (Homebrew, .pkg and dotnet-install.sh all work)
  • ~6 GB free beyond the NSPs; the shader compile is the long step
  • Your own game files and prod.keys — nothing is bundled

Legal

No Nintendo code, assets, firmware or keys are included anywhere. The pipeline requires your own dumps and your own keys and talks to no server. Not affiliated with or endorsed by Nintendo; trademarks belong to their owners. Personal-backup laws differ by country — you are responsible for your jurisdiction, and the outputs are for your own hardware only. See the README's Legal section for the full statement, including takedown handling.


中文说明

两个新能力:可以输出 Mac App,以及支持此前用不了的 iPhone 和 iPad。

🖥️ 可输出 Mac App

同一次构建现在能产出可双击运行的 .app,而不是 iPhone 的 IPA —— 在底栏切换。解包、代码重写、shader 完全相同;RomFS 打包进 App 内部,所以跳过归档步骤。成功判定用 .app 是否存在,而不是退出码——脚本可能退出 0 但没写文件(仓库里缺 dm/mac/pack_app.py),这种情况现在会明说。

📱 支持老的 iPhone 和 iPad

BC 压缩纹理需要 GPU 支持,而只有 A19 及之后才有。现在构建时可以选择在 CPU 上解压,从而支持 A15 / A16 及更早的设备——iPhone 13 及更早、A16 的 iPad。开关在构建进度下方,默认关闭:新设备继续走更快的 GPU 路径。开关会写进 App 的环境文件,不需要重建宿主。

未在 A15/A16 真机验证——手头没有。解码器本身有测试(已知 BC 块与独立 DXT1 实现逐字节一致),但真机效果未确认。如果你在老设备上试了,欢迎反馈。

其他

  • 每游戏独立数据目录。 游戏数据在 Documents/games/<title ID>/ —— romfs/、save/、temp/,可选自己的 msl/。构建直接产出这个结构,整个 games 文件夹拷到手机(或文件 App 能访问的外置目录)不用改名。旧布局仍然可用。
  • NRO 头不再被当作代码扫描(issue #14):通过 nn::ro 加载的模块以 0x80 字节头部开始,重写扫描把里面的 build ID 当指令读了。
  • 72 款游戏(原 69):宝可梦 晶灿钻石、真·女神转生 V Vengeance、星之海。
  • Windows 前端:依赖安装现在能用——自动下载 PortableGit、LLVM-MinGW 和 iPhoneOS SDK,每一步都写进日志。仍在测试;本次发布的是 macOS App。

这个包是什么

NS-Port-Builder-macOS-arm64.zip 就是 App 本身,ad-hoc 签名,Apple Silicon,macOS 13+。解压后首次启动右键 → 打开(或执行 xattr -dr com.apple.quarantine "NS Port Builder.app")。v0.4.2 起 App 能自己更新。

这只是前端。 它调用 NX2Apple 的脚本;仓库分组里一键下载。

已验证的游戏

游戏 需要的更新包 状态
塞尔达传说:王国之泪 1.4.3 (v720896) 已验证 —— 构建、安装、在 iPhone 上运行;304,243 个文件归档成 127 片,逐字节校验通过
Hades II 1.0.137848 (v1) 已验证 —— 构建、安装、在 iPhone 上运行;33 个文件的归档
集合啦!动物森友会 3.0.3 (v2228224) 已验证 —— 构建、安装、在 iPhone 上流畅运行;103,645 个文件归档成 72 片

其他游戏本 fork 均未验证。 45 个上游报告 iPhone 可玩;完整表格(含每个游戏的版本)在 README。

环境要求

  • Apple Silicon Mac,macOS 13+
  • 装了 iOS SDK 的 Xcode(Xcode 15+ 平台需单独下载——依赖面板会提示并可代劳)
  • Python 3.9+,装有 lz4、capstone、fontTools、zstd 和 nsz——依赖面板通过 venv 全部管理
  • .NET SDK 10(Homebrew / .pkg / dotnet-install.sh 三种都支持)
  • 除 NSP 外约 6 GB 空间;shader 编译是最慢的一步
  • 你自己的游戏文件和 prod.keys——不含任何数据

法律

任何地方都不包含任天堂的代码、资源、固件或密钥。流水线需要你自己的导出文件和自己的密钥,不连接任何服务器。与任天堂无关联、未获认可;商标归权利人所有。个人备份的法律各地不同——请自行确认所在地法律,产物仅用于自己的硬件。完整声明(含下架处理)见 README 的法律一节。

Don't miss a new NX2Apple release

NewReleases is sending notifications on new releases.