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 преминава в режим на поддръжка (край на живота — 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. Моделът съдържа данни, 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 MB срещу 5–8 MB за естествено Android приложение. Времето за компилиране също е по-високо: проект със среден размер се изгражда за 2–5 минути срещу 30–60 секунди в естественото Android Studio. Mono Runtime добавя 15–20 MB към крайния двоичен файл.
Вторият недостатък е забавянето на нови 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 (наследник) |
| Режим на поддръжка | Край на живота от 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също