Repository navigation
v1.2.0
v1.2.0: The engine updates with Mario Kart World and Star Fox, the Windows release, the experimental nxbuild builder, per-game hosts in the iPhone shell, split Joy-Con on the Mac, the Game language for Switch 2 games, better game covers, the iPhone shell in six languages, and fixes for SideStore and Mac app builds.
English
Update note. Games you built before this update are rebuilt on the first Play, because the shader chain of the engine moved again. This is the normal rebuild path and needs no action.
Fixed
- Wrong game covers: the library picks the base game's cover and not a Switch 2 Edition, a bundle or a demo. Of the 167 titles with several shop products, the new rule picks the game for 164. A cover an older launcher saved is checked once and replaced. Three titles stay unsure (Cadence of Hyrule, Dragon Marked for Death, Police Simulator). A banner with a promotion painted into it, such as "Demo Available", cannot be told apart from the data. Manage and Change artwork sets another one. Reported by @zatteogit (#403, #632)
- iPhone shell texts in your language: about 120 texts were English in German, Swedish, French and Italian, and three error messages were English in every language. All are in six languages now. The new texts are machine translated and wait for review (#631)
- SideStore install of a shared IPA: a game with a very large shader tree made the IPA fail to install, because a ZIP holds at most 65,535 entries. The shaders now ship packed in one file and the shell unpacks them on Play. Reported in #587, by @Silverhza (#593)
- iPhone Duo rotation: the shell turns with the device again and has the tabletop layout. Phones play games in landscape only. By @jonochocki (#642)
- Games with an upper case extension: a game file called
GAME.NSPor.XCIis found and built (#554, #650, #653) - Games in subfolders with sibling update or DLC subfolders: when a base game sits in a subfolder such as
base/and its update or DLC sits in a sibling subfolder such asupdate/ordlc/, the library scan climbs to the parent folder and pairs them with the game (#760, #762) - Mac app on a disk without an atomic swap: building the app on such a volume, an exFAT or Mac OS Extended drive for example, now replaces the old app by moves and no longer fails (#595, #651, #654, #742)
- Switch 2 games in the Mac app's settings: the game language row shows for a game that has a NUP update (#619, #647)
- Game language of Switch 2 games with no control data: a game from a dump folder or a NUP without control data, such as Donkey Kong Bananza, had no Game language row. The row is there now, on the Mac and on iPhone and iPad. It shows the languages the game's own files name, such as the 15 of Donkey Kong Bananza, and all languages with a note when the files name none. Thai and Polish, which Donkey Kong Bananza also has, are not offered yet (#668, #671, #693)
- iPhone and iPad shell: the quit prompt says that the app closes and you open it again (#620, #648). The game data stays out of the iCloud backup (#618, #649). Every controller input event reaches the library in order instead of only the last event between view updates, and held directions no longer cut off a tap, by @Haseenesss (#660)
- Console mode pointer while a game starts: the mouse pointer stays hidden from Play until the game window appears. By @Haseenesss (#380, #741)
- Windows: the engine recovery no longer crashes, and the cached SDK's broken
.tbdstubs are repaired before every probe (#613). Installing Python now chains directly into creating the virtual environment and installing the bundled offline wheels, and the iOS cross-build supports the 1.2 engine'stree_tarand single-fileb-<chain>.imgshader library (#765, #772) - The stale shader notice: a game whose shaders are out of date now shows its popup on the Mac and in the Qt launcher for both reasons, a new translator and a changed game profile, and no longer a note that depended on a patch. The texts are new in six languages. They are by @djdev0010 and wait for a native review. By @djdev0010 (#320, #470)
- The .NET check follows the dotnet the build runs: a Mac with an old .NET in
~/.dotnetand a new one from Homebrew showed .NET as fine and then built with the wrong one. The launcher and the build now take the first dotnet that has an SDK 10, in the same order. By @oliphantaaron (#342, seedds/nxnative#1233)
New
- Engine update: the pin moves to
777a5f6c618awith 105 upstream commits. By upstream's notes the Mac gets Mario Kart World, Mario Tennis Fever, Super Mario 3D All-Stars, Mario & Luigi: Brothership, Kirby Star Allies and DAVE THE DIVER. Mario Kart World uses about a third of the GPU memory for its terrain. Tears of the Kingdom no longer falls to 30 fps from the macOS Game Mode. A new Picture shape setting shows for games whose profile has it. We did not play any of it (#689) - Engine update to
7249ee9f95ed: the pin moves on by 28 upstream commits. By upstream's notes the Mac gets Star Fox (Switch 2) through the title, the prologue and the tutorial, Yoshi and the Mysterious Book (Switch 2) at 60 fps, and DRAGON QUEST BUILDERS 2 at 60 fps. Fire Emblem Fortune's Weave and Mario & Luigi: Brothership can run at up to 120 fps. Mario Kart World loses its sky panels and most of its bright dots. A game's shader libraries are one file and its compile cache too. We did not play any of it (#712, #761) - Windows release (
NX2Apple-windows-x64.zip): the Windows launcher is now published on the releases page with the 1.2.0 interface, the bundled engine tree so a player needs no git and no checkout of the repository, multi-core parallel NSO rewriting, the cache management sheet, and an in-place upgrade to the iPhoneOS 27.2 SDK (#615, #616, #765, #768, #771, #772) - Each iPhone and iPad game framework carries its own host: each
DmGame<title ID>.frameworkin the shared app links its own copy of the engine host (loader: "FH"), andDmShellloads it on Play. Engine updates that move the shader chain no longer force games built with this format to be rebuilt before they can start (#451, #756) - iPhone Duo side column: the Controllers and Settings chips and Back sit in a narrow column next to the screen, placed by the areas the system reserves. Phones without such an area look as before. Checked in the Simulator only (#622, #633)
- Preparing game: after Play, the shell shows "Preparing game…" while it unpacks the shaders and hands over to the engine, and ignores the controller until then. By @Silverhza (#652)
- Experimental builder (off by default): Settings, Build tools, Use experimental builder runs the extraction and the shader split with nxbuild 0.2.0, a build tool written in Rust. For the games tested, the files are byte for byte the same as before, and the two stages take seconds, not minutes. It reads NSP, XCI, NSZ, dump folders and Switch 2 packages (.nup), and needs no keys for .nup. Any other case, and any failure, uses the standard builder. Checked with Super Mario Bros. Wonder (#749, #752, #766, #767). The .nup path was checked with a synthetic package and, on the nxbuild side, with the Ocarina of Time package by the image's digest, not in the launcher
- Split a Joy-Con pair into two controllers (Mac): the Controllers sheet now has "Split Joy-Con into two controllers" (off by default). When on, a Bluetooth Joy-Con pair becomes two sideways controllers (Joy-Con (L) as Player 1 and Joy-Con (R) as Player 2) with rotated sticks, sideways menu directions and 6-axis motion, SL and SR mapped to L and R, and separate left and right handle rumble, without Player 1 and Player 2 stealing focus from each other (#740, #745, #770)
- Italian texts: 24 texts of the launcher are reworded to read less literally, and the Switch 2 texts say engine like the rest. By @zatteogit and @Dino0005 (#687, #704)
Known issues
- Switch 2 games: only Donkey Kong Bananza was tried. @LNPANDY built and played it through the launcher on a Mac, an iPhone and an iPad, with no problems on the Mac and the iPhone and almost none on the iPad. The other Switch 2 games were not tried (#445)
- Game language of Switch 2 games: the list is read from the game's own files. It was checked on the RomFS of Donkey Kong Bananza and in tests, and nobody has seen it in the launcher on a device yet (#668, #693)
- First Play after the update: built games are rebuilt, because the shader chain moved (#689)
- Switch 2 covers: of the five Switch 2 games only Donkey Kong Bananza has a store cover. The other four show the engine's screenshot or the placeholder (#632)
- iPhone Duo side column is not run on a Duo: only in the Simulator. A native navigation bar instead of our own column is a follow-up (#622)
- Machine-translated texts wait for review: the new German, Swedish, French and Italian texts of the iPhone shell, the new failure row of the Mac app builds, the four texts of the Picture shape setting, and the popup texts of the stale shader notice (#631, #651, #689, #470)
- Mario Tennis Aces after the update: our own fix for its crash is gone, because upstream fixed the same crash another way for Mario Tennis Fever. We did not check Aces with it (#689)
Requires
- iOS or iPadOS 26 or later
- To build NVN games on a Mac: Xcode 27.2 and macOS 26.6 or later
中文
更新提示。 更新前构建的游戏会在第一次点 Play 时重新构建,因为引擎的着色器链又变了。这是正常的重建流程,无需任何操作。
修复
- 游戏封面不对:游戏库现在选基础游戏的封面,而不是 Switch 2 版、套装或试玩版。在有多个商店商品的 167 个游戏里,新规则为 164 个选对了游戏本身。旧版启动器保存的封面会检查一次并替换。有三个游戏仍不确定(Cadence of Hyrule、Dragon Marked for Death、Police Simulator)。图片里画着「Demo Available」之类宣传的横幅无法从数据里区分,可用「管理」里的「更换封面」换一张。由 @zatteogit 报告(#403、#632)
- iPhone 壳 App 的文字用你的语言:约 120 条文字在德语、瑞典语、法语和意大利语里是英文,另有三条错误信息在所有语言里都是英文。现在六种语言都有了。新增文字为机器翻译,等待审校(#631)
- 用 SideStore 安装共用 IPA:着色器文件很多的游戏会让 IPA 安装失败,因为一个 ZIP 最多只能有 65,535 个条目。现在着色器打包成一个文件,壳 App 在点 Play 时解包。在 #587 里报告,作者 @Silverhza(#593)
- iPhone Duo 旋转:壳 App 又会随设备旋转,并有桌面(半开)布局。手机上的游戏只能横屏。作者 @jonochocki(#642)
- 扩展名为大写的游戏:名为
GAME.NSP或.XCI的游戏文件现在能被找到并构建(#554、#650、#653) - 子文件夹里的游戏及同级更新或 DLC 子文件夹:当基础游戏放在
base/等子文件夹、更新包或 DLC 放在同级的update/或dlc/子文件夹时,游戏库扫描会向上查找父目录并将它们与游戏关联(#760、#762) - 在不支持原子替换的磁盘上构建 Mac App:在这类磁盘(例如 exFAT 或 Mac OS 扩展格式驱动器)上构建 App 时,现在改用移动方式替换旧 App,不再失败(#595、#651、#654、#742)
- Mac App 设置里的 Switch 2 游戏:有 NUP 更新的游戏会显示游戏语言一行(#619、#647)
- 没有控制数据的 Switch 2 游戏的游戏语言:从游戏文件夹或没有控制数据的 NUP 构建的游戏,例如 Donkey Kong Bananza,原来没有游戏语言一行。现在 Mac 和 iPhone、iPad 上都有。它显示游戏自己的文件里列出的语言,例如 Donkey Kong Bananza 的 15 种,文件里没有列出语言时显示全部语言并附一条说明。Donkey Kong Bananza 还有泰语和波兰语,目前还不能选(#668、#671、#693)
- iPhone 和 iPad 壳 App:退出提示说明 App 会关闭,由你再次打开(#620、#648)。游戏数据不再进入 iCloud 备份(#618、#649)。每个手柄输入事件按顺序传给游戏库,不再只保留两次视图更新之间的最后一个事件,按住方向键也不会再打断触控点按,作者 @Haseenesss(#660)
- 主机模式启动游戏时的鼠标指针:从点 Play 到游戏窗口出现期间,鼠标指针保持隐藏。作者 @Haseenesss(#380、#741)
- Windows:引擎恢复不再崩溃,缓存 SDK 里损坏的
.tbd桩文件会在每次探测前修复(#613)。安装 Python 后会直接接着创建虚拟环境并安装内置离线 wheel 包,iOS 交叉构建支持 1.2 引擎的tree_tar和单文件b-<chain>.img着色器库(#765、#772) - 过期着色器提示:着色器过期的游戏现在在 Mac 和 Qt 启动器里因两种原因(新的翻译器和改动过的游戏配置)都会弹出提示,不再依赖一个补丁里的说明。文字有六种语言的新版本,作者 @djdev0010,等待母语者审校。作者 @djdev0010(#320、#470)
- .NET 检查跟随构建实际使用的 dotnet:Mac 上
~/.dotnet里有旧的 .NET、Homebrew 里有新的 .NET 时,启动器显示 .NET 正常,构建却用了错误的那个。现在启动器和构建按同样的顺序选第一个带 SDK 10 的 dotnet。作者 @oliphantaaron(#342、seedds/nxnative#1233)
新增
- 引擎更新:引擎版本移到
777a5f6c618a,含上游的 105 个提交。按上游的说明,Mac 上增加 Mario Kart World、Mario Tennis Fever、Super Mario 3D All-Stars、Mario & Luigi: Brothership、Kirby Star Allies 和 DAVE THE DIVER。Mario Kart World 的地形只用约三分之一的 GPU 显存。Tears of the Kingdom 不再因 macOS 的游戏模式掉到 30 帧。新增的画面形状设置会在游戏的配置里有它时显示。我们没有玩过其中任何一个(#689) - 引擎更新到
7249ee9f95ed:引擎版本再前进上游的 28 个提交。按上游的说明,Mac 上增加 Star Fox(Switch 2,可玩到标题、序章和教程)、Yoshi and the Mysterious Book(Switch 2,60 帧)和 DRAGON QUEST BUILDERS 2(60 帧)。Fire Emblem Fortune's Weave 和 Mario & Luigi: Brothership 最高可以 120 帧运行。Mario Kart World 的天空面板和大部分亮点消失了。游戏的着色器库和编译缓存各是一个文件。我们没有玩过其中任何一个(#712、#761) - Windows 正式版(
NX2Apple-windows-x64.zip):Windows 启动器现随发布页提供,对齐 1.2.0 界面并内置引擎目录(玩家不需要 git,也不需要仓库检出),支持多核并行 NSO 重写、缓存管理面板,以及就地升级到 iPhoneOS 27.2 SDK(#615、#616、#765、#768、#771、#772) - iPhone 和 iPad 每个游戏框架自带独立宿主:共用 App 中的每个
DmGame<title ID>.framework链接各自的引擎宿主副本(loader: "FH"),DmShell在点 Play 时加载。后续引擎更新即使改变着色器链,也不再强制以该格式构建的旧游戏必须重新构建才能启动(#451、#756) - iPhone Duo 侧边栏:「控制器」和「设置」按钮以及返回键放在屏幕旁的窄列里,位置由系统保留的区域决定。没有这种区域的手机外观不变。只在模拟器里检查过(#622、#633)
- 正在准备游戏:点 Play 后,壳 App 在解包着色器并交给引擎期间显示「Preparing game…」,并在此期间忽略手柄。作者 @Silverhza(#652)
- 实验性构建器(默认关闭):「设置」>「构建工具」>「使用实验性构建器」会用 nxbuild 0.2.0(一个用 Rust 编写的构建工具)完成解包和着色器拆分。对已测试的游戏,输出文件与以前逐字节相同,这两步只需几秒到几十秒,而不是几分钟。它能读取 NSP、XCI、NSZ、解包文件夹和 Switch 2 软件包(.nup),读取 .nup 时不需要密钥。其他情况以及出现故障时,仍使用标准构建器。已用 Super Mario Bros. Wonder 检查(#749、#752、#766、#767)。.nup 路径用合成软件包检查过,并在 nxbuild 一侧用 Ocarina of Time 软件包按镜像摘要检查过,尚未在启动器中检查
- 将 Joy-Con 拆分为两个手柄(Mac):「控制器」面板新增「将 Joy-Con 拆分为两个手柄」开关(默认关闭)。开启后,蓝牙连接的一对 Joy-Con 会拆分为两个独立横握手柄(左 Joy-Con 为玩家 1、右 Joy-Con 为玩家 2),具备横握摇杆、横握菜单方向与六轴体感旋转、SL 与 SR 映射为 L 与 R,以及左右独立震动反馈,且玩家 1 与玩家 2 不会互抢焦点导致冻结(#740、#745、#770)
- 意大利语文字:启动器的 24 条文字改得不再那么直译,Switch 2 的文字也和其余部分一样用 engine。作者 @zatteogit 和 @Dino0005(#687、#704)
已知问题
- Switch 2 游戏:只试过 Donkey Kong Bananza。@LNPANDY 通过启动器构建,并在 Mac、iPhone 和 iPad 上玩过,Mac 和 iPhone 上没有发现问题,iPad 上基本没有问题。其他 Switch 2 游戏没有试过(#445)
- Switch 2 游戏的游戏语言:语言列表读自游戏自己的文件。已在 Donkey Kong Bananza 的 RomFS 和测试里检查过,还没有人在真机的启动器里看到过(#668、#693)
- 更新后第一次点 Play:已构建的游戏会重新构建,因为着色器链变了(#689)
- Switch 2 封面:五个 Switch 2 游戏里只有 Donkey Kong Bananza 有商店封面。其余四个显示引擎截图或占位图(#632)
- iPhone Duo 侧边栏没有在真机 Duo 上运行过:只在模拟器里检查过。用系统原生导航栏代替我们自己的列是后续工作(#622)
- 机器翻译的文字等待审校:iPhone 壳 App 新增的德语、瑞典语、法语和意大利语文字,Mac App 构建的新失败提示,「画面形状」设置的四条文字,以及过期着色器提示的弹窗文字(#631、#651、#689、#470)
- 更新后的 Mario Tennis Aces:我们自己针对它崩溃的修复已移除,因为上游用另一种方式修复了 Mario Tennis Fever 的同一个崩溃。我们没有用它检查过 Aces(#689)
系统要求
- iOS 或 iPadOS 26 或更高版本
- 在 Mac 上构建 NVN 游戏:Xcode 27.2 和 macOS 26.6 或更高版本
What's Changed
Fixes
- iOS shell: every text in all six languages by @v0lumehi in #631
- Library covers: the game's own product, not an edition or a bundle by @v0lumehi in #632
- Switch 2 games: the Mac app's settings show the game language row (patch 0072) by @v0lumehi in #647
- iOS shell: keep the game data out of the iCloud backup by @v0lumehi in #649
- Stage .NSP, .Xci and other upper case package names under a lowercase extension by @v0lumehi in #650
- Check the output disk's format before a Mac app build and say what to do by @v0lumehi in #651
- Engine: find game files with an upper case extension (patch 0073) by @v0lumehi in #653
- Engine: replace the Mac app by moves when the volume has no atomic swap (patch 0074) by @v0lumehi in #654
- Windows: fix the engine recovery's own crash, and repair cached .tbd stubs before every probe by @LNPANDY in #613
- Release notes v1.1.1: what merged since rc3 by @v0lumehi in #667
- Release notes v1.1.1: the shader notice popup, the Windows bundle and the Italian texts by @v0lumehi in #703
- The build runs the first dotnet with an SDK 10, and the .NET row follows it by @oliphantaaron in #342
- Release notes v1.1.1: the .NET check and the Italian engine wording by @v0lumehi in #706
- launcher: let Mac app builds on non-APFS volumes reach swap_by_moves by @LNPANDY in #743
- Engine pin to 7249ee9f (seedds/nxnative main, 28 commits) by @v0lumehi in #761
- Version 1.2.0: rename the release notes and set the app version by @v0lumehi in #759
Features
- iOS quit prompt: say the app closes and must be opened again by @v0lumehi in #648
- iOS shell: the Controllers and Settings chips in iPhone Duo's side column by @v0lumehi in #633
- Engine pin to 777a5f6c (seedds/nxnative main, 105 commits) by @v0lumehi in #689
- Experimental builder: hand a Switch 2 package (.nup) to nxbuild by @v0lumehi in #766
- Experimental builder: pin nxbuild 0.2.0 (Switch 2 packages, XCI, NSZ, dump folders) by @v0lumehi in #767
Patch queue and engine
- Mac: split a Joy-Con pair into two sideways controllers (#740) by @LNPANDY in #745
- Console mode: the pointer stays hidden while a game starts (#380) by @Haseenesss in #741
- iOS shell: let each game framework carry its own host (#451) by @LNPANDY in #756
Documentation
- Release notes v1.1.0: the layout editor changes of #623 by @v0lumehi in #625
- Changelog and notes v1.1.0: covers, shell texts, layout editor by @v0lumehi in #634
- Version 1.1.1: the version bump, the changelog rows and the release notes by @v0lumehi in #646
- docs: update Latest highlights in READMEs for v1.1.0 by @LNPANDY in #657
- Docs: the v1.1.1 notes follow what merged, and the Switch 2 test is written down by @LNPANDY in #699
- Docs: say that we are looking for one or two more developers by @v0lumehi in #751
- Changelog and release notes v1.2.0: fold 1.1.1 into 1.2.0 and add latest entries by @LNPANDY in #773
Other changes
- Fix SideStore installation of shared IPAs with large shader trees by @Silverhza in #593
- Show preparation feedback when launching shared iOS games by @Silverhza in #652
- launcher: read game languages from RomFS when launcher.json has no DM_LANG (#668) by @LNPANDY in #671
- launcher: narrow the all-languages row of a game with no language list to its RomFS (#668) by @LNPANDY in #693
- it: clearer wording for launcher notes and settings by @zatteogit in #687
- it: "engine", not "motore", in the Switch 2 texts by @Dino0005 in #704
- iOS shell: a controller's A no longer starts the game past the shell's focus by @Haseenesss in #660
- Library scan: climb out of a base subfolder when sibling subfolders hold updates or DLC by @LNPANDY in #762
- Console: fix split Joy-Con P1/P2 ping-pong freeze and rotate sideways menu input (#740) by @LNPANDY in #770
- Windows: chain venv setup on Python install and support 1.2 engine modules by @LNPANDY in #772
New Contributors
- @Silverhza made their first contribution in #593
- @sheepyd made their first contribution in #641
- @zatteogit made their first contribution in #687
- @djdev0010 made their first contribution in #470
- @oliphantaaron made their first contribution in #342
Full Changelog: v1.1.0...v1.2.0