Skip to content

Napple Studio (SwiftUI)

Objective

Compact macOS UI (goals 10-12): keys/firmware sets, drop zone, plan with selectable updates/DLC, build with progress, compat banner, reveal/install, legal acknowledgement.

Files

  • studio/ Swift package: NappleStudioCore (KeysetManager, Plan, Compat, NappleCLI), NappleStudio (app), tests, build_app.sh.
  • crates/napple-cli/src/main.rs: additive --json for plan and decomp (hand-written JSON, text output unchanged).
  • docs/studio-protocol.md: PROGRESS/RESULT protocol and build invocation.

Logic and decisions

  • Keysets in ~/Library/Application Support/Napple/keysets/<name>/ (dirs 0700, files 0600). Validation parses key names only. Firmware valid if a .zip with .nca entries or a folder with .nca.
  • CLI wrapper runs a subprocess, no shell; NAPPLE_CLI env, bundled Resources/napple, or repo target/release.
  • Size cost per item = pack size (all included layers are embedded).
  • Compat matrix read tolerantly from compat/matrix.json (array, games, or dict by title id); warning when below Partial.
  • Debug args: --debug-drop <path>, --debug-keys <prod.keys>, --support-dir <dir>, --debug-ack.
  • build_app.sh uses a scratch dir outside the repo: codesign fails on ~/Documents xattrs ("detritus").

Risks

  • napple build flags are assumed (documented in protocol); adjust when the Rust side lands.
  • Matrix path is hardcoded to the repo; unknown status shows the warning banner.
  • Install overwrites /Applications copy (old one goes to Trash). Device install stubbed (V2). Firmware not yet consumed by the CLI.

Tests

swift test --scratch-path <outside repo>: 10 passing (keysets, plan JSON, compat, fake CLI, progress parser). cargo test green. Launched the .app with the LA NSP: plan shown (6.27 GB), screenshot in work/studio-shots/.