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.

Диаграмма, показывающая как работает Xamarin.iOS

Из-за ограничений, накладываемых компанией 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, перевод