[net11.0] Strip CoreCLR/R2R frameworks in Debug on devices#25360
[net11.0] Strip CoreCLR/R2R frameworks in Debug on devices#25360kotlarmilos wants to merge 1 commit intonet11.0from
Conversation
5a65c1c to
b74dd00
Compare
Follow-up to #24678. PR #24678 added the CoreCLR runtime frameworks and the R2R composite framework to @(_PostProcessingItem) so they would be stripped, which took effect for Release device builds. In Debug device builds the strip was bypassed because the Debug-default in Xamarin.Shared.props set the global $(NoSymbolStrip)=true, which then propagated onto every _PostProcessingItem with empty %(NoSymbolStrip) metadata, causing _NativeStripItems to filter all items out. Remove the Debug-default rule entirely. iOS/tvOS device builds now always strip native binaries and a dSYM bundle is generated for post-mortem symbolication, regardless of Configuration. Simulator builds remain unstripped so the live debugger keeps symbols on disk. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
b74dd00 to
281f423
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Pull request overview
Removes the MSBuild default that disabled native symbol stripping in Debug configurations, so iOS/tvOS device builds strip CoreCLR/R2R frameworks (and other native binaries collected for post-processing) consistently across Debug/Release while keeping simulator builds unstripped.
Changes:
- Remove the
Debug-configuration default that set$(NoSymbolStrip)=true.
Show a summary per file
| File | Description |
|---|---|
| msbuild/Xamarin.Shared/Xamarin.Shared.props | Drops the Debug default for NoSymbolStrip, allowing post-processing strip/dSYM behavior to apply in Debug device builds. |
Copilot's findings
Comments suppressed due to low confidence (1)
msbuild/Xamarin.Shared/Xamarin.Shared.props:146
- PR title says stripping affects “simulator builds”, but this file still explicitly disables stripping for simulator builds via the ComputedPlatform != iPhone condition. If simulator builds are intended to remain unstripped (as described), consider updating the PR title to avoid confusion; otherwise adjust the simulator default here.
<!-- Disable stripping for simulator builds by default -->
<NoSymbolStrip Condition="'$(NoSymbolStrip)' == '' And ('$(_PlatformName)' == 'iOS' Or '$(_PlatformName)' == 'tvOS' Or '$(_PlatformName)' == 'watchOS') And '$(ComputedPlatform)' != 'iPhone'">true</NoSymbolStrip>
<NoSymbolStrip Condition="'$(NoSymbolStrip)' == ''">false</NoSymbolStrip>
- Files reviewed: 1/1 changed files
- Comments generated: 0
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
✅ [PR Build #281f423] Build passed (Detect API changes) ✅Pipeline on Agent |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
✅ [PR Build #281f423] Build passed (Build packages) ✅Pipeline on Agent |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
|
@kotlarmilos is there a build speed difference between stripping and not stripping? Also there's a reason stripping is off by default: #20235 - but we could always enable it for CoreCLR and see if we get fewer struggling customers or not. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
✅ API diff for current PR / commitNET (empty diffs)✅ API diff vs stableNET (empty diffs)ℹ️ Generator diffGenerator Diff: vsdrops (html) vsdrops (raw diff) gist (raw diff) - Please review changes) Pipeline on Agent |
This comment has been minimized.
This comment has been minimized.
✅ [PR Build #281f423] Build passed (Build macOS tests) ✅Pipeline on Agent |
Native strip binaries target is around 500ms, but the signing is 100ms faster due to smaller libaries. There is a significant size saving, about 50% of the overall app bundle. Regarding symbols, I understand it was a problem before. Could we just point to https://github.com/dotnet/skills/tree/main/tests/dotnet-diag/apple-crash-symbolication? |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
🔥 [CI Build #281f423] Test results 🔥Test results❌ Tests failed on VSTS: test results 1 tests crashed, 7 tests failed, 171 tests passed. Failures❌ dotnettests tests (macOS)1 tests failed, 0 tests passed.Failed tests
Html Report (VSDrops) Download ❌ introspection tests6 tests failed, 3 tests passed.Failed tests
Html Report (VSDrops) Download ❌ windows tests🔥 Failed catastrophically on VSTS: test results - windows (no summary found). Html Report (VSDrops) Download Successes✅ cecil: All 1 tests passed. Html Report (VSDrops) Download macOS tests✅ Tests on macOS Sonoma (14): All 5 tests passed. Html Report (VSDrops) Download Linux Build VerificationPipeline on Agent |
Description
PR #24678 enabled stripping of R2R composite framework, which took effect for Release device builds. In Debug device builds the strip was bypassed because the Debug-default in
Xamarin.Shared.propsset the global$(NoSymbolStrip)=true, which then propagated onto every `_PostProcessingItem.This PR removes the Debug-default rule entirely. iOS/tvOS device builds now always strip native binaries and a dSYM bundle is generated for symbolication, regardless of configuration. Simulator builds remain unstripped.
Size saving in Debug on a device is ~50% of the overall app bundle.
Behavior