Skip to content

NS Port Builder v0.4.2 — in-app repository and self-update, 58 games

Choose a tag to compare

@LNPANDY LNPANDY released this 25 Oct 12:33
· 1829 commits to main since this release

The app now sets itself up and keeps itself fresh: one click gets the repository onto the machine (or the manual route when GitHub is slow), one click brings both the scripts and the app itself up to date. Underneath: ten more games (58 profiles), NSZ / XCZ dumps accepted, a save-loading deadlock fixed, and the NuGet hiccup recovers by itself.

New: the repository, downloaded or updated in the app

Not everyone knows their way around git — and the app drives the scripts that live in a clone.

  • No clone yet → "Download repository": a shallow clone into ~/NX2Apple (a quarter of the bytes of a full clone; verified that fetch and pull keep working on it), progress streaming into the log.
  • GitHub is slow where you are? The panel shows the manual route with a tappable link — open the page, the green Code button, Download ZIP, unzip, pick the folder with Choose repository…. A ZIP copy builds exactly the same.
  • A ZIP copy can become updatable: a "Make updatable (git)" button adopts the folder in place (git init + fetch + checkout, the path stays), after which the update buttons work.
  • "Check for updates" / "Pull updates": fetch and compare with origin/main, show how many commits are behind, fast-forward on a click. A quiet check also runs at launch — offline is never an error. Your builds are never touched: their files live outside the repository.

New: the app updates itself

The header shows the version; at launch (or a tap on it) the app asks GitHub for the latest release, and a newer one gets an Update to vX.Y.Z button: the zip is downloaded, unzipped beside the running app, the old bundle goes to the Trash, the new one moves in (quarantine stripped, no Gatekeeper prompt) and the app relaunches. Every failure at any step leaves the current app running.

Fixes

  • NuGet's first-run configure failure recovers by itself (issue #3): the NuGet-Migrations IOException that stopped the very first nx_extract build is detected, the NuGet caches are cleared and the build retried once — no terminal needed.
  • The save-loading freeze (issue #4): an upload batch's commit could sit recorded in the replay block while the submit thread slept on it — nothing handed the block over, so the submission could never end. Hades II froze on loading any save on an iPhone. Fixed here, independently found by upstream (Little Nightmares II), and our sibling fix was ported upstream with a further improvement covering waiters on any thread. Pulling the latest repository (see above) carries all of it.

Ten more games, 58 profiles

Advance Wars 1+2: Re-Boot Camp, Taiko Risshiden V DX (touch), Bayonetta 3, Super Smash Bros. Ultimate, BALL x PIT, Pokémon Sword, Pikmin 4, Mario vs. Donkey Kong, Romance of the Three Kingdoms 8 REMAKE (controller), Stardew Valley — all reported playable on an iPhone upstream. NSZ / XCZ dumps are now accepted too (converted automatically with nsz -D, which the app's Python environment installs).

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"). From this version on, the app can update itself.

This is a front end only. It drives the scripts of NX2Apple — the Download button in the repository group fetches them, no git knowledge needed.

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. Twenty-nine are reported playable upstream; the full table with per-game versions is in the README. If you try another title, expect to bring it up yourself, and please report what you find.

Requirements

  • An Apple Silicon Mac, macOS 13+
  • Python 3.9+ with lz4, capstone, fontTools, and zstd (compression.zstd on 3.14+, backports.zstd before) — the dependency panel manages a venv with all of this
  • .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.


中文说明

App 现在会自己把自己安顿好:一键把仓库弄到机器上(GitHub 不顺手时走手动路线),一键把脚本和 App 本体都更新到位。底层还有:新增 10 款游戏(共 58 个 profile)、接受 NSZ / XCZ 格式、修复读档死锁、NuGet 首次运行问题自动恢复。

新增:仓库,在 App 里下载或更新

不是每个人都熟 git——而 App 驱动的脚本就住在 clone 里。

  • 没有 clone →「下载仓库」:浅克隆到 ~/NX2Apple(体积只有完整克隆的四分之一;已验证浅克隆上 fetch/pull 照常工作),进度实时进日志。
  • 网络不顺? 面板上有手动路线和可点击的链接——打开仓库页面 → 绿色 Code 按钮 → Download ZIP,解压后用「选择仓库…」选中文件夹。ZIP 副本构建效果完全相同。
  • ZIP 副本也能变成可更新:「接入 git(可更新)」按钮原地接管文件夹(git init + fetch + checkout,路径不变),之后更新按钮照常可用。
  • 「检查更新」/「拉取更新」:fetch 并与 origin/main 对比,显示落后多少个提交,一键快进。启动时还会静默检查一次——离网绝不报错。你的构建不受影响:构建文件都在仓库外面。

新增:App 自动更新

顶栏显示版本号;启动时(或点一下版本号)App 会问 GitHub 有没有新版本,有的话出现「更新到 vX.Y.Z」按钮:下载 zip、在运行中的 App 旁边解压、旧版本进废纸篓、新版本就位(去掉隔离属性,不弹 Gatekeeper)并重启。任何一步失败,当前 App 都原样在跑。

修复

  • NuGet 首次运行配置失败自动恢复(issue #3):那个让第一次 nx_extract 构建中断的 NuGet-Migrations IOException 现在会被识别——自动清 NuGet 缓存并重试一次,不用开终端。
  • 读档死锁(issue #4):上传批次的 commit 可能作为记录留在 replay 块里,而提交线程在它上面睡着——没有人把块交接出去,submission 永远结不了束。Hades II 在 iPhone 上读任何存档都会冻住。本仓库已修,上游也独立发现(小小梦魇 2),我们补的姊妹修复已被上游采纳并追加了覆盖任意线程等待的改进。按上面的方法拉最新仓库就全部带上。

新增 10 款游戏,共 58 个 profile

高级战争 1+2、太阁立志传 V DX(触屏)、猎天使魔女 3、任天堂明星大乱斗 特别版、BALL x PIT、宝可梦 剑、皮克敏 4、马力欧 VS 大金刚、三国志 8 REMAKE(需手柄)、星露谷物语——全部为上游报告 iPhone 可玩。NSZ / XCZ 格式也被接受(自动用 nsz -D 转换,App 的 Python 环境会装上它)。

这个包是什么

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

这只是前端。 它调用 NX2Apple 的脚本——仓库分组里的「下载」按钮会自动获取,不需要任何 git 知识。

已验证的游戏

游戏 需要的更新包 状态
塞尔达传说:王国之泪 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 均未验证。 二十九个上游报告 iPhone 可玩;完整表格(含每个游戏的版本)在 README。试别的游戏请做好自行 bring-up 的准备,欢迎反馈。

环境要求

  • Apple Silicon Mac,macOS 13+
  • Python 3.9+,装有 lz4、capstone、fontTools,以及 zstd(3.14+ 用内置 compression.zstd,更早用 backports.zstd)——依赖面板通过 venv 全部管理
  • .NET SDK 10(Homebrew / .pkg / dotnet-install.sh 三种都支持)
  • 除 NSP 外约 6 GB 空间;shader 编译是最慢的一步
  • 你自己的游戏文件和 prod.keys——不含任何数据

法律

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