Repository navigation
Launcher & ShellHost: externalize oversized msl shaders, repack shared IPA, and batch-transfer games - #1216
Merged
Conversation
…d IPA, and batch-transfer games Strip msl shader trees exceeding 64 MiB from unsigned shared IPAs on both macOS and Windows/Qt without polluting the packed archive directory, record external-msl.json inside the staged framework plus external-msl-titles.json in the export folder, and merge externalized shaders on the fly during device or external drive transfers. Teach iOS ShellHost to verify complete external msl trees recursively and resolve DM_MSL_DIR from appFolder or dataURL. Add no-rebuild shared IPA repack with stale-engine preflight and multi-game selection sheets across macOS and Windows/Qt with all 10 localization catalogs.
LNPANDY
force-pushed
the
refactor/patch-slim-phase2
branch
from
November 12, 2026 19:45
18203cb to
07a0149
Compare
LNPANDY
force-pushed
the
feat/shared-ipa-repack-and-ext-msl
branch
from
November 12, 2026 19:45
0a36e25 to
0d9e398
Compare
LNPANDY
added a commit
that referenced
this pull request
Nov 12, 2026
4 of 6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Stacked on top of #1215 (
refactor/patch-slim-phase2). Delivers the refined, zero-engine-patch version of #1080 and #947 across macOS (NXCore/NXModel/NXLauncher), Windows/Qt (nspb_qt), and iOS (ShellHost):Non-polluting externalization of oversized
msl/shader trees (> 64 MiB, fixes Ocarina of Time (NUP) shared-app IPA: 7 GB msl shader image can't be installed by Sideloadly, AltServer or AltStore; romfs.id "cannot be read" after install #947):NX2Apple.ipa), any staged game framework whosemsl/directory exceeds64 MiBhas its stagedmsl/replaced withexternal-msl.json({"schema": 1, "external_msl": true}) and records its title ID in<shellRoot>/export/external-msl-titles.json, keeping the unsigned IPA well below sideloaders' 2 GB / 4 GB limits while leaving<shellRoot>/frameworks/DmGame<ID>.framework/msl/untouched in place.<archive>/<ID>/) remain clean without copyingmsl/into them, preventing direct Xcode-signed installs from duplicating bundled shaders onto the device.ShellInstall.transferSourceson macOS andDriveCopy.collect_transfer_fileson Windows/Qt), externalizedmsl/files are merged on the fly from the mirrored framework into<dest>/<ID>/msl/...for both device (devicectl) and external drive copies.ShellHost),ExternalShadersrecursively inspectsDocuments/games/<ID>/msland<dataURL>/msl(rejecting any incomplete.nxpart,.nxjoin,.part, or.partialentries while ignoring harmless hidden metadata), blocks launch with.needsGameDatawhen required external shaders are missing or half-transferred, and wiresEngineLaunchPlanto resolveDM_MSL_DIRfromappFolder/msl->dataURL/msl-> bundled frameworkmsl.No-rebuild shared IPA repack with stale-engine preflight:
ExportSteps.swift) and Windows/Qt (ui.py+win/shell_export.py:repack_built_shell) so users can repackNX2Apple.ipafrom already-built frameworks inshell.jsonwithout rebuilding any game.stale_frameworkspreflight checks on Windows/Qt matching macOS so repacking warns when cached frameworks come from an olderDMSH_CHAIN.Multi-game batch selection for device transfers and external drives:
SendSelectedSheeton macOS (for both Device queue transfers and sequential Drive or folder copies with live free-space and FAT32 4 GB preflight checks and cancellation support) andDriveSelectDialogon Windows/Qt, replacing the coarse all-or-nothing action with per-game checkboxes, Select All / Clear toggles, and accurate byte totals (including externalizedmsl/trees).de,en,es,fr,it,ja,ko,pt-br,sv,zh) andLocalizable.xcstrings.UI Comparison 1: macOS Launcher (
InstallCard&SendSelectedSheet)Simplified Chinese (
zh)English (
en)Japanese (
ja)UI Comparison 2: Windows / Qt Launcher (
InstallCard&DriveSelectDialog)InstallCard)InstallCard)DriveSelectDialog)zh)en)ja)Verification
patches/and.upstream-refremain completely untouched (0 engine patches added).EngineLaunchPlan/ExternalShadersrecursive.nxpartcheck) and Windows/Qt (ExternalMslAndBatchDriveCopyTest) prior to restoring fixes.python3 tools/l10n_shell_catalogs.py --check,frontend-iosShaderResourcesTests&EngineLaunchPlanTests,frontend-qtfull unittest suite (includingtest_localization_rules.pyandtest_win_shell_export.py), andfrontendfullswift testsuite (includingLauncherControlWidthTestsacross all 10 languages andSourceSizeTests).