I'm curious how it integrates Mono runtime into a "native ARM executable". The whole runtime must be really big. When building the App, does it only integrates the parts required to support the App, or does it integrate all?
The other question is that, when running on iOS, is it the .NET IL running on top of the runtime, or C# code is compiled into native binary code that can be directly executed on CPU? I'm trying to figure out if there's something like a micro VM running.
Most Apps are not as simple as a "hello world" view. My guess is that, the getting-started pack is large but when you add more things into it, it doesn't increase that much.
Short answer: it gets converted to native, they can actually determine which parts of the .NET runtime you are using and only fold those elements in which makes the IPA pretty small actually.
The IL linker operates over the IL code (typically C# produced, but we are working now on adding also F#) and produces the minimal set needed to run.
Then we compile the resulting linked IL to ARM code, and then we run the result using the C linker (so the same removal of unused code takes place, this time for the C bits of Mono).
The other question is that, when running on iOS, is it the .NET IL running on top of the runtime, or C# code is compiled into native binary code that can be directly executed on CPU? I'm trying to figure out if there's something like a micro VM running.