SNative Studio es una aplicación nativa de macOS, desarrollada con SwiftUI por AbadX. La versión 0.1.0 ofrece una interfaz para generar una IPA sin firmar en el propio Mac. La aplicación instalada usa el motor incluido en Contents/Resources/Engine. Un checkout de nxnative solo se usa si esa carpeta no existe.
No es una distribución oficial de nxnative. No está afiliada, patrocinada ni respaldada por Nintendo ni por quienes desarrollan nxnative. No incluye juegos, NSP ni prod.keys. El aviso completo está en docs/AVISO-LEGAL.md.
La publicación actual es una versión de pruebas, no una distribución general. El instalador adjunto al release de GitHub está sin firma y sin notarización. macOS puede advertir o impedir abrirlo. La firma y la notarización quedan aplazadas para una versión futura.
- El proyecto es independiente. No hay afiliación oficial con Nintendo ni con quienes desarrollan nxnative.
- No distribuye juegos, archivos NSP ni claves. El usuario solo debe usar contenido que esté autorizado a utilizar.
- Abrir la aplicación requiere macOS 14 o posterior.
- Generar una IPA está orientado a Apple Silicon. Ese flujo no se ha probado en un Mac Intel.
- No se garantiza compatibilidad con todos los Mac, juegos o versiones de las herramientas.
El instalador publicado es experimental, sin firma y sin notarización. No es un paquete listo para distribución general. macOS puede advertir o impedir abrirlo.
- Consulta los requisitos. Abrir la aplicación y generar una IPA no piden lo mismo.
- Descarga el instalador de la versión experimental e instálalo. La guía completa está en docs/INSTALACION.md.
- Abre SNative Studio y espera a que la pantalla Herramientas termine la comprobación. Esa pantalla no instala nada.
- Crea un proyecto con el NSP base,
prod.keysy una carpeta de salida. La actualización es opcional. El contenido deprod.keysno se guarda. - Comprueba que no falte ningún requisito obligatorio. Si falta uno, Generar IPA permanece desactivado. Las herramientas y sus comprobaciones están en docs/DEPENDENCIAS.md.
- Pulsa Generar IPA. La pantalla Compilación muestra las fases y el registro, y permite copiarlo. Si algo falla, sigue docs/SOLUCION-DE-PROBLEMAS.md.
SNative Studio termina cuando existe el archivo IPA. No lo firma ni lo instala.
La aplicación, en el código de esta versión:
- Guarda proyectos con la ruta del NSP base, la actualización si se indica, la ruta de
prod.keys, la carpeta de salida y, si se escribe, el nombre de la IPA. - No guarda el contenido de
prod.keys. - Usa el motor integrado en
Contents/Resources/Enginecuando esa copia está completa. Un checkout externo solo se usa si esa carpeta no existe. - Ejecuta
scripts/build_ipa_from_nsp.pyy muestra las fases, el registro y la cancelación. - Comprueba herramientas y módulos en el equipo, sin instalarlos. Si falta uno obligatorio, Generar IPA permanece desactivado.
- Recuerda los proyectos en este Mac. Esa lista no forma parte del repositorio.
Generar una IPA, firmarla, instalarla y ejecutar el juego son cuatro pasos distintos. Esta versión solo hace el primero. No firma ni instala la IPA, no descarga juegos ni herramientas y no incluye archivos de juego.
El usuario debe disponer legítimamente de sus propios NSP y de su archivo prod.keys. Esos archivos no se publican con SNative Studio.
El README actual de nxnative enumera estos títulos como probados en un iPhone y jugables:
- Super Mario Bros. Wonder
- Fire Emblem Engage
- Metroid Dread
- 13 Sentinels: Aegis Rim
- Super Mario 3D World + Bowser's Fury
- The Legend of Zelda: Breath of the Wild
- The Legend of Zelda: Link's Awakening
- Super Mario Odyssey
- Hades
- Hyrule Warriors: Age of Calamity
- Fire Emblem: Three Houses
- Super Mario Galaxy
- The Legend of Zelda: Tears of the Kingdom
SNative Studio utiliza ese motor. El comportamiento puede variar según el dispositivo, la versión del juego y sus dependencias. Generar una IPA no garantiza que un juego arranque o sea jugable.
El mismo README deja Monster Hunter Rise en preparación: indica que corre en un iPhone a 30 fps desde la creación del personaje hasta el inicio en la aldea de Kamura. No lo incluye en la lista de títulos ya probados y jugables.
Los demás juegos no están soportados todavía. El motor puede intentar empaquetar una IPA, pero puede no arrancar. Esas pruebas son experimentales y el resultado no está garantizado.
- macOS 14 o posterior. Es el destino de despliegue del proyecto.
- Apple Silicon es la plataforma de referencia para generar una IPA. Ese flujo no se ha probado en un Mac Intel.
- Hacen falta Xcode, el SDK de iOS, Metal y el resto de dependencias obligatorias. Están en docs/REQUISITOS.md y docs/DEPENDENCIAS.md.
El README actual de nxnative pide iOS o iPadOS 26 o posterior, en un iPhone 15 Pro o posterior con chip A17 Pro o posterior, o en un iPad con chip M1 o posterior. El motivo que da ese proyecto es que las texturas de los juegos van comprimidas en formato BC y los iPhone anteriores no pueden leerlas.
Esos son requisitos del dispositivo donde se ejecuta el juego, no del Mac donde se abre SNative Studio. Esta aplicación no ha comprobado esa lista modelo por modelo.
- docs/REQUISITOS.md: abrir la aplicación y generar una IPA.
- docs/INSTALACION.md: instalación, configuración y construcción.
- docs/DEPENDENCIAS.md: herramientas, versiones vistas y comprobación.
- docs/EQUIPO-DE-PRUEBAS.md: qué se ha ejecutado y qué no.
- docs/SOLUCION-DE-PROBLEMAS.md: fallos ya vistos.
- docs/LICENCIAS-Y-CREDITOS.md: atribuciones. El inventario de empaquetado sigue en docs/dependencias-empaquetado.md.
- Destino de despliegue: macOS 14.
- Swift 6.
- Un Xcode capaz de abrir este proyecto. El proyecto no declara una versión mínima de Xcode.
Esta copia no se ha compilado en otro equipo. Abrir el proyecto aquí no demuestra que la compilación funcione en cualquier Mac.
- Abre
SNative Studio.xcodeproj. - Elige el esquema compartido «SNative Studio».
- La configuración Debug sirve para ejecutar desde Xcode. Release es la que entra en un paquete local.
Desde la raíz del repositorio, las pruebas y Release usan carpetas de derivados fuera del proyecto:
xcodebuild test -project "SNative Studio.xcodeproj" -scheme "SNative Studio" -configuration Debug -destination "platform=macOS"
xcodebuild -project "SNative Studio.xcodeproj" -scheme "SNative Studio" -configuration Release -destination "platform=macOS" buildLa fase de copia del motor corre en ambas configuraciones. scripts/build_local_pkg.sh deja un candidato local de Release sin firmar. No sustituye los paquetes de prueba anteriores y no está listo para distribución pública. La diferencia entre prueba local, candidato y paquete notarizado está en docs/INSTALACION.md.
- Abre SNative Studio y espera a que la pantalla Herramientas termine la comprobación.
- Crea un proyecto con el NSP base, el
prod.keysy una carpeta de salida escribible. La actualización es opcional. - Pulsa Generar IPA. Si la IPA prevista ya existe, la aplicación pide confirmación antes de sustituirla.
La aplicación lanza el script del motor con el NSP, -k para prod.keys, -o para la IPA y --progress lines. El directorio de trabajo es la copia escribible del motor, no el interior de SNative Studio.app. El registro de esa ejecución aparece en la pantalla Compilación y se puede copiar. No se guarda como archivo de la aplicación.
La IPA resultante no está firmada. Copiarla a un iPhone, confiar en un desarrollador o abrir el juego son pasos posteriores y no los hace SNative Studio.
| Qué | Dónde |
|---|---|
| Proyectos de la aplicación | ~/Library/Application Support/com.abadx.SNativeStudio/projects.json |
| Copia escribible del motor | ~/Library/Application Support/SNative Studio/engine-work/<identificador del proyecto>/source |
obj y bin de MSBuild |
.../engine-work/<identificador>/msbuild/obj y msbuild/bin |
Temporales del proceso y DOTNET_CLI_HOME |
.../engine-work/<identificador>/tmp y ~/Library/Application Support/SNative Studio/dotnet-home |
| Caché NuGet de la aplicación | ~/Library/Application Support/SNative Studio/nuget |
| Juego extraído, sombreadores y registros del script | <carpeta del NSP>/<identificador del título>_build/, en extract/, shader/ y logs/ |
| IPA | La carpeta de salida del proyecto |
Directory.Build.props se escribe solo en la raíz de source/ antes de que MSBuild evalúe **/*.cs. Añade obj/**;bin/** a DefaultItemExcludes. No desactiva la generación de atributos del ensamblado. Así nx_extract no vuelve a compilar dos veces los atributos y no escribe dentro del bundle.
Un checkout externo no se copia y no recibe ese archivo. El checkout original de nxnative no se modifica.
SNative Studio termina cuando el archivo IPA existe. Para instalarlo en un iPhone autorizado hace falta un paso aparte:
- Extraer
Payload/*.app. - Firmar esa copia con un certificado Apple Development y un perfil de aprovisionamiento que ya incluya el dispositivo. El archivo IPA original puede quedar sin firmar.
- Instalar el
.appfirmado con las herramientas de Xcode, por ejemploxcrun devicectl device install app. - Si iOS lo pide, confiar en el desarrollador en Ajustes.
Esa firma no es la de la aplicación de macOS ni una notarización. Ejecutar el juego es otro paso: abrirlo en el dispositivo. Los diagnósticos del juego, si los hay, quedan en Documents/log.txt de esa aplicación, no en el registro de SNative Studio.
En este Mac se generó una IPA de Super Mario Bros. Wonder, se firmó una copia temporal con un perfil de desarrollo ya existente y se instaló en un iPhone con modo de desarrollador. El juego llegó al menú y se jugaron dos mundos. Eso no demuestra un Mac limpio, una firma de distribución ni que el paquete público esté listo.
- La pantalla Compilación muestra la salida del script. El botón de copiar lleva ese texto al portapapeles. No hay un
log.txtde SNative Studio. - El script escribe cada paso en
<carpeta del NSP>/<identificador>_build/logs/. El denx_extracteslogs/nx_extract_build.log. - Si el error es de MSBuild, los archivos generados están en
msbuild/objde la copia de trabajo, no enSNative Studio.app. - Si el juego ya instalado falla, el dato útil es
Documents/log.txtdentro de la aplicación del dispositivo.
En este equipo la suite terminó con 67 pruebas aprobadas y 0 fallos, y la configuración Release compiló. La última pasada repitió ese resultado. Una compilación aislada de nx_extract, con las mismas rutas que usa la aplicación, terminó con código 0 y sin el error de atributos duplicados. La generación, la firma de desarrollo y la partida local descritas arriba también se completaron.
Siguen sin hacerse: la restauración de LibHac sin red, una IPA en un Mac limpio, la firma Developer ID, la notarización y una instalación del paquete en otro equipo. El ejecutable Release de SNative Studio contiene arm64 y x86_64. dmsh_xlate es solo arm64, y en este Mac las herramientas externas medidas también lo son. No se ha ejecutado el flujo en un Mac Intel, así que la primera distribución prevista es Apple Silicon. El detalle está en docs/dependencias-empaquetado.md.
La aplicación compilada incluye una copia del motor en Contents/Resources/Engine. nxnative sigue siendo un proyecto aparte, con su propia licencia MIT y con las licencias de sus componentes de terceros. El README de ese proyecto publica el repositorio https://github.com/seedds/nxnative.
Esa copia tiene que contener a la vez:
scripts/build_ipa_from_nsp.pydm/tools/nx_extract/Program.csdm/gfx/tools/dmsh_xlate_bin/dmsh_xlate
Si Contents/Resources/Engine existe y le falta uno de esos tres archivos, la aplicación se detiene y no usa otro checkout. Si esa carpeta no existe, la búsqueda sube desde la ruta del código fuente usada al compilar, el paquete, el ejecutable, el directorio de trabajo y el primer argumento del proceso. No hay un ajuste de la interfaz para elegir otra carpeta. Un motor dentro de .app/Contents/ se copia a Application Support antes de compilar, para no escribir en el bundle.
La pantalla de herramientas busca estos ejecutables: xcodebuild, swift, brew, xcodegen, zstd, spirv-cross, dotnet y python3.
Antes de lanzar el script, la compilación exige python3, xcodebuild, xcodegen, dotnet con SDK 10, zstd, spirv-cross, zip y make. También comprueba que Python pueda importar lz4.block, capstone y fontTools, y que exista el paquete local libhac.0.19.0.nupkg en Engine/local-nuget o en ~/.nuget/packages. Si falta algo obligatorio, se detiene. No lo instala. Swift y Homebrew se muestran y no bloquean.
El inventario, las licencias pendientes y lo que falta para un instalador público están en docs/dependencias-empaquetado.md y en SNative Studio/Resources/Notices/PENDIENTES.md.
El archivo LICENSE es la licencia MIT, con copyright de AbadX en 2026. Cubre el código y los archivos propios de SNative Studio que AbadX tiene derecho a licenciar.
No cubre nxnative, sus herramientas ni los componentes de terceros que ese proyecto incorpora. Tampoco cubre los marcos de Apple ni los ejecutables externos que SNative Studio se limita a buscar en el equipo. Cada uno conserva sus propias condiciones. Los créditos están en docs/LICENCIAS-Y-CREDITOS.md. El texto de LibHac 0.19.0 sigue sin localizarse.
El canal público para una solicitud legítima de atribución, corrección o retirada es https://github.com/AbadXDev/SNative-Studio. No hay un correo privado confirmado.






