Thanks for maintaining these builds — the SPM distribution has saved us a lot of work.
One gap that costs us on production crash triage: the released XCFramework contains no debug
symbols, so WebRTC frames in real crash reports cannot be symbolicated.
What we observe
Using WebRTC 125.0.0 via SPM in SweChat, a production iOS messaging app
with voice and video calling:
-
No .dSYM (or .bcsymbolmap) is present in WebRTC-M*.xcframework.zip, nor anywhere in the
SPM artifact directory that Xcode unpacks it to.
-
The shipped ios-arm64 binary is stripped. It exposes 194 symbols, and they are all Objective-C
class symbols (_OBJC_CLASS_$_RTCAudioSession, _OBJC_CLASS_$_RTCCVPixelBuffer, …) — no C++
function symbols, which is where crashes in the media/ICE internals actually land.
-
Consequently atos against the shipped binary returns raw addresses only:
atos -o WebRTC.framework/WebRTC -arch arm64 -l 0x100000000 0x1000e1164
→ 0x000e1164 (in WebRTC) + 596
Since bitcode was removed in M103, Apple no longer recompiles uploaded binaries, so App Store
Connect has no dSYM to hand back either. That makes the build-time dSYM the only copy that can ever
exist — and it is currently discarded.
Where it comes from
scripts/build.sh, in COMMON_GN_ARGS:
enable_dsyms=false
enable_stripping=true
symbol_level is not set, so it takes the default for the is_debug=false configuration.
The request
Set enable_dsyms=true, and publish the resulting .dSYM bundles as a separate release asset
(e.g. WebRTC-M151.dSYMs.zip) rather than inside the framework zip.
A couple of notes that may make this cheaper than it sounds:
enable_stripping=true can stay exactly as it is. A stripped binary plus a separate dSYM is
the standard Apple release configuration — it is how Chrome itself ships — so the artifact that
everyone links against would be byte-for-byte unchanged in size and content.
- Shipping the symbols as a separate asset means only the people who need them pay the download
cost, and the Package.swift checksum for the framework zip is unaffected.
Once published, symbolication works with no further tooling: Spotlight indexes dSYMs by UUID
(com_apple_xcode_dsym_uuids), so Xcode, atos and symbolicatecrash locate them automatically.
Happy to test a pre-release build against real crash reports if that would help.
Thanks for maintaining these builds — the SPM distribution has saved us a lot of work.
One gap that costs us on production crash triage: the released XCFramework contains no debug
symbols, so WebRTC frames in real crash reports cannot be symbolicated.
What we observe
Using
WebRTC125.0.0 via SPM in SweChat, a production iOS messaging appwith voice and video calling:
No
.dSYM(or.bcsymbolmap) is present inWebRTC-M*.xcframework.zip, nor anywhere in theSPM artifact directory that Xcode unpacks it to.
The shipped
ios-arm64binary is stripped. It exposes 194 symbols, and they are all Objective-Cclass symbols (
_OBJC_CLASS_$_RTCAudioSession,_OBJC_CLASS_$_RTCCVPixelBuffer, …) — no C++function symbols, which is where crashes in the media/ICE internals actually land.
Consequently
atosagainst the shipped binary returns raw addresses only:Since bitcode was removed in M103, Apple no longer recompiles uploaded binaries, so App Store
Connect has no dSYM to hand back either. That makes the build-time dSYM the only copy that can ever
exist — and it is currently discarded.
Where it comes from
scripts/build.sh, inCOMMON_GN_ARGS:symbol_levelis not set, so it takes the default for theis_debug=falseconfiguration.The request
Set
enable_dsyms=true, and publish the resulting.dSYMbundles as a separate release asset(e.g.
WebRTC-M151.dSYMs.zip) rather than inside the framework zip.A couple of notes that may make this cheaper than it sounds:
enable_stripping=truecan stay exactly as it is. A stripped binary plus a separate dSYM isthe standard Apple release configuration — it is how Chrome itself ships — so the artifact that
everyone links against would be byte-for-byte unchanged in size and content.
cost, and the
Package.swiftchecksum for the framework zip is unaffected.Once published, symbolication works with no further tooling: Spotlight indexes dSYMs by UUID
(
com_apple_xcode_dsym_uuids), so Xcode,atosandsymbolicatecrashlocate them automatically.Happy to test a pre-release build against real crash reports if that would help.