kryssplatform mobilutvikling

49
Kryssplatform mobilutvikling Med .Net og Mono

Upload: runegri

Post on 06-Jul-2015

650 views

Category:

Technology


0 download

DESCRIPTION

Slides fra et kurs jeg holdt for Abakus om Kryss-platform mobilutvikling

TRANSCRIPT

Page 1: Kryssplatform mobilutvikling

Kryssplatform mobilutvikling

Med .Net og Mono

Page 2: Kryssplatform mobilutvikling

Agenda

• Intro, hvorfor kryssplatform

• Intro til .Net og Mono (veldig kort!)

• CrossBox v1

• Pause – vi deler ut en billett til TDC

• Patterns og arbeidsmåter som hjelper oss

• CrossBox v2

• Oppsummering (og litt mer kode hvis tid)

Page 3: Kryssplatform mobilutvikling

Kort om Capgemini

• Internasjonalt konsulenthus

– 112.000 ansatte (!)

– Ca 750 i Norge

– Ca 60 i Trondheim

• Leverer Consulting, Teknologi og Outsourcing

• Fokus på et sterkt fagmiljø

– Gode fagfolk

– Gode muligheter for faglig utvikling

Page 4: Kryssplatform mobilutvikling

Rune da?

• Spesialist på .Net

• Veldig interessert i mobile løsninger

• Har fått en relativt «fri» stilling i Capgemini

– Bruker mye tid på ny teknologi

– Forskning, prøve ut nye metoder

– Målet er å bygge kompetanse på kommende teknologi

Page 5: Kryssplatform mobilutvikling

Kryssplatform?

Page 6: Kryssplatform mobilutvikling

Kryssplatform?

• Gjenbruke mest mulig kode på tvers av platformene

– Dekker ikke alle platformer, fokuserer på de store

• iOS, Android og Windows Phone

– Ikke Symbian, Blackberry eller Bada

• For små eller døende...

Page 7: Kryssplatform mobilutvikling

Kryssplatform?

• Hvilke valg har vi?

– Native kode fungerer ikke

• Objective C, Java, .Net

– HTML5 og Javascript

• Fungerer, men hvor godt?

• Facebook! HTML5 stinker...

– Mono og .Net

• Gir native apper

• Kodes i C# mot .Net framework

Page 8: Kryssplatform mobilutvikling

Kryssplatform?

• Hvorfor .Net og Mono i stedet for «vanlig» native?

– Nok å kunne ett språk, C#

• I stedet for ObjectiveC, Java og C#

– Lett å gjenbruke kode

– Billigere

– Lettere å teste

Page 9: Kryssplatform mobilutvikling

Noen ulemper

• Må sikte på felles egenskaper

– Egenskaper som bare finnes på en platform kan ikke støttes (uten videre)

– F.eks. tiles på WP7

– Eksotisk Android-hardware

– iPhone addons

• Du trenger to maskiner / to OS

– PC / Windows for WP7 / Android

– Mac for iOS / Android

Page 10: Kryssplatform mobilutvikling

Eksempler

• Kolumbus Sanntid

Page 11: Kryssplatform mobilutvikling
Page 12: Kryssplatform mobilutvikling
Page 13: Kryssplatform mobilutvikling

Eksempler

• Bussøyet!

Page 14: Kryssplatform mobilutvikling
Page 15: Kryssplatform mobilutvikling
Page 16: Kryssplatform mobilutvikling

Kryssplatform ala Rune

• Vi må først velge platform vi sikter på

– Typisk:

• iOS / iPhone

• Android-telefoner

• Windows Phone 7 (7.5)

– Kanskje:

• iPad

• Android tablets

• Windows 8 / Metro

Page 17: Kryssplatform mobilutvikling

Kryssplatform ala Rune

• Starter med .Net, C#

– Starter med kode kompilert mot desktop .Net

• Skrive testbar kode

• Enhetstester

– Implementerer så på WP7 siden det er lettest

• GUI for WP7

– Så bruker vi Mono!

• Først Android siden den kjører på PC/Windows

Page 18: Kryssplatform mobilutvikling

Kryssplatform ala Rune

• Til slutt MonoTouch

– iOS. Krever en Mac så vi må bytte...

• Andre versjoner

– Metro / Windows 8?

• Kan bruke C# og .Net

– iPad og Android tablets

• MonoTouch og Mono for Android

Page 19: Kryssplatform mobilutvikling

CrossBox!

... men den kommer vi tilbake til

Page 20: Kryssplatform mobilutvikling

Intro til

... tidenes korteste ...

Page 21: Kryssplatform mobilutvikling

.Net

• .Net er et rammeverk og en platform

• Kjører i en virtuell maskin

– Common Language Runtime (CLR)

– Standardisert og åpen spesifikasjon

• Støtter mange språk

– C#, VB.Net, F#, C++, osv.

• Svært stort og rikt rammeverk

– Veldig mye funksjonalitet innebygd

Page 22: Kryssplatform mobilutvikling

C#

• Et typesikkert og objektorientert språk

• Inspirert av C++ og Java

– Men rikere samtidig som det er enklere

• LINQ

– Language integrated query

– Async

• Åpen spesifikasjon

Page 23: Kryssplatform mobilutvikling

Intro til Mono

... veldig kjapp denne også ...

Page 24: Kryssplatform mobilutvikling

Mono

• Mono er en open source implementasjon av .Net-rammeverket

• Kjører på Linux, Mac, Windows

– iOS, Android

– Diverse rare platformer: Wii, PS3, Amiga OS, +++

• Ganske kompatibel, men ikke 100%

• MonoDevelop er en open source editor som kjører på Mono

Page 25: Kryssplatform mobilutvikling

Mono for Android

• Kjører på Android i parallell med Java-VM’en

• Nesten komplett versjon av Mono

– Støtter avanserte features som Reflection og kodegenerering

• Kan bruke Java-klasser og dele ut komponenter med Java

Page 26: Kryssplatform mobilutvikling

MonoTouch (iOS)

• Kompilerer C# til native kode

– Noen begrensninger

– Ikke kodegenerering

– Svakheter i generics

• Kan kalle ObjC-biblioteker og native kode

Page 27: Kryssplatform mobilutvikling

Windows Phone 7

• Kjører en nedskalert versjon av Silverlight

• Bare asynkrone versjoner av API

– Gir mer responsive applikasjoner

• Mangler noen av funksjonene i .Net framework

• Begrensninger i reflection

Page 28: Kryssplatform mobilutvikling

Kryssplatform .Net

• Må se på hvilke platformer man vil støtte

– Gå for et minste felles multiplum

• Starte på WP7 og unngå kodegenerering

– 99% sikker at koden kjører på alle platformer

• Bør unngå GUI-komponenter i koden

• Abstrahere trådhåndtering dersom det er nødvendig

Page 29: Kryssplatform mobilutvikling

KODE!

... endelig ...

(men ikke gjør dette hjemme)

Page 30: Kryssplatform mobilutvikling

Hvordan lagde vi appen?

• Bruker DropNet for integrasjon mot DropBox

– Kjører på alle tre platformene

– Må registrere app key hos DropBox

• DropNet dekker ikke GUI for autentisering

– Vise webside med riktig URL

– Tre forskjellige måter å gjøre dette på

– Lager et interface som beskriver operasjonen

– Implementerer på hver plattform

Page 31: Kryssplatform mobilutvikling

Programmere mot interface

• Dette er lurt!

• Interface gir operasjonene

– Men vi bryr oss ikke om hvordan de fungerer

– Gjør ingen ting at utførelsen er forskjellig

• Muliggjør mer gjenbruk

Page 32: Kryssplatform mobilutvikling

Svakhetene med løsningen

• Ikke testet

• For lite gjenbruk av kode

• Er vi sikre på at oppførselen er lik på alle platformer?

• Dårlig skille mellom GUI og «forretningslogikk»

Page 33: Kryssplatform mobilutvikling

PAUSE!hvem blir med på TDC?

Page 34: Kryssplatform mobilutvikling

Svakhetene med løsningen

• Ikke testet

• For lite gjenbruk av kode

• Er vi sikre på at oppførselen er lik på alle platformer?

• Dårlig skille mellom GUI og «forretningslogikk»

Page 35: Kryssplatform mobilutvikling

Mål for versjon 2

• Enhetstester av all funksjonalitet

• Gjenbruke all forretningslogikk

• Native GUI for hver platform

• Tydelig skille mellom presentasjon og modell

Page 36: Kryssplatform mobilutvikling

Noen verktøy

• MVVM – patternet

• Enhetstester, NUnit

• MVVM – bibliotek, MVVMCross

Page 37: Kryssplatform mobilutvikling

MVVM

• Model View ViewModel

– (verdens mest krøkkete navn!)

– Baserer seg på MVC

• Skiller mellom

– Model – dataene som skal presenteres

– View – presentasjonen av dataene

– ViewModel – En logisk modell av view som beskriver oppførsel

Page 38: Kryssplatform mobilutvikling

MVVM

• ViewModel skal

– Være testbar

– Beskrive all oppførsel

– Være gjenbrukbar

– Innkapsle data

– Ikke ha knytninger til presentasjon

– Varsle om endringer

Page 39: Kryssplatform mobilutvikling

MVVM

• View skal

– Bare bry seg om presentasjon

– Være platformspesifikk

– Knyttes mot en ViewModel

– Helst ikke ha kode som beskriver oppførsel

• Men det er lov å synde :-)

Page 40: Kryssplatform mobilutvikling

MVVM

• Model skal

– Beskrive data

– Være enkel

– Ikke beskrive oppførsel

Page 41: Kryssplatform mobilutvikling

MVVM

• I tillegg trenger vi

– Services

• IDropBoxClient er et eksempel

– Converters

• Konverterer f.eks. en boolean til et Visibility-objekt

– Infrastructure

• Oppsett av applikasjon

• Navigasjon

• Osv.

Page 42: Kryssplatform mobilutvikling

Hvor brukes MVVM?

• WPF

• Silverlight

• Windows Phone

• Windows 8 / WinRT

• Web / HTML5– Knockout.js, KendoUI

• MVVMCross– iOS, Android

Page 43: Kryssplatform mobilutvikling

MVVMCross

• Kryss-platform MVVM-bibliotek

– Open source

• Kjører på

– WP7

– MonoTouch

– Mono for Android

– WinRT

– Desktop (for testing)

Page 44: Kryssplatform mobilutvikling

MVVMCross

• Gjør det mulig med MVVM på platformene den støtter

• Noen begrensninger

– Litt umoden

– Litt tungvint på iOS

– Trenger kanskje litt tilpasninger

Page 45: Kryssplatform mobilutvikling

(veldig kort om) Enhetstesting

• Bruker Nunit

• Tester oppførsel for ViewModels

• Lager Mock-objekter for tjenester

– IDropBoxClient

• Kjører på desktop

• Tester ikke UI og platformspesifikk kode

– Det er mulig, men vi har ikke tid i dag :-)

Page 46: Kryssplatform mobilutvikling

KODE!

... igjen ...

(og denne gangen blir det bedre)

Page 47: Kryssplatform mobilutvikling

Oppsummering

• Vi har laget en kryss-platform DropBox-klient

– Bruker .Net og Mono

– DropNet for integrasjon mot DropBox

– Egen interface for å abstrahere vekk implementasjon

– Enhetstester

– MVVM-patternet

– MVVMCross

Page 48: Kryssplatform mobilutvikling

Ressurser

• Last ned koden på GitHub:

– https://github.com/runegri/CrossBox

• Test MVVMCross:

– https://github.com/slodge/MvvmCross

• NUnit:

– http://www.nunit.org/

• Intro til MVVM fra StackOverflow:

– bit.ly/8EVvwN

Page 49: Kryssplatform mobilutvikling

Ta kontakt!

• Twitter: @runegri

• GitHub: https://github.com/runegri/

• Epost:

[email protected]

[email protected]

• Presentasjonen kommer på SlideShare