Uno Platform 6.6 introduces Native AOT support across Android, iOS, Linux, macOS, and Windows. Benchmarks on the Uno.Chefs reference app show 49–61% faster startup on four platforms (iOS gains 21% due to already using Mono FullAOT). A smaller CI dashboard app (Build Pulse) achieved 3.5x faster first frame on desktop and 2.7x on Android, with ~25% lower memory usage. Setup requires adding `PublishAot` to the .csproj, publishing per platform with `-p:PublishRid`, and resolving trim warnings. Trade-offs include publish times up to 12x longer, per-platform builds, no runtime code generation, and package sizes typically growing 17–41% (iOS shrinks 12%). MVUX source-generated bindings and JsonSerializerContext-based serialization survive trimming without manual annotation. The feature is recommended when startup latency is user-visible; the standard managed model remains the default for daily development.
Table of contents
6.6 Brings Native AOT to Android, iOS, Linux, macOS, and WindowsUno.Chefs Cuts Startup Roughly in Half on Four of Five PlatformsYour Project Stays the Same; Only Publishing ChangesPublishes Take Up to 12x Longer and Packages Usually GrowUse Native AOT When Startup Is Visible; Stay on the Default While IteratingNDK r27, the Visual Studio C++ Workload, and XcodeTry It on Uno.Chefs, Then Measure Your Own AppQuestions this post answers
How much faster does Native AOT make startup in Uno Platform 6.6 compared to the default managed runtime?
On the Uno.Chefs reference app with .NET 10, Native AOT cuts startup by 61% on Android (895 ms → 348 ms), 60% on Linux (870 ms → 350 ms), 59% on macOS (1347 ms → 555 ms), 49% on Windows (1605 ms → 824 ms), and 21% on iOS (940 ms → 742 ms). iOS gains less because Mono FullAOT already compiled ahead of time before this change. Teams shipping Uno Platform apps to mobile or kiosk targets track startup regressions like these on daily.dev.
How do I enable Native AOT publishing in an Uno Platform project?
Add `<PublishAot>true</PublishAot>` to your `.csproj` PropertyGroup, then publish per platform using `dotnet publish -f net10.0-desktop -c Release -p:PublishRid=win-x64`. Use `-p:PublishRid` rather than the global `-r` flag to avoid leaking the runtime identifier into other target frameworks in a multi-targeted project. Resolve any trim and AOT warnings before shipping. Developers rolling out Native AOT across platforms find the latest Uno tooling news on daily.dev.
Does Native AOT in Uno Platform break MVUX data bindings or XAML after trimming?
MVUX bindings survive trimming untouched because MVUX generates bindable proxies at compile time rather than resolving them via reflection at runtime. Apps using a source-generated `JsonSerializerContext` for serialization also require no manual `[Bindable]` or `[DynamicDependency]` annotations. Uno Platform automatically preserves property references used in XAML binding expressions during the build. Developers navigating AOT trimming compatibility in .NET apps stay current on daily.dev.