NX2Apple, by nxnative **你的 Switch 游戏,跑在你的 iPhone 上。** **不是模拟器。不用命令行。一个 macOS 或 Windows App 点几下就把整个构建做完。** [![Stars](https://img.shields.io/github/stars/LNPANDY/NX2Apple?style=social)](https://github.com/LNPANDY/NX2Apple/stargazers) [![Forks](https://img.shields.io/github/forks/LNPANDY/NX2Apple?style=social)](https://github.com/LNPANDY/NX2Apple/network/members) [![Issues](https://img.shields.io/github/issues/LNPANDY/NX2Apple)](https://github.com/LNPANDY/NX2Apple/issues) [![License](https://img.shields.io/github/license/LNPANDY/NX2Apple)](LICENSE) [![游戏](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FLNPANDY%2FNX2Apple%2Fmain%2F.github%2Fbadges%2Fgames.json)](.github/badges/games.json) [![中文](https://img.shields.io/badge/🇨🇳_中文-current-blue)](README.zh-CN.md) [![English](https://img.shields.io/badge/🇺🇸_English-available-green)](README.md) [![Svenska](https://img.shields.io/badge/🇸🇪_Svenska-available-green)](README.sv.md) [![Deutsch](https://img.shields.io/badge/🇩🇪_Deutsch-available-green)](README.de.md) [![Français](https://img.shields.io/badge/🇫🇷_Français-available-green)](README.fr.md) [![Italiano](https://img.shields.io/badge/🇮🇹_Italiano-available-green)](README.it.md) NX2Apple — Switch 游戏装进 iPhone 和 Mac #### 🆕 最近重点更新 - **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)。
--- ## 这是什么 NX2Apple 用你自己导出的游戏文件,在你的 Mac 和 iPhone 上运行 Nintendo Switch 游戏。它不是模拟器: 游戏自己的代码直接在 Apple 芯片上运行,由 Metal 负责绘制。一个 Mac App(启动器)点几下就完成构建 (解包、改写、翻译 shader、打包),然后把你的游戏放进游戏库,像 Switch 一样点 **Play** 启动。 启动器:已构建游戏的游戏库,和一个正在进行的构建 它是 **[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 显示网格。 竖屏的 iPhone App:带大图的游戏库和两个游戏封面、一个游戏的设置、一个需要游戏数据的游戏 横屏的 iPhone App:Cover Flow 里有旷野之息、Hades 和王国之泪的封面 - **从 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//env.txt` 优先,重新构建后仍在; `<App>.app/Contents/Resources/dm/env.txt` 是 App 自带的。在加入语言选项之前构建的 Mac App 需要重新构建 一次才有该项。iPhone 上同样的行写在 `Documents/env.txt` 里(`DM_FPS_TARGET=30` 限帧省电, `DM_OPMODE=0` 选掌机模式)。该文件对共享 App 里的每个游戏都生效。只属于某一个游戏的行(例如 mod 的 `DM_ROMFS_OVERLAY`)写在 `Documents/games/<title ID>/env.txt` 里。两个文件设置了同一个键时,以该游戏的文件为准。 Mod 更简单:把它的文件夹放进 `Documents/games/<title ID>/mods/<mod 名>/`(RomFS 文件放在其中的 `romfs/` 文件夹里,或直接放在该文件夹里)。之后 Shell 只为这个游戏设置 `DM_ROMFS_OVERLAY`。有多个 mod 时,替换同一文件的 情况下按名称排在前面的生效。同一个键被多处设置时的优先顺序:Shell 自己的设置、该游戏的 `env.txt`、该游戏的 `mods/` 文件夹、共享的 `Documents/env.txt`。 **存档和日志。** 放在游戏库文件夹里的 Mac 游戏,存档和日志在 App 旁边(`log/<title ID>.log`);否则在 `~/Library/Application Support/nxnative/<title ID>/` 和 `~/Library/Logs/nxnative/<title ID>.log`。 iPhone 上在「文件」App 里该 App 名字下:`save/` 和 `log.txt`(上一次运行的是 `log.prev.txt`)。 **报告问题。** 请用[问题表单](https://github.com/LNPANDY/NX2Apple/issues/new/choose)(游戏问题、构建问题、 启动器问题)。表单会要你填游戏和 title ID、版本和设备、**设置 > 复制诊断信息**,以及游戏的日志; 为什么需要见 [CONTRIBUTING.md](CONTRIBUTING.md)(英文)。附上完整 `log.txt` 的报告会优先处理。 千万不要附上密钥、游戏文件或任何从游戏中提取的内容。 ## 游戏 共有 147 个游戏 profile。部分游戏上游报告 iPhone 可玩,其余的 profile 还没在手机上试过。其中几款: | | 游戏 | 运行于 | 状态 | |---|---|---|---| | <img src="https://raw.githubusercontent.com/seedds/nxnative/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/images/zelda-tears-of-the-kingdom.jpg" width="96" alt=""> | 塞尔达传说:王国之泪 | Mac 和 iPhone | **本 fork 验证**:304,243 个文件,逐字节校验;约 17 GB | | <img src="https://raw.githubusercontent.com/seedds/nxnative/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/images/hades-ii.jpg" width="96" alt=""> | Hades II | Mac 和 iPhone | **本 fork 验证** | | <img src="https://raw.githubusercontent.com/seedds/nxnative/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/images/animal-crossing-new-horizons.jpg" width="96" alt=""> | 集合啦!动物森友会 | iPhone | **本 fork 验证**:流畅运行 | | <img src="https://raw.githubusercontent.com/seedds/nxnative/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/images/super-mario-odyssey.jpg" width="96" alt=""> | 超级马力欧 奥德赛 | iPhone | 上游报告可玩 | | <img src="https://raw.githubusercontent.com/seedds/nxnative/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/images/zelda-breath-of-the-wild.jpg" width="96" alt=""> | 塞尔达传说:旷野之息 | iPhone | 上游报告可玩;1.9.0 可 60 fps | | <img src="https://raw.githubusercontent.com/seedds/nxnative/88c7e03f51e3934dc227089ea81ec64fcd525b03/docs/images/mario-kart-8-deluxe.jpg" width="96" alt=""> | 马力欧卡丁车 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 在上游之上有所附加,见致谢)以"现状" 提供,不附带任何明示或默示的担保。使用风险自负。