#603
fix(macos): add macOS build support, runtime fixes, and test compatibility
Summary
This PR enables building, packaging, running, passing the full test suite, and CI workflows on macOS (Apple Silicon arm64).
Key Changes
-
Build Configuration & Linker Fixes:
cmake/dependencies/ffmpeg.cmake&tests/CMakeLists.txt: Added Apple frameworks (CoreFoundation,CoreMedia,CoreVideo,VideoToolbox,AudioToolbox) required for static FFmpeg linking on macOS.cmake/dependencies/macos.cmake&cmake/compile_definitions/macos.cmake: LinkedZLIB::ZLIBsoconfighttplog export/compression symbols resolve cleanly on macOS.cmake/targets/web.cmake: Declared Web UI build artifacts asOUTPUTrather than onlyBYPRODUCTSofadd_custom_commandto satisfy Unix Makefile generator dependencies.cmake/packaging/macos.cmake: Copied macOS assets (apps.json) to build assets directory unconditionally so they are bundled into local build trees and app packages.
-
macOS Platform & API Updates:
src/platform/macos/misc.mm: Updated Boost Process v2 working directory API fromv2::start_dirtov2::process_start_dirmatching Boost 1.89 specifications.src/platform/macos/publish.cpp: Passedplatf::SERVICE_TYPE.data()(const char*) toDNSServiceRegisterinstead ofstd::string_view.src/webrtc_stream.cpp: Declared and resetoutput_override_leaseunconditionally across all platforms.src/main.cpp: Added macOS app bundle resource directory resolution so relative bundle assets (../Resources/assets) resolve regardless of launch working directory.
-
Compiler & libc++ Compatibility:
src/steam_artwork.cpp: Casttime_since_epoch().count()tostd::intmax_tto resolve__int128narrowing errors in struct initialization under Apple Clang.src/steam_auto_sync_policy.cpp,src/provider_scan_protocol.cpp,src/lutris_integration.cpp: Castlast_write_time().time_since_epoch().count()tostd::int64_tto resolve ambiguousstd::to_stringoverloads with__int128.
-
Test Suite Compatibility:
tests/unit/test_pyrowave_udp_probe.cpp: Handled stranger socket binding gracefully on platforms like macOS/BSD where only127.0.0.1is pre-assigned tolo0.tests/unit/platform/windows/test_frame_limiter_vsync.py&tests/unit/platform/windows/test_virtual_capture_readiness.py: Added libc++ Windows ctype mask definitions when compiling mock-D_WIN32harnesses with Apple Clang.
-
CI Workflows & Automation:
.github/workflows/ci.yml: Addedbuild-macosjob alongside Windows and Arch Linux, ensuring every PR and tag build compiles, tests, and packages macOS..github/workflows/ci-macos.yml: Added automated test suite execution (ctest), added missing Homebrew dependencies (webp,jpeg-turbo,libpng), and added flexible defaults for workflow inputs..github/workflows/validate-macos.yml: Added on-demand workflow dispatch for running macOS validation and tests against any branch or commit.scripts/macos_build.sh: Added image dependencies (webp,jpeg-turbo,libpng) to manual build formula list.
Verification
- Successfully built
Vibepollo.appon macOS (arm64, Apple Clang, macOS 15+ SDK). - Ran
./build/Vibepollo.app/Contents/MacOS/Vibepollo --versionand--helpcleanly. - Successfully verified running daemon and Web UI service on
https://127.0.0.1:47990. ctest --test-dir build --output-on-failure: 100% passed (91 passed, 1 skipped: Windows-only Playnite test skipped on macOS).