Skip to content

NX2Apple v0.4.9 — 游戏库跟着文件夹走、iPhone 数据选择器、八项需求落地 / the library follows the folder, an iPhone data picker, and the tracker's eight requests

Choose a tag to compare

@github-actions github-actions released this 27 Oct 18:59
· 1662 commits to main since this release

What this release does

The Mac side gains a game library that follows the folder. A rebuilt game now keeps its saves and its log beside the .app (in save/ and log/), and an older install's saves are copied across on the first run — so the whole library moves as one folder, onto an external drive if you like. The iPhone side gains a data picker: the game's romfs.img can live anywhere the Files app reaches, and the launcher remembers it. And the eight launch-option and library requests from the tracker are all in: keys are checked before the build, files can be dropped onto the page, finished builds notify you, old builds are flagged, disk space is reclaimable, saves move between Mac and device, diagnostics copy in one click, and controllers get one-click layouts.

English is the complete half; the Chinese half below says the same thing.

New

  • Saves and log beside the game (Mac): <library>/save/<title ID>/ and <library>/log/, with the old ~/Library saves copied across on the first run. ~/Library keeps the shader state and scratch space; the library folder holds only what is needed and reused.
  • Saves and log next to the game (Mac): the library folder carries the saves and log, older saves migrate automatically, and the folder can move or live on an external drive as a whole.
  • The iPhone's game data can live anywhere: Settings → Game data in the launcher picks the romfs.img or RomFS folder from the Files app (external drive or iCloud included); the choice is remembered, and a re-signed build asks once more.
  • Keys are checked before the build: the prod.keys row decrypts an NCA header in under a second and says "Keys fit", or names exactly which key is missing and from which firmware generation (never showing key values).
  • Drop files onto the Builds page: NSP/NSZ/XCI, a whole folder, and prod.keys.
  • A macOS notification when a build finishes or fails in the background; clicking it opens the game or the log.
  • Older tools are flagged: a game built before the tools changed reads "· Older tools" with a one-click rebuild.
  • Free space: a sheet lists what the build folder holds and what removing each part costs; saves, the app and the NSPs are never offered.
  • Saves between Mac and device: each side shows its newest file, the newer is marked, and a copy backs the other side up first.
  • Copy diagnostics (Settings): one click puts the app version, repository commit, toolchain and the last build's log tail on the clipboard for a bug report.
  • Controller layouts: Standard (by position), By label (Nintendo/Xbox as printed), Custom, and Auto — which matches the connected controller.
  • A new version says what it changes before asking to install.

Fixes

  • Mac: a rebuild no longer leaves saves in ~/Library — the library layout actually engages, the old saves migrate, and a game with no library marker keeps the old paths.
  • Mac: the build no longer refuses Python 3.15, nor picks Apple's 3.9 behind your back; the interpreter floor is the script's own 3.12.
  • Mac: a folder holding several games builds the one you picked, with its update and DLC.
  • Mac: a failed build names the reason and shows the log it points at; the log sits under the Mac/iPhone choice.
  • Windows: the interface is Chinese on a Chinese Windows (the locale name and the UI-language API disagreed); the Metal probe works under a Chinese user name; the summary line and the spirv-cross hint say what they mean; optional tools read as optional (a muted ○, not a red ✗); the Vulkan SDK is found by itself, no toolchain.json edit.
  • Windows: the failed-install crash (EXC_BAD_ACCESS on a failed dependency) is gone; Homebrew's unlinked python3.12/python3.14 are found.
  • Windows: the strings a CI build wiped are in the shared table now, so what you see matches this list.
  • Every rewrite of every game crashed (patch_nso.py used TEXT_LO before defining it) — fixed upstream-first, carried here.
  • iOS: the two undefined macros that broke every IPA build are gone; a RomFS directory opened with a trailing slash is found (Bayonetta 3's opening movie plays).
  • CI: the failure reports open issues again (they went to the upstream repository by mistake), every pull request runs all the suites, and the carrier tables assert their own consistency.

Known issues

  • The launcher (several games in one app) is not built yet; the runtime profile that it stands on is merged.
  • The learned shader state stays in ~/Library: do not delete pso_archive or pso_user.tsv there — the engine has no fallback for a missing one (a report upstream would help).
  • Mods have not been played with a real mod yet: the layouts and the environment string are verified; the actual overlay is not.
  • Windows: not provided on this page — the front end is verified on real hardware, the full build pipeline is not. The Actions artifact NS-Port-Builder-qt-windows-x64 has the current front end.

Install

  • macOS: download NX2Apple-macOS-arm64.zip, unzip, then right-click → Open on first launch. From 0.4.8 or earlier: download this one by hand — the app was renamed, so the old in-app updater looks for the old asset name; in-app updates work from this version on (and 0.4.9 installs later updates under the NX2Apple name).
  • The previous asset names nxnative-macOS-arm64.zip and NS-Port-Builder-macOS-arm64.zip carry the same build.
  • Windows: not provided on this page.

Credits

  • v0lumehi — the eight launch-option and library features (#77–#84), the TEXT_LO crash fix (#59), the build-tools auto-update (#60), the iOS tests and switch-table carriers (#51), the paired-device install (#28), and the README's new look (#86).
  • pyxl-dev — the failed-install crash fix and Homebrew's unlinked pythons (#74).
  • QID-Rob — .NET's first-run configure needs TMPDIR (#50).
  • ufooer — the Rosetta check and the multi-game folder idea (#31, partly adopted).
  • JMRBDev — independently confirmed the ObjCBool fix (#76).

这一版做了什么

Mac 这边有了跟着文件夹走的游戏库。 重新构建的游戏会把存档和日志放在 .app 旁边(save/ 和 log/),老安装的存档在首次运行时自动复制过来——整个库文件夹可以整体移动、放进外置硬盘。iPhone 那边加了数据选择器:游戏的 romfs.img 可以放在 Files 应用能访问的任何位置,启动器会记住。另外追踪器里的八条启动选项与游戏库需求全部落地:构建前校验密钥、文件拖拽、后台构建通知、旧构建标记、磁盘空间回收、Mac 与设备间存档互拷、一键复制诊断报告、手柄一键布局。

新增

  • 存档和日志跟着游戏走(Mac):<库>/save/<title ID>/ 和 <库>/log/,首次运行自动把 ~/Library 的旧存档复制过来。~/Library 只留 shader 状态和临时空间,库文件夹只放必要和需要复用的文件。
  • iPhone 的游戏数据可以放任何地方:启动器里「Settings → Game data」从 Files 应用选择 romfs.img 或 RomFS 文件夹(外置硬盘、iCloud 都行);选择会被记住,重签名后会再问一次。
  • 构建前校验密钥:prod.keys 那一行一秒内解密一个 NCA 头,显示「Keys fit」,或明确说缺哪个 key、该从哪个固件版本重新提取(不显示任何密钥值)。
  • 文件拖到构建页:NSP/NSZ/XCI、整个文件夹、prod.keys 都行。
  • macOS 通知:后台构建结束或失败时通知;点通知打开游戏或日志。
  • 旧工具构建的游戏会标记:构建工具更新后,旧构建显示「· Older tools」,一键用新工具重建。
  • 释放空间:面板列出构建文件夹里每部分的内容和删除代价;存档、App 和 NSP 永远不会出现在删除列表里。
  • Mac 与设备间拷贝存档:两边各显示最新文件时间,新的标出来;复制前先把另一侧备份。
  • 复制诊断报告(设置):一键把 App 版本、仓库 commit、工具链状态和上次构建的日志尾部放到剪贴板。
  • 手柄布局:标准(按位置)、按印刷字母(Nintendo/Xbox)、自定义、Auto(按连接的控制器自动选)。
  • 新版本会先说明改了什么,再让你决定是否安装。

修复

  • Mac:重新构建不再把存档留在 ~/Library——库布局真正生效,旧存档自动迁移;没有库标记的游戏 App 保持原路径。
  • Mac:不再拒装 Python 3.15、不再偷偷用系统的 3.9;解释器下限就是脚本要求的 3.12。
  • Mac:一个文件夹里有多款游戏时,构建你选中的那款(连同它的更新和 DLC)。
  • Mac:构建失败会说明原因,并显示它指向的日志;日志面板在 Mac/iPhone 选择下方。
  • Windows:中文 Windows 显示中文界面(locale 名与 UI 语言 API 的分歧);中文用户名下 Metal 探针正常;摘要行和 spirv-cross 提示说明白了;可选工具显示为可选(灰 ○,不是红 ✗);Vulkan SDK 自动识别,不用改 toolchain.json。
  • Windows:依赖安装失败时的闪退(EXC_BAD_ACCESS)没了;能找到 Homebrew 没建链接的 python3.12/python3.14。
  • Windows:CI 构建会清掉的字符串进了共享表,界面和这份列表一致。
  • 每一款游戏的每一次重写都会崩(patch_nso.py 先用后定义 TEXT_LO)——按上游优先修复后带回来。
  • iOS:让每个 IPA 构建都失败的两个未定义宏没了;带尾斜杠的 RomFS 目录能找到(《猎天使魔女 3》开场动画能播)。
  • CI:失败报告又能开 issue 了(之前错发到上游仓库)、每个 PR 跑全部测试套件、载体三表自洽断言。

已知问题

  • 启动器(一个 App 里放多个游戏)还没做;它依赖的运行时 profile 已合入。
  • shader 学习状态仍在 ~/Library:不要删除那里的 pso_archive 和 pso_user.tsv——引擎对缺失没有兜底(值得去上游报一个)。
  • Mods 还没用真实 mod 玩过:目录布局和环境变量都验证了,实际叠加没有。
  • Windows:本页不提供——前端已在真机验证,完整构建管线还没有。Actions 的 NS-Port-Builder-qt-windows-x64 有最新前端。

安装

  • macOS:下载 NX2Apple-macOS-arm64.zip,解压后首次启动右键 → 打开。0.4.8 及更早版本请手动下载这一次——应用改名了,旧版应用内更新找的是旧文件名;从这个版本起应用内更新正常(之后 0.4.9 会用 NX2Apple 的名字安装后续更新)。
  • 旧文件名 nxnative-macOS-arm64.zip 和 NS-Port-Builder-macOS-arm64.zip 是同一个包。
  • Windows:本页不提供。

致谢

  • v0lumehi — 八项启动选项与游戏库功能(#77–#84)、TEXT_LO 崩溃修复(#59)、构建工具自动更新(#60)、iOS 测试与开关表载体(#51)、配对设备安装(#28)、README 新视觉(#86)。
  • pyxl-dev — 安装失败闪退修复与 Homebrew 未链接的 Python(#74)。
  • QID-Rob — .NET 首次运行需要 TMPDIR(#50)。
  • ufooer — Rosetta 检测与多游戏文件夹思路(#31,部分采纳)。
  • JMRBDev — 独立确认 ObjCBool 修复(#76)。