Description
Overview
Supporting NativeAOT on iOS platforms as an experimental feature in .NET8 would enable our customers to try the NativeAOT toolchain and runtime with their iOS applications, in order to benefit from advantages mostly concentrated around application size savings and start-up performance.
In .NET8 the default toolchain and runtime when targeting iOS platforms will remain to be Mono, while NativeAOT would become available as an option.
This issues tracks progress on the identified work required for enabling NativeAOT on iOS platforms. The work is organised and tracked with GitHub issues divided by upcoming .NET8 preview releases in which they should become available. Some of the listed items can be considered as user stories and will require further break-down of work, while the others are plain tasks.
NOTE: The breakdown of GitHub issues does not impose hard deadlines. If some of the functionality does not get upstreamed for a particular preview version, this issue will be updated accordingly.
Tasks
.NET8 Preview 5
- NativeAOT: Export native methods from referenced assemblies. #65755
- Support marshalled delegates with NativeAOT on iOS platforms #82090
- Support targeting iOS platforms with ILCompiler #80908
- Enable AppleAppBuilder to bundle applications compiled with NativeAOT #80910
- Introduce symbol stripping build task for HelloiOS sample app #80977
- Expose managed Main with NativeAOT when compiling the application as a static library #81097
- [NativeAOT] Low level API support for Objective-C scenarios #77472
- Static registrar with NativeAOT design – discussion #80912
- Add a managed static registrar. Fixes #17324. macios#18268
.NET8 Preview 6
- HelloiOS sample for NativeAOT #80911
- Enable dotnet SDK to support targeting iOS with NativeAOT sdk#30068
- Add support for using NativeAOT. macios#17374
- Enable building NativeAOT for Apple mobile platforms #81024
- Adapt monotouch-test to work with NativeAOT macios#17774
- [nativeaot][tests] Add Native AOT iOS perf scenarios #85317
- [NativeAOT] Don't link Swift/CryptoKit on iOS-like platforms #87216
- Satellite assembly support in NativeAOT #86651
- Avoid linking to non-existent System.Net.Security.Native on tvOS #87605
- Support relative path for ICU_DAT_FILE_PATH on iOS/tvOS/Catalyst #87813
- NativeAOT supports targeting all iOS-like platforms:
ios
,iossimulator
,maccatalyst
,tvos
andtvossimulator
- App size-regression and startup tracking for NativeAOT HelloiOS sample
.NET8 Preview 7
- NativeAOT: Do not pass
-dead_strip
to the native linker macios#18552 - Enable NativeAOT cross-platform build for iOS-like platforms #87764
- NativeAOT: stop shipping assemblies macios#18472
- NativeAOT: Disable AggressiveAttributeTrimming with ILLink macios#18545
- Respect IsDynamicCodeSupported in more places in Linq.Expressions #88539
.NET8 GA
- Fix how
System.Linq.Expressions.dll
is supported on iOS-like platforms #87924 - Support NativeAOT as a runtime variant for iOS platforms macios#17339
- Investigate limitations and document findings of enabling NativeAOT for MAUI iOS application #80907
- Enable dotnet/runtime runtime and functional tests for iOS platforms to run with NativeAOT #85294
- Trimming and extensions compatibility design – discussion #86649
- [NativeAOT] Add appropriate telemetry flags to track use of NativeAOT on iOS-like platforms #88844
- NativeAOT: Trimming and extensions compatibility - implementation macios#18584
- App size-regression and startup tracking for NativeAOT MAUI iOS
- NativeAOT: fix warnings in our code macios#18629
- NativeAOT: Document support for NativeAOT runtime with Xamarin macios#18585
.NET9
- NativeAOT library mode on iOS-like platforms #88737
- .NET: Use UnmanagedCallersOnlyAttribute instead of (or in addition to) MonoPInvokeCallbackAttribute macios#10470
- Overeager check for RuntimeIdentifier when PublishAot=true sdk#33414
- [NativeAOT] Properly implement targeting iOS-like platforms rather than pretending to be macOS #87610
- NativeAOT: re-enable dead stripping macios#18605
- .NET 9: Make .NET MAUI trimmer-friendly maui#18658
- [NativeAOT] App Store Connect warning ITMS-90999: Invalid executable #94655
- [ios][docs] Document how iOS library mode is supported #96742
- Document support for released app diagnostics with NativeAOT on iOS #106799
.NET10+
- Improve methodology for start-up profiling and measuring SOD for iOS platforms
- [perf] Add support for build time tracking in iOS scenarios performance#3162
- [NativeAOT] Extend the runtime pack approach to all supported platforms #87060
- [mono][aot] Preserve P/Invoked symbols when stripping #81530
- Enable building/running libraries tests on iOS simulator and device with NativeAOT #81075
- [NativeAOT] Simplify build integration with external bundlers for Apple platforms #87187
- NativeAOT: Investigate whether we can narrow down the list of assemblies to look for UnmanagedCallersOnly entry points macios#18484
Other relevant issues:
- [NativeAOT] support calling UnmanagedCallersOnly functions before managed main() #77957
- [NativeAOT] Update documentation when building native libraries with a custom native host #82156
/cc: @marek-safar @SamMonoRT @steveisok @lambdageek @rolfbjarne @kotlarmilos @akoeplinger
Metadata
Metadata
Assignees
Labels
Type
Projects
Status