Xamarin — је Мицрософт платформа за креирање мобилних апликација у језику 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% приступ iOS (Cocoa Touch) и Android (Android SDK) API-јима кроз везивања. При изласку нове верзије 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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође