Skip to content
ggaoph-labPublic

About

macOS native SwiftUI tool for converting, compressing and merging Switch XCI/NSP files (inspired by Switch Army Knife)

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

SwitchSwitcher

一个 macOS 原生的 Nintendo Switch 游戏文件转换工具,用 SwiftUI 编写。灵感来自 Windows 上的 Switch Army Knife (SAK)。

功能

  • 万物转 NSP:导入 XCI / NSZ / XCZ / NSP;单文件直接转 NSP,多文件(本体 + 更新 + DLC)合并成一个 NSP
  • XCI ⇄ NSP 互转:也可以直接输入 NSZ / XCZ
  • NSZ / XCZ 压缩与解压:可调压缩等级,压缩后可校验
  • 合并本体 + 更新 + DLC:任意混入 XCI / NSP / XCZ / NSZ,自动解压并统一成 NSP 后再合并成 XCI 或 NSP;同一内容有多个版本时,自动保留最新版本
  • 检测更新:转换 / 合并 / 万物转 NSP 开始前会自动对照 titledb 检查;若缺少或落后会弹窗确认是否继续,更新包名称可复制。也可在侧边栏手动检测。不下载任何游戏内容

所有功能都支持把文件拖进窗口,处理时实时显示进度和日志。

系统要求

  • macOS 14 或更高版本(Apple Silicon / Intel 各自构建)
  • 你自己从 Switch 上导出的 prod.keys
  • 不需要安装系统 Python,也不需要首次联网装依赖

构建

需要安装 Xcode(SwiftUI 的宏插件只随 Xcode 提供,单独的命令行开发工具不够),构建机需要联网以下载内置 Python 与依赖。

./scripts/build_app.sh
./scripts/package_dmg.sh

脚本会自动下载可搬迁的 CPython、预装全部 Python 依赖,再拉取 NSC_BUILDER / nsz 源码并打上 patches/ 里的 macOS 兼容补丁,最后在 dist/ 下生成 SwitchSwitcher.app 与 DMG。

使用

  1. 打开 DMG,把 App 拖进「应用程序」(或直接打开)。
  2. 在「设置」里确认 prod.keys 路径,默认读取 ~/.switch/prod.keys。
  3. 选择功能,拖入文件,点击开始。输出默认在 ~/Downloads/SAK Output。

后端(Python + NSC_BUILDER + nsz)已打进 App。首次运行只会在 ~/Library/Application Support/SAKMac 写入一份可写的 NSC_BUILDER 副本(用于放置密钥),全程离线。

这个 App 只做了本机签名(ad-hoc)。拷到别的 Mac 上第一次打开时,需要右键选择「打开」。

致谢与借鉴的开源项目

本项目只是一个图形界面,真正处理文件的是下面这些开源项目,感谢它们的作者。

项目 作者 许可证 在本项目中的用途
Switch Army Knife (SAK) kempa (dezem) 未声明 功能设计和界面思路的参考。没有使用它的任何代码或二进制文件
NSC_BUILDER julesontheroad MIT XCI/NSP 互转、合并本体/更新/DLC 的后端(squirrel.py)
nsz Nico Bosshard、Blake Warner MIT NSZ/XCZ 压缩与解压的后端
NUT Blake Warner (blawar) GPL-3.0 NSC_BUILDER 和 nsz 中都有代码源自 NUT

后端在运行时用到的 Python 库:pycryptodome、zstandard、enlighten、tqdm、colorama、urllib3、Unidecode、requests、Beautiful Soup、chardet、pykakasi、Pillow、ujson、googletrans。

对 NSC_BUILDER 的修改

patches/nscb-macos.patch 对 NSC_BUILDER 做了两处修改,让它能在 macOS 和新版 Python 上运行:

  • 生成 cnmt.xml 时用的 Windows 路径分隔符 \ 改成了跨平台写法
  • Python 3.11 起,str(IntEnum) 返回数字而不是 Content.META 这种名称,导致合并时识别不到任何内容。补丁恢复了原来的字符串格式

免责声明

本项目不包含、也不会下载任何 Nintendo 密钥、固件或游戏文件。「检测更新」仅从公开 titledb 拉取标题/版本元数据,用于对照你本地已有的文件。请只处理你自己合法拥有的游戏。本项目与 Nintendo 无关。

许可证

本项目代码以 MIT 许可证发布。打包进 App 的第三方组件遵循各自的许可证。

About

macOS native SwiftUI tool for converting, compressing and merging Switch XCI/NSP files (inspired by Switch Army Knife)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages