#### 🆕 最近重点更新
- **Windows 版启动器上线(`NX2Apple-windows-x64.zip`)**:在 Windows 上使用与 Mac 版一致的 1.2 界面构建 iPhone 和 iPad IPA,自带完整引擎目录(无需安装 git),支持首次启动引导向导与工具链一键安装、多核并行 NSO 重写及应用内自动更新(`NX2Apple.exe`)
- **支持 Switch 2 游戏**:在 Mac 或 Windows 启动器中直接选择 Switch 2 游戏文件夹或 `.nup` 文件,无需 `prod.keys`,即可在 Mac、iPhone 或 iPad 上构建和游玩
- **虚拟手柄自定义、双 Joy-Con 横握拆分与 Steam Controller(2026)**:在 iPhone 和 iPad 的可视化编辑器中自由调整触控按键大小、摇杆位置与整体布局(2D/3D 独立保存)。外接手柄支持全局或按游戏改键,Mac 端支持将一对蓝牙 Joy-Con 拆分为两个独立横握手柄,并支持新款 Steam Controller(2026)
- **iPhone 和 iPad 共用一个 App**:所有游戏装进同一个壳 App(也支持导出未签名 IPA),每个游戏自带独立宿主框架(后续引擎更新无需重编旧游戏),支持横屏 Cover Flow、按游戏独立设置与 Mod、保留存档删除游戏,以及 6 种系统语言
- **主机模式**:插上手柄按 Select 或设置开机直达,游戏库即刻变为全屏手柄界面,长按 Home 键 2 秒即可退出游戏
所有版本见[更新日志](CHANGELOG.zh-CN.md)。
它是 **[nxnative](https://github.com/seedds/nxnative)** 的社区 fork。真正的工作(代码改写器、Horizon
宿主层、NVN-on-Metal 和每个游戏的 profile)都是 nxnative 的;本 fork 在其上增加启动器和少量补丁,
并每天跟随 nxnative 更新。
## 环境要求
- **Apple Silicon Mac。** 启动器支持 **macOS 13 或更新**。构建需要装了 iOS SDK 的 Xcode;NVN 游戏需要
[Xcode](https://developer.apple.com/download/all/?q=Xcode%2027.2) 27.2(macOS 26.6 或更新),除非加 `--allow-other-metal`。
请从 Apple 的下载页面获取 27.2,而不是 App Store 里更新的 Xcode。如果同时装了更新的 Xcode,把 27.2 改名为
`Xcode-27.2.app` 并选中它:`sudo xcode-select -s /Applications/Xcode-27.2.app`。
- **你自己的游戏文件**(NSP 或 XCI)和**你自己主机里导出的 `prod.keys`**。本项目不自带、不下载、
也不替你查找任何东西。一份 `prod.keys` 能解你所有的 Switch 游戏。新导出的一份覆盖所有零售游戏。
Switch 2 游戏(游戏文件夹或 `.nup` 文件)不需要 `prod.keys`。
- 要装到 iPhone 或 iPad:iOS 或 iPadOS 26 或更新,以及较新的设备。更旧的设备未测试。
App 自带构建工具和 Python,不需要装 Homebrew 和 Python;.NET SDK 10 仍由 App 帮你安装。启动器的依赖页会逐项检查,能装的一键安装。
## 安装
1. **下载 App**:从[最新版本](https://github.com/LNPANDY/NX2Apple/releases/latest)下载
`NX2Apple-macOS-arm64.zip`,解压。
2. **首次启动:右键 → 打开。** 这个 App 没有付费的 Apple 开发者证书签名,所以 macOS 在第一次启动时会
询问;之后就能正常打开。
3. **按设置页走。** 启动器会取回构建用的项目(设置页上的「下载仓库」按钮,浅克隆到 `~/NX2Apple`;
GitHub 不顺手时页面会给出手动 ZIP 的路线),检查上面的工具,之后还会自己更新。全程不需要懂 git。
4. **构建游戏。** 选好游戏文件夹(或者分别选本体、更新包、DLC 和 `prod.keys`),选择「这台 Mac」或
「iPhone / iPad」,按构建。页面显示真实的阶段和剩余时间,中途停止的构建会从上次继续。「iPhone / iPad」
是装在设备上、容纳你所有游戏的一个共用 App。启动器用 Xcode 为它签名、安装并拷入游戏,需要一台与这台 Mac 配对的设备。
在终端里手动构建见 [BUILDING.zh-CN.md](BUILDING.zh-CN.md)。
**更新已构建的 Mac 游戏。** 在游戏库中选中游戏,点「重新构建」。如果更新包是 NSP,保留已选的游戏本体,
在「更新和附加内容」中选择新的更新包,然后在原输出文件夹中为「这台 Mac」构建。更新可能同时改动游戏代码和数据,
因此启动器会构建新版本,并尽量复用缓存。存档按游戏的标题 ID 保存在 `.app` 外的独立文件夹中,
在同一游戏库中重新构建会保留原有进度。
## iPhone 和 iPad 上的 App
「iPhone / iPad」目标会构建一个共用的外壳 App,和 Mac 启动器一样容纳你所有的游戏。游戏库用封面展示每个游戏。
竖屏时是单列,选中的游戏在顶部。横过来是 Cover Flow。iPad 显示网格。
- **从 Mac 添加游戏。** 用「iPhone / iPad」目标构建游戏,启动器会把它拷进 App。重新签名和重装 App 都会保留游戏数据和存档。
- **游玩。** 选一个游戏,点 **Play**。缺少游戏数据或需要更新 App 的游戏,会在它的卡片上说明并给出解决办法。
- **每个游戏的设置。** 设置按钮(手柄上按 X)打开该游戏的启动选项。**重置**会把所有选择恢复为默认。
- **手柄或键盘。** 整个 App 都能用手柄操作:方向键和摇杆移动,A 选择,B 返回,X 打开设置,Y 列出手柄。外接键盘的用法相同。
- **游戏数据文件夹。** 每个游戏可以从你在「文件」App 里选的文件夹(例如外置硬盘)读取数据,也可以用 App 自己的文件夹。
- **云存档。** 为游戏选一个 iCloud Drive 文件夹,存档就和 Mac 保持同步。
- **语言。** App 跟随系统语言,英文或简体中文。
App 需要 iOS 或 iPadOS 26 或更新。封面是 Mac 启动器为你自己的游戏缓存的 eShop 横幅。
## 游玩
**在 Mac 上**,构建好的游戏带着封面出现在游戏库里,点 **Play** 启动。**启动选项**(按游戏保存,重新
构建后仍然保留)可设置帧率、主机模式(底座或掌机)、渲染缩放和超分辨率、游戏语言、操控等;每项的
作用见 [docs/settings.md](https://github.com/seedds/nxnative/blob/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/settings.md)(英文)。手柄既能操作游戏,也能操作启动器。
**在 iPhone 上**,App 在游戏开始前显示同样的设置,点 **Play** 即可。触屏操控有 2D 和 3D 两种布局
(点顶部中央的按钮切换),连接手柄(Xbox、PlayStation、Switch Pro、MFi)后触屏控件会隐藏。
触屏、震动和体感见 [docs/playing.md](https://github.com/seedds/nxnative/blob/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/playing.md)(英文)。新场景第一次出现时短促卡顿是正常的:
App 会为它编译一次图形并记住。游戏数据(`romfs.img`)可以放在外置硬盘上,用「文件」App 选取。
**游戏语言。** 默认英文。Mac 上用启动选项里的「游戏语言」一行。面板里没有的设置,可以写一个
`env.txt`,每行 `KEY=VALUE`(例如 `DM_LANG=zh-Hans`),放在两处之一:
`~/Library/Application Support/nxnative/
| 塞尔达传说:王国之泪 | Mac 和 iPhone | **本 fork 验证**:304,243 个文件,逐字节校验;约 17 GB |
|
| Hades II | Mac 和 iPhone | **本 fork 验证** |
|
| 集合啦!动物森友会 | iPhone | **本 fork 验证**:流畅运行 |
|
| 超级马力欧 奥德赛 | iPhone | 上游报告可玩 |
|
| 塞尔达传说:旷野之息 | iPhone | 上游报告可玩;1.9.0 可 60 fps |
|
| 马力欧卡丁车 8 豪华版 | iPhone | 上游报告可玩 |
**[GAMES.zh-CN.md](GAMES.zh-CN.md)**(带截图图库和每款的安装大小)
有完整表格和每款游戏需要的更新包版本:更新包 NSP 的显示版本必须与 profile 一致,否则构建会提示。
**Switch 2 游戏**是引擎新加入的。目前有 11 款有 profile,上游都标为可在 Mac 上玩:Donkey Kong Bananza、
Splatoon Raiders、Fire Emblem Fortune's Weave、Pokémon Pokopia、Hyrule Warriors: Age of Imprisonment、
Mario Kart World、Mario Tennis Fever、Star Fox、Yoshi and the Mysterious Book、The Legend of Zelda: Ocarina of Time 和 Kirby Air Riders。
在构建页面选择游戏文件夹(`base/`、`updates/`、`dlc/`)或它的 `.nup` 文件即可,不需要 `prod.keys`。游戏库会把它们标为
**Switch 2**。本 fork 只试过 Donkey Kong Bananza:所有者通过启动器构建,并在 Mac、iPhone 和 iPad 上玩过,Mac 和 iPhone 上没有发现问题,
iPad 上基本没有问题。其他 Switch 2 游戏在本 fork 上没有试过。详情见 [GAMES.zh-CN.md](GAMES.zh-CN.md#switch-2-游戏)。
## 限制
- **只支持有 profile 的游戏。** 列表之外的游戏需要单独的 bring-up 工作;起点是
[docs/agents](https://github.com/seedds/nxnative/blob/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/agents/README.md)(上游为其他 Switch 游戏写的指南,英文)。
- **大体积游戏在 iPhone 上会碰到内存上限。** 没有 Increased Memory Limit entitlement 时 iOS 只给 App
约 3.4 GB,不够《王国之泪》用。App 请求了它,AltStore Classic 2.2+、Impactor 和 Xcode + Personal Team
会保留;SideStore 配合免费 Apple ID 需要对 App ID 做一次性修复,Sideloadly 会丢掉它
([步骤](ENTITLEMENTS.md))。完整的测量见 [GAMES.zh-CN.md](GAMES.zh-CN.md#验证情况)。
- **启动器未签名。** 启动器不会替你签名,需要你自己侧载。iPhone 上的 App 在启动器安装时由 Xcode 用你自己的团队签名。
- **你自己的文件。** 不包含也不下载任何游戏数据、固件或密钥。
- **旧的分片归档不再被读取。** 最早的 iPhone 构建把《王国之泪》打成 RomFS 分片归档(`romfs.idx`);现在
构建写出单个 `romfs.img`。仍保留旧归档的 iPhone 需要通过启动器把游戏数据重新发送一次(`romfs.img`)。
## 给开发者
- **从源码构建:** [BUILDING.zh-CN.md](BUILDING.zh-CN.md)。**报告或修复问题:** [CONTRIBUTING.zh-CN.md](CONTRIBUTING.zh-CN.md)。
- **哪里需要帮忙:** [里程碑](https://github.com/LNPANDY/NX2Apple/milestones)就是计划,怎么从中认领一个 issue 见 [CONTRIBUTING.md](CONTRIBUTING.md#where-we-would-love-help)。
- **本 fork 对上游改了什么:** 引擎(`dm/`、`scripts/`、`docs/`、`ref/`)不提交在本仓库里。它是 nxnative
在固定提交(`.upstream-ref`)上的内容,加一组补丁,每个补丁写明本 fork 为什么带着它,
`python3 tools/engine.py sync` 把它构建到 `engine/`。见 [patches/README.md](patches/README.md)。
`python3 tools/engine.py status` 列出带着的全部补丁。每天一次的任务移动固定提交并开 pull request,
某个补丁对不上时开一个点名该补丁的 issue。本页指向引擎文档的链接都指向 nxnative 的固定提交。
- **其他 Switch 游戏:** [docs/agents](https://github.com/seedds/nxnative/blob/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/agents/README.md)(解包、二进制调查、bring-up)。
- **版本历史:** [CHANGELOG.zh-CN.md](CHANGELOG.zh-CN.md)。
## 致谢
**社区贡献者** —— 这个项目的代码不只是一个维护者的输出:
- **[v0lumehi](https://github.com/v0lumehi)** —— **Mac 前端的启动器界面**(PR [#27](https://github.com/LNPANDY/NX2Apple/pull/27),40 个文件):游戏库、封面图、每游戏启动选项、真进度流、能真正结束整个构建进程组的 Stop。Mac 端从"一个构建表单"变成了"打开像一台 Switch 的启动器"的第一版。
- **[m1guelpf](https://github.com/m1guelpf)**(Miguel Piedrafita)—— 两个 HLE 修复(PR [#24](https://github.com/LNPANDY/NX2Apple/pull/24)、[#26](https://github.com/LNPANDY/NX2Apple/pull/26)):补上了 `EnableAlbumImageTakenNotification` 和 `CreateWithAdjustableSystemClock` 及其快照类型字节——两个原本会让游戏读到空指针的缺失条目,各带测试。
想加入这个列表?[参与贡献](CONTRIBUTING.zh-CN.md#帮忙补充游戏)写了怎么开始;issue 里附上完整日志的报告和带测试的修复最快。
所有底层引擎的工作都是别人的。本仓库在其之上增加了启动器和补丁队列:
- **[nxnative](https://github.com/seedds/nxnative)**(MIT)—— 本仓库所基于的原生执行工具链:
NSO 重写器、Horizon 宿主层、NVN-on-Metal、各游戏 profile 和 iOS 外壳。
- **[d2r-mobile](https://github.com/jhaizhou-ops/d2r-mobile)**(MIT)—— nxnative 由之发展而来的
原始原生执行方案。
- **Ryujinx**(MIT)—— 把 Maxwell 着色器翻译成 SPIR-V 的翻译器。
- **[Atmosphère](https://github.com/Atmosphere-NX/Atmosphere)** —— Horizon 同步语义的参考实现。
- **[LibHac](https://github.com/Thealexbarney/LibHac)** —— `nx_extract` 用它读取 NSP 并叠加更新。
- **[SPIRV-Cross](https://github.com/KhronosGroup/SPIRV-Cross)** —— SPIR-V 转 Metal Shading Language。
- **yuzu**、**deko3d**、**libvpx**、**stb_vorbis**、**libdeflate** —— 各自贡献见上游致谢列表。
`dm/third_party` 里随附了其他项目及其许可证([列表](https://github.com/seedds/nxnative/blob/88c7e03f51e3934dc227089ea81ec64fcd525b03/dm/third_party/README.md))。
## 法律
**本项目是什么。** 一个为你**已拥有**的游戏做构建的工具。它读取你在自己机器上从自己的卡带和购买中
导出的文件,产出一个装到你自己的设备上的安装包。本仓库、App 和任何 Release 中都不包含、也不分发
任天堂的代码、美术、文本、数据、着色器、固件、密钥或任何其他受版权保护的内容。
**它做不到什么。** 整条流水线没有游戏和密钥的来源:必须由用户提供自己的 `prod.keys` 和自己的
NSP/XCI 导出文件,且不连接任何服务器。它不绕过、不移除、也不再分发任何保护——LibHac 用用户自己的
密钥打开用户自己的导出文件,和主机读取卡带执行的是同一种操作。
**商标。** 与任天堂无关联,也未获得其赞助或认可。"Nintendo Switch" 及各游戏名称是任天堂株式会社的
商标;其他商标归各自权利人所有。
**你的责任。** 制作个人备份副本的法律因国家而异,有些地方完全不允许。你有责任了解并遵守所在地的
法律,并且绝不分发游戏文件、密钥或由它们构建出的安装包——本项目的产物仅供在你自己的硬件上个人使用。
喜欢哪个游戏,请购买它。
**下架。** 如果你认为本仓库中的任何内容侵犯了你的权利,请开 issue 或直接联系维护者;有效的权利
主张会得到及时处理,包括删除相关内容乃至整个仓库。
**无担保。** 本软件按 [LICENSE](LICENSE) 中的许可证(本 fork 在上游之上有所附加,见致谢)以"现状"
提供,不附带任何明示或默示的担保。使用风险自负。