Skip to content

6.19.3 - A demo bundle that carries the libraries it loads

Choose a tag to compare

@superuser404notfound superuser404notfound released this 10 Aug 10:03
· 814 commits to main since this release

Packaging only. No library change: consumers pinning 6.19.2 get byte-identical engine code, and this release exists so CI rebuilds the macOS demo .dmg with the fix below.

The demo could not launch, and the guard was a comment

The 6.5.6 demo aborted immediately on a reporter's machine:

Termination Reason:    Namespace DYLD, Code 1 Library missing
Library not loaded: @rpath/Libavcodec.framework/Versions/A/Libavcodec

Not machine specific and not architecture specific. The bundle shipped without any of the frameworks its binary loads, so no copy of that build could start.

FFmpeg, dav1d and the rest used to be linked statically, and Examples/DemoPlayerMac/Scripts/build-dmg.sh recorded that as a note ending "if FFmpegBuild ever switches to dynamic frameworks, this is where they'd be copied to". FFmpegBuild since did switch, because LGPL wants the libraries relinkable. A comment cannot notice that happening, so the bundle kept being assembled as though nothing had changed while the binary grew nine @rpath load commands.

What ships

build-dmg.sh copies the frameworks into Contents/Frameworks, adds the @executable_path/../Frameworks rpath the binary does not carry, and signs nested code inside out, because signing the .app seals whatever Frameworks/ already holds and an unsigned framework there fails both --strict verification and notarization.

The stale note is replaced by a check that fails the build when any @rpath dependency is missing from the bundle. Verified against a universal release build: eighteen unresolved dependencies before embedding, nine frameworks across two architecture slices, and none after, with the resulting bundle launching instead of aborting in dyld.

This only ever affected the demo. AetherPlayer and Sodalite build through xcodebuild archive, which embeds and signs SwiftPM frameworks on its own.

Reported through AetherPlayer#2, where the crash report carried the full diagnosis.

Dependencies

Unchanged from 6.19.2: FFmpegBuild 2.4.2, FFmpeg n8.1.2, four local patches.