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 1402884 — RunOniOS_MauiReleaseTrimFull ARM64 job
Description
When building a MAUI template app with
TrimMode=fullandTreatWarningsAsErrors=trueon iOS, ILLink produces IL2026 errors from<Module>..cctor()referencingHybridWebViewHandlernested classes that have[RequiresUnreferencedCode].This causes the
RunOniOS_MauiReleaseTrimFullandRunOniOS_MauiReleaseTrimFull_CoreCLRintegration tests to fail on therelease/11.0.1xx-preview4branch.Error
Affected Members (all from
<Module>..cctor()caller)HybridWebViewHandler.SchemeHandler..cctor()HybridWebViewHandler.SchemeHandler.GetResponseBytesAsync(String, NSUrlRequest, ILogger)HybridWebViewHandler.SchemeHandler.Handler.getHybridWebViewHandler.SchemeHandler.SchemeHandler(HybridWebViewHandler)HybridWebViewHandler.SchemeHandler.StartUrlSchemeTask(WKWebView, IWKUrlSchemeTask)HybridWebViewHandler.SchemeHandler.StopUrlSchemeTask(WKWebView, IWKUrlSchemeTask)HybridWebViewHandler.WebViewScriptMessageHandler..cctor()HybridWebViewHandler.WebViewScriptMessageHandler.DidReceiveScriptMessage(WKUserContentController, WKScriptMessage)HybridWebViewHandler.WebViewScriptMessageHandler.Handler.getRoot Cause
The iOS Managed Registrar generates a
<Module>..cctor()that registers allNSObjectsubclasses with ObjC-exported interfaces. BothSchemeHandler(implementsIWKUrlSchemeHandler) andWebViewScriptMessageHandler(implementsIWKScriptMessageHandler) areNSObjectsubclasses marked with[RequiresUnreferencedCode].The registrar-generated code references these types without propagating the trim suppression, causing IL2026 when
TrimMode=full.Context
[RequiresUnreferencedCode]attributes on the nested classes are correct and intentional.[RequiresUnreferencedCode].Reproduction
Build a default MAUI template on iOS with:
Build Reference
PR dotnet/maui#35171, Build 1402884 —
RunOniOS_MauiReleaseTrimFull ARM64job