Vor- und Nachteile von Xamarin

Hallo Habr! Heute erzählen wir Ihnen, was Benutzer an Xamarin, unserem plattformübergreifenden Tool zur Entwicklung mobiler Apps, mögen. Darüber hinaus werden wir auf die Mängel der Plattform eingehen. Unter dem Schnitt finden Sie übrigens viele Code- und Illustrationsbeispiele und nicht nur Text mit einer Aufzählung. Jetzt mitmachen!



Dieser Artikel wurde von unseren Partnern, Jungs von EGO, erstellt.

Xamarin ist ein praktisches Toolkit zum Entwickeln plattformübergreifender mobiler Anwendungen in C # mit .NET. Es unterstützt iOS, Android und Windows Phone.

Um eine auf Xamarin basierende Anwendung zu entwickeln, müssen Sie die spezifischen Sprachen der einzelnen Plattformen nicht genau kennen. Wenn Sie mit einer beliebigen Plattform arbeiten, haben Sie außerdem vollen Zugriff auf die Funktionen des SDK und die integrierten Mechanismen zum Erstellen von Benutzeroberflächen.

Auf diese Weise können Sie mit Xamarin Anwendungen erstellen, die sich kaum von ihren nativen Gegenstücken unterscheiden. Dies bedeutet, dass sie sich gut für die Verteilung über offizielle Stores (z. B. Google Play und den App Store) eignen.

Laut den Entwicklern von Xamarin wird die schlüsselfertige Lösung in Bezug auf die Leistung nicht wesentlich schlechter sein.

Betrachten Sie die Komponenten von Xamarin.

  • Xamarin.IOS ist eine C # -Klassenbibliothek, mit der Entwickler auf das iOS SDK zugreifen können.
  • Xamarin.Android ist eine C # -Klassenbibliothek, mit der Entwickler auf das Android SDK zugreifen können.
  • C # -Compiler.
  • .NET Framework
  • IDE-Tools (in Visual Studio für Mac OS und Windows integriert).

Dieser Artikel beschreibt sieben wichtige Gründe für die Verwendung von Xamarin für die plattformübergreifende Entwicklung.



Zusätzliche Materialien: Vergleich von Xamarin und PhoneGap .

1. Leicht zu lernen


Worauf sollten Sie bei der Auswahl einer Plattform zuerst achten? Natürlich die Komplexität seiner Entwicklung. Es ist unwahrscheinlich, dass es viele gibt, die Zeit damit verbringen möchten, die Syntax zu beherrschen (für einen ziemlich sicheren Besitz von Angular müssen Sie diese Plattform beispielsweise mindestens einige Monate lang studieren). Wenn die Erstellung von qualitativ hochwertigem Code eine äußerst ernsthafte Vorbereitung erfordert, schaffen es viele Anfänger einfach nicht, die Entwicklungsumgebung vollständig zu beherrschen. Der Einstieg in Xamarin ist jedoch einfach: Sie müssen die Xamarin-Sprache oder ähnliches nicht lernen.

using Xamarin.Forms; RootPage.Children.Add(new ContentPage { Content = new Label { Text = "Sketches in Forms", BackgroundColor = Color.Yellow, TextColor = Color.Blue, Font = Font.SystemFontOfSize(NamedSize.Large), VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, } }); 

Es reicht aus, die C # -Sprache mit ihrem zwingenden Schreibstil zu kennen, sich in der .NET-Umgebung zu fühlen und verschiedene Klassen zu lernen, die sich auf bestimmte Plattformen beziehen.

 using System.Diagnostics; using Foundation; using UIKit; namespace NeonPlayerConcept.iOS { [Register("AppDelegate")] public class AppDelegate : UIApplicationDelegate { public override UIWindow Window { get; set; } public static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } } } 

Quelle

Um eine vollständig „native“ Anwendung für eine bestimmte Plattform zu erstellen, müssen Sie über ausreichende Kenntnisse in Java (im Fall von Android) oder Objective-C / Swift (für iOS) verfügen. In einigen Fällen kann dies ein ernstes Hindernis sein. Mal sehen, wie dieselbe Aufgabe, bei der eine Attributzeichenfolge erstellt wird, in Objective-C und in C # gelöst wird.

In Ziel-C:

 CFStringRef stringKeys[] * { kCTFontAttributeName, kCTForegroundColorAttributeName }; CFTypeRef stringValues[] * { myListFontRef, COColorGetConstantColor(kCOColorWhite) }; attr = CFDictionaryCreate (kCGAllocatorDefault, (const void **) &stringKeys, (const void **) &stringValues, sizeof(stringKeys) / sizeof(stringKeys[0]), &kCFTypeDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallbacks); astr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR(“Hello from ego team!”), attr); 

In C #:

 var stringAttributes = new CFStringAttributes { Font = myFont, ForegroundColor = UIColor.White.CGColor }; var myString = new NSAttributedString (“Hello from EGO team!”, attrs); 

Wenn Sie die plattformübergreifenden Entwicklungsfunktionen von Xamarin nicht verwenden, müssen Sie möglicherweise zwei verschiedene Ansätze gleichzeitig verwenden, um ein kommerzielles Projekt zu erstellen, das auf beiden Plattformen eine ausreichende Leistung bietet. Dies bedeutet, dass sich die Kosten fast verdoppeln.

2. Reduzieren Sie die Projektkosten


Basierend auf den oben beschriebenen Vorteilen kann festgestellt werden, dass die plattformübergreifende Entwicklung mit Xamarin ungefähr 1,5-mal weniger Zeit (und Geld) erfordert als die Erstellung eines separaten Spezialprojekts für jede Plattform.

Natürlich sind einige Codeteile (z. B. Dienstprogrammkomponenten) in beiden Versionen identisch, und einige andere (insbesondere Geschäftslogik, die die speziellen Funktionen des Benutzergeräts nicht verwendet) erfordern nur geringfügige Änderungen. Die Gesamtsituation ist jedoch etwas komplizierter. Einige Komponenten Ihrer Anwendung müssen zwangsläufig für jedes Betriebssystem von Grund auf neu geschrieben werden. Beim Erstellen und Bereitstellen von zwei Anwendungen für zwei Plattformen müssen fast immer zwei Entwicklungsteams eingestellt werden. Die Verwendung von Xamarin ist viel einfacher:

Dank plattformunabhängiger APIs werden ca. 70% des Codes in einem universellen Format geschrieben.

In diesem Beispiel verwendet die MainPage-Klasse die ITextToSpeech-Schnittstelle, um die gewünschte Funktion auf einer bestimmten Plattform auszuwählen:

 ITextToSpeech.cs: public interface ITextToSpeech { void Speak (string text); } TextToSpeech_Android.cs: [assembly: Dependency (typeof (TextToSpeech_Android))] namespace UsingDependencyService.Android { public class TextToSpeech_Android : Java.Lang.Object, ITextToSpeech { TextToSpeech speaker; string toSpeak; public TextToSpeech_Android () {} public void Speak (string text) { \\Android-specific code } } } TextToSpeech_iOS.cs: [assembly: Dependency (typeof (TextToSpeech_iOS))] namespace UsingDependencyService.iOS { public class TextToSpeech_iOS : ITextToSpeech { TextToSpeech speaker; string toSpeak; public TextToSpeech_Android () {} public void Speak (string text) { … \\iOS-specific code } } } MainPage.cs: public class MainPage : ContentPage { public MainPage [] { var speak = new Button { Text = “Hello, world!”, VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, }; speak.Clicked += (sender, e) => { DependencyService.Get<ITextToSpeech>().Speak("Hello from Xamarin Forms"); }; Content = speak; } } 

3. Möglichkeit, Benutzeroberflächen wie "native" zu erstellen


Einer der Hauptgründe, warum Entwickler plattformübergreifende Entwicklungstools vermeiden, besteht darin, dass Sie mit solchen Tools nicht alle Funktionen bestimmter Umgebungen nutzen können. Dies bezieht sich hauptsächlich auf das Design (Flat Design in iOS, Material Design in Android) und auf die intellektuellen Fähigkeiten der Benutzergeräte (Zugriff auf Kontakte, Kamera, GPS-Daten usw.).

Die endgültige plattformübergreifende Lösung weist keine hohe Leistung auf (dieser Nachteil tritt bei fast allen Anwendungen auf, die mit plattformübergreifenden Web-Tools erstellt wurden) und kann bestimmte Plattformen nicht nutzen (was bedeutet, dass einige ursprünglich vom Projektersteller geplante Funktionen möglicherweise verwendet werden) nicht vollständig implementiert).

Bei Verwendung von Xamarin-Tools für die plattformübergreifende Entwicklung "nativer" Anwendungen ist jedoch alles anders. In diesem Fall treten die oben genannten Probleme nicht auf. Entwicklern stehen nicht nur Standard-.NET-Klassen zur Verfügung: Sie können problemlos Klassen verbinden, die von einer bestimmten mobilen Plattform unterstützt werden (sie sind in den C # -Bibliotheken für Xamarin.Android bzw. Xamarin.iOS enthalten). Dies bedeutet, dass Sie bei der Entwicklung von Anwendungen für iOS und Android mit Xamarin über alle Funktionen dieser Plattformen verfügen. Sie müssen keine Tools von Drittanbietern (und normalerweise kostenpflichtige) verwenden.

4. Optimale Testbedingungen


Das Testen eines Produkts, das für die Veröffentlichung vorbereitet wird, ist keine triviale Aufgabe, insbesondere wenn es um die Android-Plattform geht. Die Bildschirmformate von iOS-Benutzergeräten sind klar definiert und im Voraus bekannt, Android-Geräte sind jedoch sehr unterschiedlich. Wenn die Anwendung nicht auf einem bestimmten Gerät getestet wurde, kann sich ihre Schnittstelle in einigen Fällen "zerstreuen". Die Entwickler von Xamarin haben eine Lösung für dieses Problem vorgeschlagen.

Insbesondere ist Test Cloud auch für Plattformbenutzer verfügbar, mit denen mehr als 2000 Geräte emuliert werden können. Diese Entscheidung ist nicht kostenlos, aber die Kosten werden gerechtfertigt sein.



Zusätzliche Materialien: Neun beste Testtools für mobile Apps für iOS und Android .

5. Perfekte Kompatibilität mit IoT-Geräten


Wenn Ihre Anwendung Daten zum Standort des Benutzers, zum Gyroskop, zum Beschleunigungsmesser oder zu anderen integrierten Sensoren empfangen soll, ist Xamarin eine gute Wahl.

 private void Instance_Ranged(object sender, System.Collections.Generic.IEnumerable<IBeacon> e) { Try { var data = string.Empty; foreach (var beacon in e) { data = $@”region id: {beacon} } _labelContent.Text = data; LogStatus(@”Ranged”); } catch (Exception exception) { LogStatus(exception.ToString()); } } 

Diese Entwicklungsumgebung ist vollständig kompatibel mit IoT-Geräten (z. B. mit Estimote ), mit denen Sie Standortdaten empfangen können. Dies bedeutet, dass Sie die Integration mit Lösungen von Drittanbietern nicht konfigurieren müssen (insbesondere, da dies im Prinzip nicht möglich ist).

6. Qualitätsdokumentation und eine große Community


Für Xamarin steht eine gut organisierte Dokumentation mit praktischen Beispielen, Codefragmenten und schrittweisen Anweisungen zur Verfügung.

Natürlich können einige Fragen darin nicht beantwortet werden. In diesem Fall hilft Ihnen die Online-Community. Es gibt zwei offizielle Xamarin-Communitys: auf der offiziellen Website der Plattform und im StackOverflow-Portal.

Wenn Sie immer noch nicht die benötigten Informationen erhalten (einige Entwickler beschweren sich, dass die Community-Experten nicht sehr aktiv sind), können Sie sich an den privaten technischen Support wenden, der für Inhaber von Xamarin-Geschäftslizenzen verfügbar ist. Spezialisten werden Ihnen in wenigen Stunden antworten und nicht nur eine Reihe von Standardverfahren anbieten, die selten zur vollständigen Behebung des Problems beitragen, sondern auch detaillierte Schritt-für-Schritt-Anweisungen zur Lösung Ihres speziellen Problems.

7. Fehlerfreie Integration mit Microsoft Windows


Fast jedes IT-Unternehmen verfügt über eine entwickelte Infrastruktur für verwendete Software auf der Windows-Plattform.

Für alle Editionen von Visual Studio (für Mac OS und Windows) seit dem Frühjahr 2016 wird Xamarin auch als Teil des Abonnements bereitgestellt. Wenn Sie Visual Studio bereits für die Entwicklung verwenden, müssen Sie keine zusätzlichen Kosten zahlen.

Xamarin Nachteile


Wir haben versucht, ausführlich über die Stärken von Xamarin zu sprechen und eine Reihe seiner offensichtlichen Vorteile untersucht. Wir möchten diese Überprüfung jedoch objektiver gestalten und wenden uns daher den Schwächen der Lösung zu. Tatsächlich verdient nur ein Nachteil Beachtung: Die Größe der mit Xamarin geschriebenen Anwendungen übersteigt normalerweise geringfügig das Volumen der nativen Gegenstücke. Trotzdem ist eine Optimierung niemals überflüssig.

Wie effektiv ist Xamarin?


Xamarin bietet mehrere Vorteile und eignet sich hervorragend für Großprojekte zur Entwicklung plattformübergreifender Anwendungen, deren Architektur ähnlich komplex ist wie bei nativen Lösungen.

Source: https://habr.com/ru/post/de415833/


All Articles