Немного подробнее о том, как работает Xamarin.iOS
Xamarin - SDK позволяющий разработчикам делать приложения для платформ iOS и Android, используя C# и .NET фреймворк. Этот SDK имеет отдельные требования для разработки iOS и Android приложений. Часть SDK, нацеленная на разработку под iOS, называется Xamarin.iOS или monotouch (оригинальное название проекта).
Mono - open source реализация .NET фреймворка которая может работать на нескольких операционных системах: Windows, Linux и OSX. Mono базируется на стандартах ECMA и ABI (application binary interface), совместим с ECMA CLI (сommon language infrastructure).
Xamarin.iOS снова компилирует исходный код на языке C# в специальное подмножество Mono фреймворка. Это урезанная версия Mono, включает дополнительные библиотеки, которые обеспечивают доступ к платформенным особенностям iOS. Xamarin.iOS компилятор - smsc, берет исходный код и компилирует его в промежуточный язык, ECMA CIL (common intermediate language), однако, он не производит ABI совместимых бинарных файлов, в отличие от обычного mono компилятора, gmcs или dmsc. Это означает, что любые сторонние .NET библиотеки, которые вы хотите добавить в свое приложение, нужно будет перекомпилировать снова c помощью Xamarin.iOS, используя smsc.
Единожды скомпилированное в CIL Xamarin.iOS приложение, должно быть скомпилированно снова в нативный машинный код, чтобы можно было запустить на iOS устройстве. Этот процесс осуществляется с помощью инструмента mtouch из состава SDK, в результате чего приложение будет запакованно и может быть загружено либо на iOS-симулятор или фактически на iOS устройство: iPhone или iPad.
Из-за ограничений, накладываемых компанией Apple, ядро iOS не позволит программе генерировать код во время исполнения. Это ограничение имеет серьезные последствия для программных систем, выполняющиеся внутри виртуальной машины и используеющие just-in-time компиляцию. JIT компиляция исполняет промежуточный код, например mono CIL и компилирует его во время исполнения в машинный код. Этот машинный код совместим с устройством, на котором он работает во время исполнения.
Чтобы обойти это ограничение, mtouch компилирует CIL перед исполнением. Этот процесс команда mono описывает как AOT(ahead of time)-компиляция.
Подробнее об ограничениях: https://developer.xamarin.com/guides/ios/advanced_topics/limitations/
Теги: c#, xamarin, xamarin.ios, перевод