From 70a0be9e79d9a94c71f592f42545bff82529a93a Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 6 Apr 2026 18:18:19 -0700 Subject: [PATCH] fix(ci): bundle FFmpeg dylibs in macOS app artifact (#53) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dylibbundler misses Homebrew's FFmpeg libraries, causing a launch crash: Library not loaded: libavformat.62.12.100.dylib Add a manual copy block for libavformat, libavcodec, libavutil, libswscale, and libswresample — same pattern already used for Vulkan and OpenSSL. Applied to both build.yml and release.yml. --- .github/workflows/build.yml | 17 +++++++++++++++++ .github/workflows/release.yml | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6576844b..98008636 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -235,6 +235,23 @@ jobs: exit 1 fi + # dylibbundler may miss Homebrew's FFmpeg libraries. + # Copy libavformat, libavcodec, libavutil, and libswscale. + FFMPEG_LIB_DIR="$(brew --prefix ffmpeg)/lib" + for lib in "${FFMPEG_LIB_DIR}"/libavformat*.dylib \ + "${FFMPEG_LIB_DIR}"/libavcodec*.dylib \ + "${FFMPEG_LIB_DIR}"/libavutil*.dylib \ + "${FFMPEG_LIB_DIR}"/libswscale*.dylib \ + "${FFMPEG_LIB_DIR}"/libswresample*.dylib; do + [ -e "${lib}" ] || continue + cp -f "${lib}" Wowee.app/Contents/Frameworks/ + done + + if ! ls Wowee.app/Contents/Frameworks/libavformat*.dylib >/dev/null 2>&1; then + echo "Missing FFmpeg libavformat dylib(s) in app bundle Frameworks/" >&2 + exit 1 + fi + # Info.plist cat > Wowee.app/Contents/Info.plist << 'EOF' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c0b9ec23..6d744e98 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -210,6 +210,23 @@ jobs: exit 1 fi + # dylibbundler may miss Homebrew's FFmpeg libraries. + # Copy libavformat, libavcodec, libavutil, and libswscale. + FFMPEG_LIB_DIR="$(brew --prefix ffmpeg)/lib" + for lib in "${FFMPEG_LIB_DIR}"/libavformat*.dylib \ + "${FFMPEG_LIB_DIR}"/libavcodec*.dylib \ + "${FFMPEG_LIB_DIR}"/libavutil*.dylib \ + "${FFMPEG_LIB_DIR}"/libswscale*.dylib \ + "${FFMPEG_LIB_DIR}"/libswresample*.dylib; do + [ -e "${lib}" ] || continue + cp -f "${lib}" Wowee.app/Contents/Frameworks/ + done + + if ! ls Wowee.app/Contents/Frameworks/libavformat*.dylib >/dev/null 2>&1; then + echo "Missing FFmpeg libavformat dylib(s) in app bundle Frameworks/" >&2 + exit 1 + fi + # Info.plist cat > Wowee.app/Contents/Info.plist << EOF