You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This issue was created by an agent based on a manual, interactive investigation with me. The observations and verification limits from that session are documented below.
SDK version reported by the analysis: iphoneos26.5.
Main executable UUID: EEA6DC52-7D98-34F8-8EFC-BD6261FF8659.
Launchpad source inspected locally: c346d93c13d13f8c25ad740bd47d19481f25a662. This is the inspected checkout, not a verified deployment SHA for the affected analysis.
How we discovered this
We were investigating the app-size savings from sentry-cocoa#9003, which moves a preallocated binary-image cache from file-backed data into zero-fill storage. The Preprod comparison reports a 294.9 KB installed-size reduction with essentially unchanged download size.
While inspecting the remaining Sentry footprint, I noticed _sentrycrashstring_addressToString.hex occupying 78.67 KB in the treemap. Tracing that entry back to the SDK source and Launchpad's symbol-size calculation revealed an attribution problem, rather than another large SDK allocation.
Steps to Reproduce
Open artifact 799801 with access to the sentry-sdks organization. Find _sentrycrashstring_addressToString.hex under SDK-Size → Other Symbols → C Functions.
Alternatively, retrieve the analysis using an authenticated Sentry CLI and extract the entry:
This array contains 17 bytes, including its null terminator.
Compiled-binary cross-check
We also inspected a related post-merge iOS framework artifact from Release run 34471930835. This is a dynamic framework build, not the exact statically linked executable uploaded as artifact 799801. It independently confirms the constant's contents and the presence of unrelated strings immediately after it.
On macOS, while the workflow artifact remains available:
The next string starts exactly 0x11 / 17 bytes after hex. However, the next named symbol in the symbol table is in another section (__TEXT,__const), so the symbol-size heuristic has no intervening symbol boundary for these unrelated strings.
Expected Result
Attribute only the actual string literal's bytes to hex, or clearly present the result as an estimated range rather than the constant's size.
Leave unrelated string-pool content attributed to the string section or another appropriate bucket.
Do not label this data constant as a C function.
Preserve accurate total binary-size accounting without suggesting that changing this 17-byte lookup table could remove approximately 79 KB.
For a named constant in __TEXT,__cstring, subsequent unrelated literals may not have their own symbol-table entries. The heuristic therefore charges those bytes to the preceding named constant instead of stopping at its null terminator.
Additionally, MachOElementBuilder._add_other_symbols labels the otherwise unclassified symbol bucket C Functions, including data symbols such as this one.
Impact and verification limits
This sends SDK-size optimization investigations toward the wrong target. The attributed bytes are real binary content, but they are not all owned by hex. This observation does not establish that the overall installed-size total is wrong.
The session verified the exact API result, the SDK source, the related framework's symbol table and string contents, and the local Launchpad implementation. We did not inspect the exact artifact 799801 Mach-O or independently reproduce the exact 78,670-byte calculation locally. Attempting to run Launchpad's symbol-size calculator was blocked by its unavailable Python 3.14.4 interpreter. No SDK or Launchpad code was changed.
Note
This issue was created by an agent based on a manual, interactive investigation with me. The observations and verification limits from that session are documented below.
Environment
1.2.1.io.sentry.sample.SDK-Size, Sentry Cocoa9.28.0, build1, iPhoneOS Release with statically linked Sentry.iphoneos26.5.EEA6DC52-7D98-34F8-8EFC-BD6261FF8659.c346d93c13d13f8c25ad740bd47d19481f25a662. This is the inspected checkout, not a verified deployment SHA for the affected analysis.How we discovered this
We were investigating the app-size savings from sentry-cocoa#9003, which moves a preallocated binary-image cache from file-backed data into zero-fill storage. The Preprod comparison reports a 294.9 KB installed-size reduction with essentially unchanged download size.
While inspecting the remaining Sentry footprint, I noticed
_sentrycrashstring_addressToString.hexoccupying 78.67 KB in the treemap. Tracing that entry back to the SDK source and Launchpad's symbol-size calculation revealed an attribution problem, rather than another large SDK allocation.Steps to Reproduce
Open artifact 799801 with access to the
sentry-sdksorganization. Find_sentrycrashstring_addressToString.hexunderSDK-Size→Other Symbols→C Functions.Alternatively, retrieve the analysis using an authenticated Sentry CLI and extract the entry:
Compare the result with
Sources/SentryCrash/Recording/Tools/SentryCrashString.c. The symbol is the function-local constant:This array contains 17 bytes, including its null terminator.
Compiled-binary cross-check
We also inspected a related post-merge iOS framework artifact from Release run 34471930835. This is a dynamic framework build, not the exact statically linked executable uploaded as artifact 799801. It independently confirms the constant's contents and the presence of unrelated strings immediately after it.
On macOS, while the workflow artifact remains available:
Observed string contents:
The next string starts exactly
0x11/ 17 bytes afterhex. However, the next named symbol in the symbol table is in another section (__TEXT,__const), so the symbol-size heuristic has no intervening symbol boundary for these unrelated strings.Expected Result
hex, or clearly present the result as an estimated range rather than the constant's size.Actual Result
The API returns:
{ "name": "_sentrycrashstring_addressToString.hex", "size": 78670, "type": "modules", "is_dir": false, "children": [], "flagged_insights": [] }Likely attribution mechanism
MachOSymbolSizes._symbol_sizesuses a distance-to-next-symbol heuristic, with the end of the current section as the fallback:For a named constant in
__TEXT,__cstring, subsequent unrelated literals may not have their own symbol-table entries. The heuristic therefore charges those bytes to the preceding named constant instead of stopping at its null terminator.Additionally,
MachOElementBuilder._add_other_symbolslabels the otherwise unclassified symbol bucketC Functions, including data symbols such as this one.Impact and verification limits
This sends SDK-size optimization investigations toward the wrong target. The attributed bytes are real binary content, but they are not all owned by
hex. This observation does not establish that the overall installed-size total is wrong.The session verified the exact API result, the SDK source, the related framework's symbol table and string contents, and the local Launchpad implementation. We did not inspect the exact artifact 799801 Mach-O or independently reproduce the exact 78,670-byte calculation locally. Attempting to run Launchpad's symbol-size calculator was blocked by its unavailable Python
3.14.4interpreter. No SDK or Launchpad code was changed.