Skip to content

[iOS] IL2026 trim errors from Managed Registrar referencing HybridWebViewHandler nested classes #25285

@PureWeen

Description

@PureWeen

Description

When building a MAUI template app with TrimMode=full and TreatWarningsAsErrors=true on iOS, ILLink produces IL2026 errors from <Module>..cctor() referencing HybridWebViewHandler nested classes that have [RequiresUnreferencedCode].

This causes the RunOniOS_MauiReleaseTrimFull and RunOniOS_MauiReleaseTrimFull_CoreCLR integration tests to fail on the release/11.0.1xx-preview4 branch.

Error

ILLink : Trim analysis error IL2026: <Module>..cctor(): Using member
  'Microsoft.Maui.Handlers.HybridWebViewHandler.SchemeHandler.Handler.get'
  which has 'RequiresUnreferencedCodeAttribute' can break functionality
  when trimming application code. HybridWebView uses dynamic System.Text.Json
  serialization features.

Affected Members (all from <Module>..cctor() caller)

  • HybridWebViewHandler.SchemeHandler..cctor()
  • HybridWebViewHandler.SchemeHandler.GetResponseBytesAsync(String, NSUrlRequest, ILogger)
  • HybridWebViewHandler.SchemeHandler.Handler.get
  • HybridWebViewHandler.SchemeHandler.SchemeHandler(HybridWebViewHandler)
  • HybridWebViewHandler.SchemeHandler.StartUrlSchemeTask(WKWebView, IWKUrlSchemeTask)
  • HybridWebViewHandler.SchemeHandler.StopUrlSchemeTask(WKWebView, IWKUrlSchemeTask)
  • HybridWebViewHandler.WebViewScriptMessageHandler..cctor()
  • HybridWebViewHandler.WebViewScriptMessageHandler.DidReceiveScriptMessage(WKUserContentController, WKScriptMessage)
  • HybridWebViewHandler.WebViewScriptMessageHandler.Handler.get

Root Cause

The iOS Managed Registrar generates a <Module>..cctor() that registers all NSObject subclasses with ObjC-exported interfaces. Both SchemeHandler (implements IWKUrlSchemeHandler) and WebViewScriptMessageHandler (implements IWKScriptMessageHandler) are NSObject subclasses marked with [RequiresUnreferencedCode].

The registrar-generated code references these types without propagating the trim suppression, causing IL2026 when TrimMode=full.

Context

Reproduction

Build a default MAUI template on iOS with:

dotnet build -c Release -f:net11.0-ios -p:TrimMode=full -p:TreatWarningsAsErrors=true -p:TrimmerSingleWarn=false

Build Reference

PR dotnet/maui#35171, Build 1402884RunOniOS_MauiReleaseTrimFull ARM64 job

Metadata

Metadata

Assignees

Labels

regressionThe issue or pull request is a regression

Type

No fields configured for Bug.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions