summaryrefslogtreecommitdiff
path: root/src/port
diff options
context:
space:
mode:
authorquarrel07 <178681861+quarrel07@users.noreply.github.com>2026-08-01 18:35:51 -0700
committerGitHub <noreply@github.com>2026-08-01 19:35:51 -0600
commitaa6c9c10caf3630ca37cb45bafc0485b76605445 (patch)
treef2dacffad35e2d852e1b6b8775e37c456c5f89c9 /src/port
parent08dca164d4604002be9c98211bb6de0a196738bf (diff)
macOS: package the game as a proper SpaghettiKart.app bundle (#724)
* macOS: package the game as a proper SpaghettiKart.app bundle Turns the bare Spaghettify executable into a self-contained SpaghettiKart.app: - cmake/macos/apple_bundle.cmake: bundle metadata (using the existing Info.plist, which already described a bundle), app icon, runtime resources (config.yml, yamls, meta, spaghetti.o2r) into Contents/Resources, dylib relinking for local Homebrew builds (no-op with static vcpkg deps), and ad-hoc codesigning so the app launches without 'damaged app' warnings - App icon: on Xcode 26+ the Icon Composer package (SpaghettiKartIcon.icon, drawn from the existing HM ship-kart icon.png art) compiles with actool into an Assets.car, giving the native Liquid Glass look on macOS 26+, plus a flattened icns for older systems; older Xcode falls back to the previous sips/iconutil flat icon. Supersedes the CreateOSXIcons target. - Game.cpp: default SHIP_HOME to ~/Library/Application Support/SpaghettiKart on macOS so first-run extraction, saves, config, and mods land there instead of scattering into the user's home folder; a user-set SHIP_HOME still wins - Info.plist: NSHighResolutionCapable for proper Retina rendering - CI: mac jobs now ship the .app (ditto zip so the executable bit survives artifact upload) - the yamls-next-to-exe copy is scoped to non-Darwin; on macOS those files live in Contents/Resources instead * macOS: ship prebuilt icon artifacts instead of compiling them at build time Commits the compiled Assets.car (Liquid Glass icon for macOS 26+) and the flattened SpaghettiKart.icns, both built from the in-repo Icon Composer package. The build now just copies them into the bundle, which removes the actool machinery and the Xcode 26 requirement entirely: every build on any machine, including CI, gets the real icon. Also adds a staleness guard: the artifacts carry a hash stamp of the icon.png they were made from, and if icon.png ever changes without them being regenerated, the build automatically generates a flat icns from the current icon.png instead, so updating the logo never requires any macOS work and an outdated icon can never ship. Regeneration steps are documented in apple_bundle.cmake. * Rename the icon layer to ship-kart-layer.png Group 2.png was the design tool's default layer name; name it for what it is. Verified the Icon Composer package still compiles with actool after the rename; the committed Assets.car is unaffected (compiled, self-contained). --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
Diffstat (limited to 'src/port')
-rw-r--r--src/port/Game.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/port/Game.cpp b/src/port/Game.cpp
index 9804fe324..c1afe80b1 100644
--- a/src/port/Game.cpp
+++ b/src/port/Game.cpp
@@ -1035,6 +1035,14 @@ extern "C"
CFPreferencesSetAppValue(CFSTR("ApplePressAndHoldEnabled"), kCFBooleanFalse, kCFPreferencesCurrentApplication);
CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
#endif
+#if defined(__APPLE__) && !defined(PLATFORM_IOS)
+ // Default the writable data folder to ~/Library/Application Support/SpaghettiKart
+ // (libultraship expands the ~ and creates the directory). Without this, a Finder
+ // launch has no SHIP_HOME and libultraship falls back to the current working
+ // directory, scattering config/saves/mods into the user's home folder.
+ // overwrite=0 keeps any SHIP_HOME the user already set.
+ setenv("SHIP_HOME", "~/Library/Application Support/SpaghettiKart", 0);
+#endif
// load_wasm();
GameEngine::Create();
audio_init();