Three environment assumptions closed, all of the kind that only bite a machine that is not the maintainer's: a compressed dump, a fresh Xcode, and a pipeline that pointed at the wrong command when the SDK was missing. Plus the fixes from the last two days that already reached the scripts.
New: NSZ / XCZ dumps work out of the box
The pipeline accepts compressed dumps since the last sync, but the app's Python environment never installed nsz — so a player who downloaded an NSZ hit pip install nsz while the dependency panel showed everything green. Now:
- the app's venv installs
nszwith the rest; - and a build whose selected files include an
.nsz/.xczchecks the interpreter in use and installs it once, before the pipeline starts, with the progress in the log.
Fixed: a fresh Xcode now reports its missing iOS SDK
Since Xcode 15 the iOS platform is a separate download. A new Xcode has xcodebuild and the Metal compiler but no iOS SDK, which passed the dependency check and then failed deep inside xcodebuild. The Xcode row now asks xcrun for the SDK version; when it is missing the row says so and its install button runs xcodebuild -downloadPlatform iOS. The pipeline's own prerequisite check names the same thing instead of blaming the Metal toolchain.
Carried from the last two days (scripts only — already live for anyone who pulled)
- The
NuGet-Migrationsfailure recovers by itself (issue #3): the NuGet caches are cleared and the build retried once. - A wrong
DOTNET_ROOTno longer kills the shader step: the pipeline verifies by actually running the shader translator and finds a working runtime root instead of trusting a guess (this was dragoon311's second failure). xattr -crbefore the placeholder signature: codesign refused bundles whose files carried quarantine / Finder attributes (his third failure).- The save-loading deadlock (issue #4), with our sibling fix ported upstream.
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").
If you already run v0.4.2, the app updates itself: the header shows Update to v0.4.3.
This is a front end only. It drives the scripts of NX2Apple; the repository group downloads them with one button (or connects a ZIP copy to git).
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.
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 andnsz— 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.
中文说明
三个“只有换台机器才会踩到”的环境假设,全部关掉:压缩格式的 dump、全新安装的 Xcode、以及缺 SDK 时指错方向的报错。另外把这两天已经进脚本的修复一并说明。
新增:NSZ / XCZ 格式开箱可用
管线上次同步起就接受压缩格式的 dump,但 App 的 Python 环境从来没装 nsz——下载了 NSZ 的人会撞上 pip install nsz,而依赖面板一片全绿。现在:
- App 的 venv 一并安装
nsz; - 选中的文件里出现
.nsz/.xcz时,构建启动前会检查当前解释器并装一次(进度进日志)。
修复:全新 Xcode 现在会明说缺 iOS SDK
Xcode 15 起 iOS 平台是单独下载的。新装的 Xcode 有 xcodebuild、有 Metal 编译器,就是没有 iOS SDK——依赖检查照样通过,然后在 xcodebuild 深处失败。现在 Xcode 这一行会向 xcrun 询问 SDK 版本;缺失时明确说明,安装按钮执行 xcodebuild -downloadPlatform iOS。管线自己的前置检查也改成点明 SDK,而不是错误地归咎于 Metal 工具链。
这两天已生效的(脚本层——拉过仓库的人已经用上了)
NuGet-Migrations失败自动恢复(issue #3):清 NuGet 缓存并重试一次。- 错误的
DOTNET_ROOT不再让 shader 步骤停摆:管线改为实际运行翻译器来验证,找不到就试候选根,不再信任猜测(dragoon311 的第二个故障)。 - 占位签名前
xattr -cr:codesign 会拒绝带隔离 / Finder 属性的包(他的第三个故障)。 - 读档死锁(issue #4),我们补的姊妹修复已被上游采纳。
这个包是什么
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 会自己更新:顶栏出现更新到 v0.4.3。
这只是前端。 它调用 NX2Apple 的脚本;仓库分组里一键下载(或把 ZIP 副本接入 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。
环境要求
- 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 的法律一节。