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--jsonforplananddecomp(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_CLIenv, 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.shuses a scratch dir outside the repo: codesign fails on ~/Documents xattrs ("detritus").
Risks¶
napple buildflags 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/.