Skip to content

feat(macOS): Restore macOS support - #841

Open
iFleey wants to merge 11 commits into
SteamClientHomebrew:nextfrom
iFleey:macos-support
Open

feat(macOS): Restore macOS support#841
iFleey wants to merge 11 commits into
SteamClientHomebrew:nextfrom
iFleey:macos-support

Conversation

@iFleey

@iFleey iFleey commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Hey again! The macOS support from #664 shipped in v3.0.0, but it quietly rotted on main. With no macOS CI to catch it, the async-ffi / sdk-flatten / pipe-CDP refactors reintroduced a handful of Linux-isms and left the CDP transport a #else stub — so on main today it doesn't build, and even patched locally the menus won't open. This PR gets it green again.

Roughly whats in here:

  • Build drift
    a few Linux-only assumptions (endian headers, inotify, SOCK_CLOEXEC, a Rust return type) crept back in without __APPLE__ branches. Restored them.

  • CDP transport
    this was the real "menus won't open" cause. After the move to a pipe-based transport, macOS was left a stub with its old WebSocket path deleted. macOS is different: the steam_osx wrapper enables CEF remote debugging over TCP, so I implemented the macOS path to talk CDP over a libcurl WebSocket (re-resolving the debugger URL each attempt so a steamwebhelper restart doesn't strand it). First clean run: menus open, Connected to SharedJSContext in 25 ms.

  • Shutdown crash
    remember the mutex lock failed: Invalid argument on shutdown from Feature/macOS support based on async-ffi branch #664? macOS only now runs to a clean exit(), which exposed one root cause: a static destruction-order issue where teardown locked singletons __cxa_finalize had already destroyed. Leaking them keeps the sync primitives alive past teardown. Shared code, so it helps every platform.

  • Scripts
    scripts/macos/* paths drifted after the layout changes; fixed those too.

I also built a macOS CI job + bundle-based install on a branch stacked on this one — macos-dist. Since it's based on this PR I'm holding off on a second PR, but it's fully green if you want to peek: Github Actions, build-macos passes; the only red job is Windows code-signing, which needs a repo secret my fork doesn't have.

Tested Devices

  • MacBook Air (M4, Apple Silicon)

I only have Apple Silicon on hand this round,so it's arm64-only and I couldn't test x86_64. Steam runs arm64 natively onApple Silicon so this is the right slice here.

Thanks for taking a look!

CleanShot 2026-07-12 at 15 54 56 CleanShot 2026-07-12 at 15 55 07 CleanShot 2026-07-12 at 15 55 28 CleanShot 2026-07-12 at 15 55 33 CleanShot 2026-07-12 at 15 55 45

BTW, actually the Extendium plugin does not support the Mac platform.

[45:48.483] EXTENDIUM ========================================
[45:48.483] EXTENDIUM [install] Starting extension installation...
[45:48.483] EXTENDIUM ========================================
[45:48.483] EXTENDIUM [install] Extension directory: ~/Library/Application Support/Millennium/plugins/extendium/fake-header-extension
[45:48.483] EXTENDIUM [install] Reading extension-keys.json: ~/Library/Application Support/Millennium/plugins/extendium/fake-header-extension/extension-keys.json
[45:48.483] EXTENDIUM [install] Extension ID: ilceigfjdfkplpmafppofppbifclfdop
[45:48.484] EXTENDIUM [install] Reading manifest.json: ~/Library/Application Support/Millennium/plugins/extendium/fake-header-extension/manifest.json
[45:48.484] EXTENDIUM [install] Extension: Extendium - Fake Header Extension v1.0.0
[45:48.484] EXTENDIUM [install] Steam path: ~/Library/Application Support/Steam/Steam.AppBundle/Steam/Contents/MacOS
[45:48.484] EXTENDIUM [install] Platform: Linux
[45:48.484] EXTENDIUM [install] Steam config directory: ~/.steam/steam/config/htmlcache/Default
[45:48.484] EXTENDIUM [install] Steam config directory does not exist: ~/.steam/steam/config/htmlcache/Default

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant