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.
До придбання 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 (Multi-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. Селектори 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.
Читайте також