Xamarin — это платформа Microsoft для создания мобильных приложений на языке C#, анонсированная в 2011 году. По данным Microsoft Xamarin Documentation, 2024, Xamarin позволяет писать приложения под iOS, Android и Windows с общей кодовой базой на C# и .NET, используя Mono Runtime для компиляции в нативный код. С 2024 года Xamarin.Forms заменён на .NET MAUI.
Главное
Xamarin — это платформа, основанная на .NET и Mono, которая позволяет использовать C# для создания кроссплатформенных мобильных приложений. Компания Xamarin была основана в 2011 году и приобретена Microsoft в 2016 году за $400 млн. После покупки Xamarin стал частью экосистемы Visual Studio и Azure.
До приобретения Microsoft Xamarin был коммерческим продуктом с лицензией Enterprise. Microsoft сделала его бесплатным в составе Visual Studio Community, а также открыла исходный код Mono Runtime и SDK-биндингов. Это привело к росту популярности: к 2020 году Xamarin использовался в 15% кросс-платформенных проектов, согласно отчету SlashData.
Основная идея Xamarin — разделение кода на три слоя: общая бизнес-логика (C#, .NET Standard), платформенные проекты (iOS, Android) и опциональный общий UI через Xamarin.Forms. Такой подход позволял переиспользовать до 75% кода при сохранении нативного доступа к API каждой платформы.
Первая версия Xamarin 1.0 вышла в 2012 году с поддержкой iOS только. В 2013 году добавилась поддержка Android. Xamarin.Forms — декларативный UI-фреймворк — был представлен в 2014 году на конференции Evolve. Xamarin 4.0 (2016) включил поддержку watchOS и tvOS. Xamarin 5.0 (2019) ввел CSS-стили и тему оформления Material Design.
Последняя мажорная версия Xamarin.Forms 5.0 вышла в 2021 году. Microsoft объявила, что Xamarin переходит в режим поддержки (end of life — 1 мая 2024 года), и рекомендовала мигрировать на .NET MAUI (Mult-platform App UI), который входит в состав .NET 6+. Xamarin.Forms 5.0 больше не получает новых функций, только критические исправления безопасности.
Xamarin.Forms — это UI-фреймворк, который абстрагирует интерфейс через единый набор элементов. XAML-разметка (ContentPage, StackLayout, Label, Button) маппится на нативные контролы каждой платформы через рендереры. Label транслируется в UILabel на iOS и TextView на Android. Этот подход обеспечивает до 95% общего UI-кода.
Xamarin.Native (также Xamarin.iOS и Xamarin.Android) — это подход без общего UI. Разработчик создаёт отдельные экраны для iOS (Interface Builder или Storyboard) и Android (AXML), используя один C#-бэкенд. Это даёт полный контроль над внешним видом каждой платформы, но увеличивает объём дублирования кода UI до 50–60%.
По данным Microsoft Developer Survey 2023, 70% проектов на Xamarin использовали Xamarin.Forms, 20% — Xamarin.Native с общими сервисами, 10% — гибридный подход с кастомными рендерерами для платформенных оптимизаций.
Архитектура Xamarin состоит из двух уровней. Нижний уровень — Mono Runtime, который исполняет C# IL (Intermediate Language) на платформе. Верхний уровень — Managed Callable Wrappers (MCW) для iOS и Android Bindings для Android, которые обеспечивают доступ к нативным API из управляемого кода C#.
Mono — это реализация .NET Framework с открытым исходным кодом. В Xamarin Mono работает как среда выполнения Common Language Runtime (CLR), загружая сборки C# и компилируя их в машинный код. На iOS Mono компилируется Ahead-of-Time (AOT) — в машинный код ARM64, так как Apple запрещает JIT-компиляцию в пользовательских приложениях. На Android Mono использует JIT-компиляцию с AOT-профилированием.
iOS Bindings (Xamarin.iOS) — это C#-обёртки над Objective-C рантаймом. Каждый UIKit-класс (UIView, UIViewController) представлен управляемым классом в сборке Xamarin.iOS.dll. Selector'ы Objective-C вызываются через MessageUI-механизм. На Android Xamarin.Android использует Android Callable Wrappers (ACW) — JNI-мост между C# и Java/Kotlin. Kotlin-библиотеки оборачиваются через Android Bindings Library.
XAML (eXtensible Application Markup Language) — декларативный язык для описания UI. В Xamarin.Forms XAML определяет структуру экрана: страницы (ContentPage), контейнеры (StackLayout, Grid, FlexLayout) и элементы (Label, Entry, Button, ListView). Код-бэкенд на C# обрабатывает события (Clicked, PropertyChanged) и управляет привязкой данных (Binding, Data Binding).
MVVM-паттерн — рекомендуемая архитектура для Xamarin.Forms. Модель (Model) содержит данные, ViewModel реализует INotifyPropertyChanged и команды (ICommand), View (XAML) связывается через BindingContext. Реализация ICommand через RelayCommand или Prism DelegateCommand обеспечивает тестирование ViewModel без UI-зависимостей. Библиотека Prism.Forms предоставляет NavigationService, DialogService и модульность.
using Xamarin.Forms;
namespace XamarinApp
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var label = new Label
{
Text = "Hello, Xamarin!",
FontSize = 24,
VerticalOptions = LayoutOptions.Center,
HorizontalOptions = LayoutOptions.Center
};
Content = new StackLayout
{
Children = { label }
};
}
}
}
Единый язык C# — главное преимущество Xamarin. Разработчики C# и .NET могут создавать мобильные приложения без изучения Swift, Kotlin или Objective-C. Бизнес-логика, работа с сетью, базы данных (SQLite через ORM), шифрование и логирование пишутся один раз и переиспользуются на всех платформах. Это упрощает поддержку и тестирование кода.
Доступ к нативным API — Xamarin предоставляет 100% доступ к API iOS (Cocoa Touch) и Android (Android SDK) через биндинги. При выходе новой версии iOS или Android Microsoft выпускает обновлённые биндинги в течение 24–48 часов. Для отсутствующих биндингов (кастомные Objective-C или Kotlin библиотеки) создают Android Bindings Library или iOS Binding Library вручную.
Интеграция с экосистемой Microsoft — Xamarin поддерживает Visual Studio, Azure DevOps, App Center (CI/CD, тестирование, мониторинг) и Enterprise Mobility + Security (Intune, ADAL, MSAL). App Center Analytics и Crashes собирают данные с живых приложений. Visual Studio App Center автоматизирует сборку, тестирование на устройстве и публикацию в магазины приложений.
Недостатки Xamarin включают размер приложения — APK Xamarin.Forms с пустым экраном весит 25–35 МБ против 5–8 МБ у нативного Android-приложения. Время компиляции также выше: проект среднего размера собирается 2–5 минут против 30–60 секунд в нативной Android Studio. Mono Runtime добавляет 15–20 МБ к финальному бинарнику.
Второй недостаток — задержка новых API. Новые iOS/Android фичи появляются в нативной разработке сразу, а в Xamarin — через 1–2 месяца после выхода биндингов. iOS 17 SDK (2023) был полностью поддержан Xamarin через 3 недели после релиза. Для срочных проектов это может быть критичным. .NET MAUI решает эту проблему за счёт прямой интеграции с .NET 8.
| Критерий | Xamarin | .NET MAUI |
|---|---|---|
| Платформы | iOS, Android, Windows | iOS, Android, Windows, macOS, Tizen |
| Базовый фреймворк | Mono + .NET Standard | .NET 6+ (единый BCL) |
| UI-фреймворк | Xamarin.Forms | .NET MAUI (преемник) |
| Режим поддержки | End of Life с 1 мая 2024 | Активная разработка Microsoft |
| Hot Reload | Ограничен | XAML Hot Reload + C# Reload |
.NET MAUI (Multi-platform App UI) — это эволюция Xamarin.Forms, выпущенная Microsoft в 2022 году вместе с .NET 6. MAUI объединяет iOS, Android, Windows и macOS в единый проект без раздельных проектов для каждой платформы. В отличие от Xamarin.Forms, MAUI использует .NET 6+ BCL, а не Mono и .NET Standard.
Microsoft предоставляет инструмент миграции — .NET Upgrade Assistant для Visual Studio. Он анализирует Xamarin.Forms проект, заменяет пространства имён (Xamarin.Forms.* -> Microsoft.Maui.*), обновляет файлы .csproj (формат SDK-style) и мигрирует настройки Android и iOS в единую конфигурацию. После миграции проект может использовать все новые возможности .NET 8: Native AOT, CodeQL для безопасности и улучшенную производительность сборки.
Ключевое изменение — единый проект. Если Xamarin.Forms требовал 3 отдельных проекта (iOS, Android, .NET Standard), .NET MAUI использует один проект с папками Platforms/iOS, Platforms/Android, Platforms/Windows и Platforms/MacCatalyst. Каждая платформа компилируется из общего кода с платформенными условными директивами (#if ANDROID, #if IOS).
Для существующих кодовых баз .NET MAUI поддерживает обратную совместимость на 90% с Xamarin.Forms. API-совместимость охватывает ContentView, ContentPage, Shell, NavigationPage, DependencyService и MessagingCenter. Основные изменения затронули Device.StartTimer (заменён на IDispatcher), Platform API (вынесено в Microsoft.Maui.ApplicationModel) и устаревшие рендереры (заменены на Handlers).
Процесс миграции включает пять шагов. Первый — обновление Xamarin.Forms до последней версии 5.0. Второй — замена .NET Standard 2.0 на .NET 6 или 8. Третий — запуск Upgrade Assistant для автоматической конвертации проекта. Четвёртый — исправление платформенного кода в папках Platforms. Пятый — тестирование, особенно кастомных рендереров и платформенных сервисов.
Часто задаваемые вопросы
Xamarin — это мобильная платформа Microsoft для разработки на C# под iOS, Android и Windows. Она использует Mono Runtime для компиляции общего кода и предоставляет два подхода: Xamarin.Forms (единый UI через XAML) и Xamarin.Native (нативные экраны платформы). С 2024 года Xamarin находится в режиме поддержки.
Xamarin использует C# и .NET, рендерит через нативные контролы (UIKit, View), но через биндинги. Flutter использует Dart и собственный движок рендеринга (Impeller), не полагаясь на нативные UI-компоненты. Flutter обеспечивает единый внешний вид на всех платформах, Xamarin — нативный вид каждой ОС. Flutter поддерживается Google и имеет 46% против 15% у Xamarin.
Нет. Microsoft прекратила поддержку Xamarin 1 мая 2024 года. Все новые проекты следует запускать на .NET MAUI — его преемнике, который встроен в .NET 8 и будет получать обновления вместе с платформой .NET. Для существующих проектов на Xamarin.Forms рекомендуется мигрировать в течение 12–18 месяцев.
Разница незначительна для обычных приложений. Xamarin.Forms добавляет 5–10% накладных расходов на рендеринг за счёт оберток Managed-Wrapper-Native. Проблемы возникают в тяжёлых списках (ListView против RecyclerView) и анимациях (средствами Xamarin.Forms без платформенных API). Рекомендуется использовать CollectionView (заменил ListView) и нативные анимации.
Да, через Android Bindings Library. Этот тип проекта .NET оборачивает AAR или JAR-архив в C#-биндинги с автоматической генерацией классов и методов. Для Kotlin-библиотек требуются дополнительные обработчики для корутин и sealed class, которые настраиваются через Metadata.xml в Binding Library.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также