3.3.0 - Matching dSYMs ride in the xcframeworks
Same n8.1.2 FFmpeg, the same dav1d, zimg and libzvbi, the same configure flags and the same decoder set as 3.2.1. What changed is what the release carries: every slice a shipped app can embed now brings its own dSYM, so a crash inside FFmpeg symbolicates.
What it fixes
An App Store Connect upload of an app that embeds these frameworks answered with, once per framework:
The archive did not include a dSYM for the Libavcodec.framework with the UUIDs [DD90B4B5-298C-335B-8C61-46A0A900D74D].
The libraries were compiled --disable-debug and installed --enable-stripping, so the debug information never existed and no dSYM could be produced from them. Every frame of a crash inside FFmpeg stayed an address. Reported as #4.
What ships now
- All four builds (FFmpeg, dav1d, zimg, libzvbi) compile with
-gline-tables-only: function names, file and line, and inlined frames, which is what a crash report resolves against, without the type information that makes up the bulk of full-gDWARF. Generated code is unchanged, and so is the optimization level. zimg had been taking autoconf's default-g -O2all along; both halves are now set explicitly rather than inherited. - FFmpeg's install-time stripping is off, so the linker's debug map survives into
build/thinwheredsymutilreads it.build.shlipos the per-architecture DWARF into one dSYM per framework and strips the shipped binary exactly as before.lipo,install_name_tool,strip -xandcodesignall leaveLC_UUIDalone, which is what keeps the pair valid. xcodebuild -create-xcframework -debug-symbolsputs the dSYM into the slice. Xcode copies it into.xcarchive/dSYMswhen it embeds the framework, so adopters do nothing at all.
Verified
A throwaway tvOS app embedding AetherLibavcodec.xcframework, archived with plain xcodebuild archive:
DsymProbe.xcarchive/dSYMs/
AetherLibavcodec.framework.dSYM
DsymProbe.app.dSYM
The archived framework binary and the archived dSYM carry the same UUID, and dwarfdump --lookup on the dSYM resolves an address to avcodec_open2 in avcodec.c:145.
DebugSymbolsTests pins both halves against the shipped xcframeworks: every non-simulator slice has a DebugSymbolsPath whose dSYM exists, and the dSYM's UUIDs match the binary's, architecture by architecture. Against 3.2.1's binaries the suite records 37 issues, which is what it is for.
Simulator slices ship without dSYMs
Deliberate: a simulator slice reaches neither an App Store archive nor a user's crash report, and its symbols would put another 45 MB of binaries into every clone of this package. ./build.sh writes them to build/dsyms for local use, and the test suite pins their absence so it stays a decision.
Releases before 3.3.0
They have no dSYMs and none can be made for them. The debug information was never compiled in, and a rebuild produces different UUIDs, which symbolicate nothing for binaries already distributed. Symbols and binaries are a pair per build.