Xamarin-Formen in Aktion. Medchest Assistent

  • Tutorial

Gepostet von Konstantin Mars

Als wir bei Medtech Hackathon ankamen , war es unser Ziel, ein einfaches und leichtes Tool für Benutzer zu entwickeln, die ein Erste-Hilfe-Konto führen und rechtzeitig benachrichtigt werden möchten, wenn neue Medikamente auslaufen.

Wir zögerten lange mit der Wahl einer Plattform zwischen populärem und prestigeträchtigem iOS und modisch, modern und erfreulich in der Android-Entwicklung. Daher schlug ich vor, Xamarin zu verwenden, das übrigens C # als Hauptentwicklungssprache verwendet (und dies ist die Hauptsprache, in der der Organisator unseres Teams Arseniy im Alltag schreibt). So machten wir uns mit Xamarin auf den Weg in die Welt der plattformübergreifenden Entwicklung.

Ich stelle fest, dass Xamarin ursprünglich auf dem Mono-Framework basierte und sich daher etwas vom ursprünglichen Microsoft .NET-Framework unterscheidet. Wir werden diese Unterschiede jedoch etwas später erörtern.

In diesem Artikel werden wir nicht auf die Details des Hackathons eingehen und uns nicht mit den beruflichen Geheimnissen der Entwicklung mit Xamarin befassen. Dieser Artikel ist eine grundlegende Einführung in die Welt der plattformübergreifenden Entwicklung mit Xamarin Forms. Der Zweck des Materials besteht darin, eine allgemeine Vorstellung davon zu vermitteln, wie sich Xamarin schnell entwickeln lässt, und anzugeben, wo in Zukunft nach Antworten auf spezifischere Fragen gesucht werden soll.

Die Architektur des Projekts. PCL


Xamarin Forms basiert auf einem allgemeinen plattformübergreifenden Code und kann nach einem der Architekturansätze erstellt werden: PCL (Portable Class Library) oder SAP (Shared Assets Project). Plattformabhängige Projekte sind ein integraler Bestandteil von Xamarin-Lösungen, die zusammen mit dem gemeinsamen Code-Projekt aufgerufen und in die Lösung eingefügt werden.

In unserer Anwendung haben wir beispielsweise die folgenden Projekte:



Wie Sie sehen, gibt es Projekte für Android (Droid) und iOS, ein separates Projekt für AndroidWear (es wird ordnungsgemäß zusammen mit der Android-Anwendung auf einer Smartwatch installiert, führt jedoch noch keine nennenswerten nützlichen Arbeiten aus, mit Ausnahme der Demonstration der Funktionen des Xamarin-Frameworks zum Erstellen von AndroidWear-Projekten). Es gibt auch ein Projekt der VuforiaBindings-Bibliothek (Java-Wrapper, der als Integrator der Vuforia Java-Bibliothek zur Muster- und Texterkennung konzipiert wurde). Dies sind Beispiele für die wichtigsten Projekttypen, die bei der Entwicklung mit Xamarin am häufigsten vorkommen.

Xamarin-Formen. Xaml


Der Hauptvorteil der Entwicklung von Anwendungen mit Xamarin ist für mich die Möglichkeit, Benutzeroberflächen für mehrere Plattformen gleichzeitig zu erstellen. Mit Xamarin können Sie separate XML-Formulare für plattformspezifische Projekte erstellen und die Benutzeroberfläche für verschiedene Plattformen unterschiedlich gestalten. Der Hauptansatz besteht jedoch darin, mit Xamarin Forms zu beginnen und eine XML-Benutzeroberfläche zu erstellen, die auf allen unterstützten Plattformen gleich funktioniert.

Dies wurde ermöglicht, weil jedes plattformabhängige Projekt Code aus einem gemeinsamen Projekt startet, indem ein kleines Stück Code eingefügt wird, das für Xamarin Forms spezifisch ist.
In einem Android-Projekt geschieht dies beispielsweise in MainActivity folgendermaßen:

global::Xamarin.Forms.Forms.Init (this, bundle); 


In einem iOS-Projekt:

global::Xamarin.Forms.Forms.Init (); 


Wenn Sie sich das MainActivity-Projekt für AndroidWear ansehen, werden Sie dort keine Informationen zu Xamarin Forms finden. Dies liegt daran, dass das Projekt für diese Plattform noch nicht von Xamarin Forms unterstützt wird und es sich um ein "sauberes" plattformspezifisches Projekt handelt, das in C # geschrieben wurde.

Das UI-Markup in Xamarin Forms heißt XAML. Alles hier ist dem „klassischen“ .NET (WPF) sehr ähnlich:



Innerhalb von XAML sieht es auch für diejenigen, die Erfahrung mit .NET haben, recht vertraut aus:


            
            
                
                
                
                
             


Die Schlüsselfunktionalität von Bindungen basiert auf denselben Prinzipien wie Bindungen in WPF:


                
                    
                        
                            
                                
                            
                        
                    
                
            


Wir posten einfach “{Binding } ”In XAML anstelle eines festen Wertecodes.

Das Hauptproblem für Xamarin-Entwickler, die in Xamarin Studio (z. B. unter Mac OS) arbeiten, ist das Fehlen eines geeigneten visuellen UI-Editors. Es ist seltsam, dass das Studio Entwicklern gleichzeitig visuelle Editoren für bestimmte Plattformen wie Android und iOS zur Verfügung stellt, aber leider nicht für Xamarin Forms.





DependecyService. Plattformspezifische Funktionen und Xamarin-Formulare


Wenn es darum geht, etwas Plattformspezifisches zu implementieren (z. B. Benachrichtigungen), können wir nicht mehr auf plattformspezifischen Code verzichten.
Dies ist unvermeidlich - schließlich werden die gleichen Benachrichtigungen für Android und iOS sehr unterschiedlich implementiert, und dieser Unterschied drückt sich in vielen Nuancen des Funktionsverhaltens aus. Aber wie kann man dann solchen plattformspezifischen Code von der Benutzeroberfläche aus aufrufen, der allen plattformspezifischen Projekten gemeinsam ist?

Hier kommt der DependencyService ins Spiel.
Wie in der plattformübergreifenden Entwicklung üblich, müssen Sie eine Schnittstelle in einem gemeinsamen Projekt deklarieren und in plattformspezifischen Projekten implementieren. Die einzige Frage wird sein, wie man bestimmt, welche Implementierung in jedem Fall aufgerufen werden soll. Und dann übernimmt DependencyService, die magische Figur im Xamarin-Framework, den Job. Abhängig davon, für welche Plattform wir das Projekt erstellen, ersetzt DependencyService die erforderliche Implementierung für die Schnittstelle.
Es ist auch erwähnenswert, dass Sie die Annotation Xamarin.Forms.Dependency verwenden müssen, damit diese Magie funktioniert:

[assembly: Xamarin.Forms.Dependency (typeof (NotificationHelperImpl))]


Die Benachrichtigungsschnittstelle, die im allgemeinen Xamarin Forms-Projekt deklariert ist, sieht beispielsweise folgendermaßen aus:

namespace MedChestAssistant
{
    public interface INotificationHelper
    {
        void notify(String message);
    }
}


Und die plattformspezifische Implementierung in einem Android-Projekt sieht folgendermaßen aus:

[assembly: Xamarin.Forms.Dependency (typeof (NotificationHelperImpl))]
namespace MedChestAssistant.iOS
{
    public class NotificationHelperImpl: INotificationHelper
    {
        #region INotificationHelper implementation
        public void notify (string message)
        {
            var notification = new UILocalNotification();
            // set the fire date (the date time in which it will fire)
            notification.FireDate = NSDate.FromTimeIntervalSinceNow(5);
            // configure the alert
            notification.AlertAction = "Medical Chest Reminder";
            notification.AlertBody = "Lyrica will expire in 2 days. Don't forget renew it";
            // modify the badge
            notification.ApplicationIconBadgeNumber = 1;
            // set the sound to be the default sound
            notification.SoundName = UILocalNotification.DefaultSoundName;
            // schedule it
            UIApplication.SharedApplication.ScheduleLocalNotification(notification);
        }
        #endregion
        public NotificationHelperImpl ()
        {
        }
    }
} 


Im Allgemeinen ist alles ganz einfach :).

Abhängigkeiten. Pakete. NuGet Galerie


Xamarin verfügt über eine ziemlich umfangreiche Paketbibliothek, die mit unterstützten Plattformen kompatibel ist - NuGet. Zum Beispiel kann jemand, der Barcode-Erkennung und -Scannen benötigt, das Xamarin-kompatible Zxing-Paket verwenden.



Nach dem Hinzufügen des Pakets wird es in der Liste der verbundenen Projektpakete angezeigt.
Hier ist zum Beispiel der plattformübergreifende Teil des Zxing-Pakets in unserem plattformübergreifenden Projekt Xamarin Forms:



Manchmal (zum Beispiel für die Zxing-Bibliothek) müssen wir auch eine plattformspezifische Initialisierung implementieren. Für Zxing müssen Sie solche Zeilen beispielsweise zu Beginn plattformspezifischer Anwendungen ausführen:

Android:

ZXing.Mobile.MobileBarcodeScanner.Initialize (Application);


iOS:

ZXing.Net.Mobile.Forms.iOS.Platform.Init();


Für die Standardfunktionalität ist außerdem eine plattformspezifische Initialisierung erforderlich.
Beispielsweise erfordern Benachrichtigungen in iOS die Deklaration der unterstützten Formate beim Start der Anwendung (dies geschieht immer in nativem iOS, und Xamarin deckt einfach die vorhandenen Besonderheiten ab):

if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
                var notificationSettings = UIUserNotificationSettings.GetSettingsForTypes (
                    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, null
                );
                app.RegisterUserNotificationSettings (notificationSettings);
            }


Dies ist der gesamte kurze Überblick über die Entwicklungsmöglichkeiten mit Xamarin.

Den Quellcode unseres Projekts vom Hackathon finden Sie hier: https://github.com/DataArt/MedChestAssistant.git

Beachten Sie, dass dies nur Code ist, der in kurzer Zeit auf dem Hackathon geschrieben wurde. Daher werden hier nur einige wichtige Funktionen von Xamarin behandelt. Sie finden hier keine im Hintergrund laufenden Dienste, komplexe Architekturmuster, Unit-Tests oder Dependency-Injection, die natürlich in kommerziellen Projekten benötigt werden. Unsere Anwendung soll zeigen, wie Sie mit dem hervorragenden plattformübergreifenden Tool Xamarin schnell und einfach bestimmte Aufgaben in kurzer Zeit lösen können.

Wenn Sie mehr über Xamarin erfahren möchten, lesen Sie das offizielle Microsoft-Buchhttps://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/
und besuchen Sie das Xamarin-Portal, um die neuesten plattformübergreifenden Entwicklungsrezepte zu erfahren. https://developer.xamarin.com/guides / xamarin-forms / erstelle-mobile-apps-xamarin-forms /

Viel Glück in der plattformübergreifenden Welt! Und neue Erfolge mit Xamarin! :)

Jetzt auch beliebt: