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# για τη δημιουργία cross-platform εφαρμογών για κινητά. Η εταιρεία Xamarin ιδρύθηκε το 2011 και εξαγοράστηκε από τη Microsoft το 2016 για 400 εκατομμύρια δολάρια. Μετά την εξαγορά, το Xamarin έγινε μέρος του οικοσυστήματος Visual Studio και Azure.
Πριν από την εξαγορά από τη Microsoft, το Xamarin ήταν ένα εμπορικό προϊόν με άδεια Enterprise. Η Microsoft το έκανε δωρεάν στο πλαίσιο του Visual Studio Community και άνοιξε επίσης τον πηγαίο κώδικα του Mono Runtime και των δεσμεύσεων SDK. Αυτό οδήγησε σε αύξηση της δημοτικότητας: μέχρι το 2020, το Xamarin χρησιμοποιούνταν στο 15% των cross-platform έργων, σύμφωνα με την αναφορά SlashData.
Η κύρια ιδέα του Xamarin — διαίρεση του κώδικα σε τρία επίπεδα: κοινή επιχειρηματική λογική (C#, .NET Standard), έργα πλατφόρμας (iOS, Android) και προαιρετικό κοινό UI μέσω Xamarin.Forms. Αυτή η προσέγγιση επέτρεπε την επαναχρησιμοποίηση έως και 75% του κώδικα διατηρώντας την εγγενή πρόσβαση στα API κάθε πλατφόρμας.
Η πρώτη έκδοση Xamarin 1.0 κυκλοφόρησε το 2012 με υποστήριξη μόνο για iOS. Το 2013 προστέθηκε υποστήριξη για Android. Το Xamarin.Forms — το δηλωτικό UI framework — παρουσιάστηκε το 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 framework που αφαιρεί τη διεπαφή μέσω ενός ενοποιημένου συνόλου στοιχείων. Η σήμανση XAML (ContentPage, StackLayout, Label, Button) αντιστοιχίζεται σε εγγενή στοιχεία ελέγχου κάθε πλατφόρμας μέσω renderers. Το Label μεταφράζεται σε UILabel στο iOS και TextView στο Android. Αυτή η προσέγγιση παρέχει έως και 95% κοινό κώδικα UI.
Xamarin.Native (επίσης Xamarin.iOS και Xamarin.Android) — είναι μια προσέγγιση χωρίς κοινό UI. Ο προγραμματιστής δημιουργεί ξεχωριστές οθόνες για iOS (Interface Builder ή Storyboard) και Android (AXML), χρησιμοποιώντας ένα backend C#. Αυτό δίνει πλήρη έλεγχο στην εμφάνιση κάθε πλατφόρμας, αλλά αυξάνει τον όγκο του διπλότυπου κώδικα UI σε 50–60%.
Σύμφωνα με το Microsoft Developer Survey 2023, το 70% των έργων Xamarin χρησιμοποιούσαν Xamarin.Forms, 20% — Xamarin.Native με κοινές υπηρεσίες, 10% — υβριδική προσέγγιση με προσαρμοσμένους renderers για βελτιστοποιήσεις πλατφόρμας.
Η αρχιτεκτονική 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). Ο κώδικας backend σε 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 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 |
| Βασικό framework | Mono + .NET Standard | .NET 6+ (ενοποιημένο BCL) |
| UI framework | 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) και τους ξεπερασμένους renderers (αντικαταστάθηκαν από Handlers).
Η διαδικασία μετάβασης περιλαμβάνει πέντε βήματα. Πρώτο — ενημέρωση του Xamarin.Forms στην τελευταία έκδοση 5.0. Δεύτερο — αντικατάσταση του .NET Standard 2.0 με .NET 6 ή 8. Τρίτο — εκτέλεση του Upgrade Assistant για αυτόματη μετατροπή του έργου. Τέταρτο — διόρθωση κώδικα πλατφόρμας στους φακέλους Platforms. Πέμπτο — δοκιμή, ειδικά προσαρμοσμένων renderers και υπηρεσιών πλατφόρμας.
Συχνές ερωτήσεις
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 απαιτούνται πρόσθετοι χειριστές για coroutine και sealed class, οι οποίοι διαμορφώνονται μέσω Metadata.xml στο Binding Library.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης