Understanding AOT compilation
The runtime behind Mono and .NET on Windows is based on a just-in-time (JIT) compiler. C# and other .NET languages are compiled into Microsoft intermediate language (MSIL). At runtime, MSIL is compiled into a native code (just in time) to run on whatever type of architecture is running your application. Xamarin.Android follows this exact pattern. However, due to Apple's restrictions on dynamically generated code, a just-in-time (JIT) compiler is not allowed on iOS.
To work around this restriction, Xamarin has developed a new option called ahead-of-time (AOT) compilation, in which your C# code is compiled into native, platform-specific machine code. In addition to making .NET possible on iOS, AOT has other benefits, such as a shorter startup time and potentially better performance.
AOT also has some limitations that are generally related to C# generics. To compile an assembly ahead of time, the compiler will need to run some static analysis against your code to...