Mobile .NET Entwicklung mit Xamarin 2.0 -

Slides:



Advertisements
Ähnliche Präsentationen
Eclipse.
Advertisements

Softwareentwicklung für Android
Design- und Entwicklungswerkzeuge
Neue Mobilität Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH
Web Matrix Project Kurzüberblick Dirk Primbs Technologieberater Developer Platform Strategy Group Microsoft Deutschland GmbH.
Neuerungen in PalmOS® 5 Florian Schulze (SS 2003).
Übung 5 Mehrstufige Client/Server-Systeme mit Enterprise Java Beans
Daniel Höfler Markus Thurner XMLApplicationPlatform Siemens OpenStage 60/80.
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Das Build-Tool ANT ETIS SS05. ETIS SS05 - Nadine FröhlichANT 2 Gliederung Motivation Build - Datei –Allgemeiner Aufbau –Project –Target –Task –Properties.
Introducing the .NET Framework
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Mono und andere freie.NET Implementierungen. Implementierungen Microsoft.NET Framework Win32, Win64? Microsoft.NET Compact Framework WinCE (Mobile, Phone)
Projekt Web Engineering
Uwe Habermann Venelina Jordanova dFPUG – Silverlight Wizard.
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
MSDN Webcast: VB.NET für Einsteiger und Umsteiger, Teil 10 Die erste, eigene Klassenbibliothek (Level 100) Presenter: Daniel Walzenbach Technologieberater.
Open Services Gateway Initiative
Eine Präsentation von Dario Müller © 2012
Silverlight Eine Einführung. Agenda 1.Was ist Silverlight? 2.Die Silverlight Philosophie 3.Vorstellung des Szenarios 4.Einführendes Beispiel 5.Konzepte.
Wie und wann verwendet man WPF?
Clustered Neuronal Network A C#.NET project for Compute Cluster Server 2003.
EIDAMO ® Frontend Das neue Frontend gibt Ihnen 100% Flexibilität, und weil es auf verschiedene Framework Biblieotheken basiert, können Sie praktisch.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 12 Folie 2 Web Services (1)
Android-App/NerdKalender
Daniel Yves Ostwald …vor 6 Monaten Bob C# Silverlight ! ASP.NET WCF ? iPad Objective C HTML 5 In 3 Tagen ! Mono.
Java und Eclipse.
Michael Köster User Experience Specialist Microsoft Corporation.
Consulting and Solutions.NET Vortragsreihe – Vorstellung der Referenten Happy Arts Software Markus Kämmerer IT-Erfahrung seit 1987,
Präsentation von Sonja Pathe
Brand my SharePoint Grafische Gestaltung von SharePoint-Webseiten
Umweltdaten via Smartphone
App-Entwicklung mit HTML5, CSS und JavaScript
Your name Bedeutung von Internet- Technologien Gruppe 1 Andreas Feuerstein Philipp Hochratner Christian Weinzinger.
© Zühlke 2012 Romano Roth & Oliver Brack iOS, Android, WP7... Alle nativ auf einen Streich! Romano Roth und Oliver Brack 7. Mai 2012 Folie 1.
Entwickeln von Windows Phone Unternehmens-Apps
Reiner Ganser Solution Architect 1stQuad Solutions GmbH Presentation Subtitle.
Agenda 13: Begrüßung & Einführung in das Thema
Windows Presentation Foundation WS 2013/14 Prof. Dr. Herrad Schmidt
Sesame Florian Mayrhuber
Uwe Habermann Venelina Jordanova Professioneller Einstieg in eine neue Welt!
Kay Detering. Windows 8 Umfassende Cloud- Integration Basiert auf bewährtem Fundament Windows Store Performance Touchscreen, Maus & Tastatur Internet.
Romano Roth & Oliver Brack Zühlke. Entscheider Projektleiter Entwicklungsleiter Softwarearchitekten Der Vortrag setzt keine technische Kenntnisse von.
Phonegap/Cordova Plattformübergreifende mobile Anwendungen
© Zühlke 2012 Romano Roth & Oliver Brack iOS, Android, WP7... Alle nativ auf einen Streich! Romano Roth und Oliver Brack 24. September 2012 Folie 1.
Uwe Habermann Venelina Jordanova dFPUG-CeBIT-Entwicklertreffen
VU Semistrukturierte Daten 1
Ausgabe vom Seite 1, XML Eine Einführung XML - Eine Einführung.
Oliver Lietz – Mobile Software Mobile Software Ausgewählte Themen Software (ATS) Beuth-Hochschule SS 2010 Oliver Lietz Dipl.-Ing.
Google Android.
Neuerungen in Java 5/6/7. Stefan Bühler für InfoPoint Überblick Java 5 neue Sprachfeatures Erweiterungen Klassenbibliothek Java 6 Erweiterungen.
© Zühlke 2012 Oliver Brack Romano Roth iOS, Android, WP7: Alle nativ auf einen Streich Fragenkatalog zu umgesetzten Apps 27. September 2012 Folie 1.
Romano Roth & Oliver Brack Zühlke Engineering AG.
Kaseya Virtual System Administrator Produkt Update 7.0 Rocco van der Zwet Copyright ©2014 Kaseya 1.
Typo 3 // Templa Voila * Was? * Warum? * Wie? - Praktische Übung.
Web und Mobile Apps Programmieren Marco Jakob Kurzvortrag OSS an Schulen
© Zühlke 2013 Oliver Brack Workshop 6 (ws6C) native Entwicklung für mobile Geräte Mono 11. März 2013 Folie 1.
© Zühlke 2013 Romano Roth Workshop 6 (ws6C) native Entwicklung für mobile Geräte Lektion 5-6: Mega CRM 25. Februar 2013 Folie 1 von 10.
© Zühlke 2013 Romano Roth Workshop 6 (ws6C) native Entwicklung für mobile Geräte Einführung 18. February 2013 Folie 1 von 26.
© Zühlke 2013 Philipp Kälin Workshop Entwickeln von Apps für die Android Plattform 29. April Mai Mai April 2013.
Microsoft Silverlight Autor: Christian Pirker. Inhalt Einführung Silverlight Einführung XAML Silverlight 1.0 und 1.1 Silverlight 2.0 Silverlight 3.0 Ausblick.
CEO BITFORGE AG RETO SENN.
Voraussetzungen Wichtig: Bitte Xamarin Studio, SDK’s und Emulatoren vor dem Workshop installieren Xamarin Studio 5.9 ( Xamarin Business.
Mobile-Applikationen mit Agisviewer-Technologie Urs Richard, Stadtlandfluss.
Entwurf, Implementierung und Test eines Java – Web Services als Kommunikationsschnittstelle für Webapplikationen mit Funktionen.
Seminararbeit Release Management von Web-Systemen Minh Tran Lehrstuhl für Software Engineering RWTH Aachen
Einführung in das mobile Betriebssystem Android 1 Einführung in das mobile Betriebssystem Android „ We're talking about a platform where for the first.
Cubido business solutions gmbh Haidfeldstrasse 33 A-4060 Leonding di(fh) Wolfgang Straßer ° Rundumblick.
Workshop 1 Getting Started 2016 Boris Wylutzki
 Präsentation transkript:

Mobile .NET Entwicklung mit Xamarin 2.0 - plattformunabhängig und doch nativ? Marian Grzesik Software2Business GmbH

Agenda Native vs. webbasierte Softwareentwicklung Beispiel „Hello world“ Installation Xamarin 2.0 / Android Wie funktioniert der Crosscompiler? Vor und /-Nachteile des Crosscompilers Beispiele mehrere Views, unterschiedliche Auflösungen, Controls, Internationalisierung, Services WCF, Rest, Java Aufrufe MVVM / Binding Tipps für Cross-Plattform Entwicklung

Native vs. webbasierte Softwareentwicklung Web-Apps Pro: laufen auf mehreren Plattformen bekannte Technologie HTML5 / CSS3 / JavaScript einfaches Update Contra: nur eine begrenzte Möglichkeit die Geräteeigenschaften zu nutzen (Hardware / API) ungeeignet für performance-kritische Anwendungen HTML / CSS3 - kann auf unterschiedlichen Plattformen unterschiedliche Ergebnisse liefern

Native vs. webbasierte Softwareentwicklung Native-Apps: Pro: kann alle Geräteeigenschaften nutzen geeignet für eine komplexe GUI / BL beste Performance können im Store verkauft werden Contra: meistens nur für eine Plattform eine bestimmte Sprache notwendig teurer in der Entwicklung

Native vs. webbasierte Softwareentwicklung Tools für Web-Apps Phonegap / Appcelerator Titanium / Sencha Touch … versuchen die Vorteile beide Methoden, Web / Native zu vereinen. Tools für native Apps: Visual Studio (WP7 / 8 / Windows Store) – C# / C++ … Eclipse / Android SDK – Java Xcode / iOS – Objective-C

Native vs. webbasierte Softwareentwicklung Native Apps mit Crosscompiler Xamarin (Mono) Android, iOS, Mac Tools - Visual Studio, Xamarin Studio Sprache - C#

Beispiel – „Hello world“

Installation Xamarin 2.0 / Android

Installation Xamarin 2.0 / Android

Installation Xamarin 2.0 / Android Setup – Android SDK Manager – AVD Manager Emulator-Unterstützung für x86 installieren! Android SDK Tools, Revision 17 oder höher Android x86-based system image Virualisierung im BIOS einschalten (+ Execute Disabled Bit – ausschalten -> Problem mit WP8 Emul.) sc query intelhaxm -> so überprüft man, ob der Emulator funktioniert

Installation Xamarin 2.0 / Android Handy-Setup für Debugging http://www.handy-faq.de/forum/nexus_4_forum/270647- lg_nexus_4_entwickleroptionen_aktivieren.html http://docs.xamarin.com/guides/android/deployment%2c_testing%2c_and_metrics /set_up_for_device_development Usb driver im Device Manager einstellen - C:\Users\Marian.GRZESIK\AppData\Local\Android\android- sdk\extras\google\usb_driver

Wie funktioniert der Cross-Compiler? Basiert auf Mono – Open-Source Implementierung von .NET (ECMA Standard) Xamarin.iOS – Ahead-of-Time (AOT) Compiler – kompiliert direkt zum nativen ARM Assembly Code .NET Framework wird hinzugefügt (nur benötigte Funktionen) Apple verbittet Code Generation Xamarin.Android - kompiliert zum IL Code, der zur Laufzeit mit Just-in-Time (JIT) zu nativen Assembly Code umgewandelt wird läuft parallel mit Java/Dalvik Java Aufrufe mit JNI Beide Systeme unterstützen Sachen wie: Speicherallokation Garbage Collection Aufrufe der nativen SDK Schnittstelle, etc.

Wie funktioniert der Cross-Compiler? Android – Mono ruft einige Funktionen direkt vom Linux Die meisten Android-Aufrufe werden aber von Delvik Java API aufgerufen mit Hilfe von Java Native Interface (JNI)

Wie funktioniert der Cross-Compiler? Beide Systeme unterstützen eine Untermenge der .NET BLC (Xamarin Mobile Profile) -> ähnlich wie Silverlight 4.0 Profil Als Output bekommt man ein .app File für iOS oder ein .apk File für Android

Wie funktioniert der Cross-Compiler? Beschränkungen iOS Wegen dem statischen Compiler sind Generics nur begrenzt möglich Generics Methods nur mit reference types Value types sollten max. 12 bytes groß sein (small value type) Keine Generics Types, die von NSObjects abgeleitet sind Keine Value Types für Dictionary Keys Keine dynamische Code-Generierung (Emit) Kein Remoting

Wie funktioniert der Cross-Compiler? Beschränkungen Android Die Beschränkungen werden wegen der Generierung der Java Proxy Types in der statischen Analyse verursacht Keine dynamische Sprachen möglich (IronPhyton…) ACW ist nur für Funktionen die virtuell sind; Konstruktor darf keine default Werte beinhalten Andoroid.OS.IParcelable und Java.IO.ISerializable – sind nicht implementiert Java Gererics werden nur partiell unterstützt

Beispiel – GUI im Code und als XML

Anatomie von Android Applikationen

Anatomie von Android Applikationen Activities – repräsentieren Views; alle Activities sind unabhängig voneinander Services – Hintergrundprozesse Context – ermöglicht Aufrufe von OS Intents – Meldungen, die ermöglichen Aufrufe, wie der Start von Activities AndroidManifest.xml – beinhaltet Info über die Applikation, wie Activities, Intents, Rechte…

Beispiel – mehrere Views & Layouts

Daten zwischen Activieties übergeben über statische Variablen über Intent.PutExtra Beispiel App4

Auflösung, Größe, Pixel-Dichte Konzepte für die Unterstützung mehrere Bildschirme Bildschirmgröße – physikalische Größe des Bildschirms (in Zoll) Bildschirmdichte – die Anzahl der Pixel / Zoll (dpi) Auflösung – die Anzahl der Pixel auf dem Bildschirm Orientierung (portrait, landscape) Density-independent Pixel (dp) – damit kann die Größe unabhängig von der Bildschirmdichte aufgebaut werden (px = dp * dpi/160) Scale-independent Pixel (sp) – wie dp Pixel aber für Fonts

Auflösung, Größe, Pixel-Dichte Display-Orientierung Default – kein zusätzliches Layout Resources / Layout Separates Layout für Landscape Resources / layout-land Der Name des Layouts muss gleich bleiben Beispiel – RotationDemo (Xamarin)

Auflösung, Größe, Pixel-Dichte Auflösung und Größe

Auflösung, Größe, Pixel-Dichte Low density (120), ldpi Medium density (160), mdpi High density (240), hdpi Extra high density (320), xhdpi Small screen QVGA (240x320) 480x640 Normal screen WQVGA400 (240x400) WQVGA432 (240x432) HVGA (320x480) WVGA800 (480x800) WVGA854 (480x854) 600x1024 640x960 Large screen WVGA800** (480x800) WVGA854** (480x854) WVGA800* (480x800) WVGA854* (480x854) 600x1024 Extra Large screen 1024x600 WXGA (1280x800)† 1024x768 1280x768 1536x1152 1920x1152 1920x1200 2048x1536 2560x1536 2560x1600

Auflösung, Größe, Pixel-Dichte Ohne Berücksichtigung der Pixeldichte Mit Berücksichtigung der Pixeldichte

Auflösung, Größe, Pixel-Dichte Für alle unterstützten Pixeldichten muss eine Resource geben: Beispiel – MultiResolution (Xamarin) Icon – Converter -> http://android-ui-utils.googlecode.com/hg/asset-studio/dist/icons- launcher.html#foreground.space.trim=1&foreground.space.pad=0&foreColor=33b5e5%2C0&crop=0&backgroundShape=none&backColo r=ffffff%2C100

Auflösung, Größe, Pixel-Dichte Bildschirmgröße - 320dp: phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc). 480dp: a tweener tablet (480x800 mdpi). 600dp: a 7” tablet (600x1024 mdpi). 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc). Für alle unterstützten Pixeldichten muss ein Layout geben: res/layout/main_activity.xml           # For handsets (smaller than 600dp available width) res/layout-sw600dp/main_activity.xml   # For 7” tablets (600dp wide and bigger) res/layout-sw720dp/main_activity.xml   # For 10” tablets (720dp wide and bigger)

Auflösung, Größe, Pixel-Dichte Bildschirmgröße - 426dp x 320dp is small 470dp x 320dp is normal 640dp x 480dp is large 960dp x 720dp is xlarge Für alle unterstützten Pixeldichten muss ein Layout geben:

Controls - Binding Datenbindung Einfache Controls – durch setzten der Properties Komplexe Controls Data Adapter – eine Brücke zwischen Daten und der Adapter View. Adapter View – unterstützt ein dynamisches Generieren von Kinder-Views für alle Elemente vom Data Adapter Beispiel - AppListAdapter

Internationalisierung Für die Resource (String.xml) muss eine lokalisierte Version geben: Beispiel AppInternationalization

Styles und Themes Styles direkt als Eigenschaften eines Controls <TextView     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:textColor="#00FF00"     android:typeface="monospace"     android:text="@string/hello" /> Selbstdefinierte Styles <TextView     style="@style/CodeFont"     android:text="@string/hello" /> Es gibt keine Templates wie im XAML

Styles und Themes Theme anwenden Theme definieren Beispiel AppStyles <application android:theme="@style/CustomTheme"> Theme definieren <color name="custom_theme_color">#b0b0ff</color> <style name="CustomTheme" parent="android:Theme.Light">     <item name="android:windowBackground">@color/custom_theme_color</item>     <item name="android:colorBackground">@color/custom_theme_color</item> </style> Beispiel AppStyles

Hardware – Beispiel mit NFC Near Field Communication (NFC) NFC Basic – kann nur mit dem NDEF (NFC DataExchange Format) arbeiten Lesen / Schreiben NDEF Daten vom NFC Tag Datenaustausch zwischen zwei Geräten (Android Beam) Advanced NFC Wie NFC Tag‘s funktionieren Lesen und parsen den Tag um den Mime Typ oder die URI zu finden Verbinden den Mime Typ / URI mit einem Intent (Intent-Filter) Starten einer Ativity, die mit dem Intent verbunden ist Beispiel NfcSample (Xamarin)

Hardware – Camera Beispiel – CameraAppDemo (Xamarin) Benutzt eine default App für die Fotoaufnahme Emulator – benutzt die WebCam

Java-Integration Java Bindings Library Java Native Interface (JNI) – Wrapper für .jar Files Java Native Interface (JNI) – erlaubt Java calls von anderen Sprachen in beide Richtungen Code zu C# portieren Manuell Tool Sharpen

Java-Integration Beispiel – OsmDroidBindingExample (Xamarin)

Activity Lifecycle

Activity Lifecycle Daten lesen Daten speichen Beispiel - AppLifeCycle OnCreate Daten speichen OnPause – speichern von persistenten Daten, Resourcen freigeben… OnSaveInstanceState – speichern von temporären Daten Beispiel - AppLifeCycle

Services Es gibt folgende Typen von Services Started Service – für lang-laufende Tasks, ohne Interaktion Bound Service – für Task, die Interagieren mit z.B. Activities Eine Mischung von beiden

Started Service Lifecycle Der Lifecycle is unabhängig von der aufrufenden Komponente

Started Service Der Service läuft auf dem Main Thread! Alle lang-laufende Task müssen in einem separatem Thread laufen Der Service-Lifecycle ist von seinem Aufrufer unabhängig Keine Kommunikation zum Service möglich Beispiel DemoService (Xamarin)

Bound Service Lifecycle

Bound Service Der Service läuft auf dem Main Thread! Alle lang-laufende Task müssen in einem separatem Thread laufen Der Service-Lifecycle ist von seinem Aufrufer abhängig Kommunikation mit dem Service möglich Beispiel DemoService (Xamarin)

Web Services Unterstützte Web Services REST Service WCF Service (nur BasicHttpBinding) SOAP Service (SOAP 1.1 / HTTP, ASMX)

Web Services REST Services Beispiel AppRestService Aufrufmöglichkeiten HttpWebRequest / WebClient RestSharp Hammock NSURL Connection ServiceStack XML / JSON Parser System.Xml / System.Json / System.Xml.Linq NewtonSoft Json.NET ServiceStack.Text Beispiel AppRestService

Web Services WCF nur basicHttpBinding möglich Proxy- Generierung mit dem Silverlight Tool SlSvcUtil.exe Beispiel MyWcfService (WCF Service) und AppWcfService

Components Fertige Komponente Alle Komponente beinhalten eine Anleitung, wie man sie benutzt

Cross-Plattform Entwicklung Wichtigste Elemente der Cross-Plattform: C# Mono .NET Framework Compiler IDE Tools Visual Studio Plug-in Xamarin Studio

Cross-Plattform Entwicklung Plattform SDK iOS Xamarin.iOS entspricht Apple‘s CocoaTouch SDK MonoTouch.UIKit entspricht UIKit Framework Mac Rechner ist notwendig Apple‘s Developer Licenz ist notwendig Android Xamarin.Android entspricht Google‘s Android SDK Windows Phone – direkt vom Microsoft

Cross-Plattform Entwicklung User Interface Unterschiedlich für jede Plattform Controls können per Code erzeugt werden Visual Designer iOS – im Moment nur in Verbindung mit Xcode Android – in Xamarin Studio und in Visual Studio Windows Phone - Blend

Cross-Plattform Entwicklung Wiederverwendung von Code und Bibliotheken C# Sourcen – Beispiel -> SQLite.NET .NET Library Objective-C Bindings .jar Bindings C via PInvoke

Cross-Plattform Entwicklung Code – Sharing File-Linking für jedes Projekt Portable Class Libraries (PCL) einige Einschränkungen nur partiell unterstützt von Xamarin

Cross-Plattform Entwicklung Multi-Layer Architektur Core Project (für alle Plattformen wiederverwendbar) Data Layer Data Access Layer Service Access Layer Business Layer Plattformspezifische Projekte Application Layer User Interface Layer

Cross-Plattform Entwicklung Beispiel einer Multi-Layer Architektur

Plattformunterschiede managen Plattformabstraktion Klassenabstraktion Interface Ableitung Patterns, wie Provider Pattern, Plug-In Pattern Xamarin.Mobile Library für Cross-Plattform MediaPicker Geolocation AddressBook andere Cross-Plattform Libraries MvvmCross MonoCross MonoGame

Plattformunterschiede managen Implementierung vom plattformabhängigen Code bedingte Kompilierung iOS – kein Flag ( selber definieren) Android __ANDROID__ __ANDROID_11__ Windows Phone - WINDOWS_PHONE oder SILVERLIGHT

Tipps für Code Sharing Data Layer Dateisystem Netzwerk SQLite schwierig zu sharen, weil die OS Eigenimplementierung sehr unterschiedlich sind WP braucht die C#SQLite Library ADO.NET – eine bessere Alternative für SQLite SQLite.NET – Cross-Plattform ORM Dateisystem für jede Plattform separat implementieren Netzwerk WebClient HttpWebRequest WebServices (REST, SOAP, WCF) Netzwerkeigenschaften - für jede Plattform separat implementieren

Tipps für Code Sharing Threading Parallel Task Library

MvvmCross Framework MVVM Framework für mobile Plattformen Unterstützte Platformen Silverlight for WP7, WP8 Mono for Android (or Xamarin.Android) MonoTouch for iOS (or Xamarin.iOS) the WinRT XAML framework for Windows 8 Store apps. WPF Mono for Mac (or Xamarin.Mac) nutzt Portable Class Libraries und C# für Cross-Plattform Entwicklung Beispiel MvvmCross-TipCalc

Testen Testen im Emulator Testen auf der Hardware Testen in der Cloud verschiedene OS Versionen verschiedene Geräte Testen auf der Hardware Testen in der Cloud http://xamarin.com/test-cloud http://www.perfectomobile.com/ http://www.keynotedeviceanywhere.com/ http://testdroid.com/product/testdroid-cloud#0

Testen Unit Tests iOS – Touch.Unit, NUnitLight Android – Andr.Unit Windows Phone - mehrere

Literatur, Links http://xamarin.com/ http://developer.android.com https://developer.apple.com Bücher: Professional Android Programming with Mono for Android and .NET/C# Professional iPhone Programming with MonoTouch and .NET/C# Professional Cross-Platform Mobile Development in C#

DANKE! Marian Grzesik Software2Business GmbH