SlideShare una empresa de Scribd logo
1 de 55
Współdzielenie kodu aplikacji
Windows Phone i Windows 8
...czyli dwie pieczenie na jednym ogniu
Bartłomiej Zass
Technical Evangelist | Microsoft
 Poznasz różne strategie pisania przenośnego kodu
dla smartfonów i tabletów (nie tylko Microsoft i nie tylko w C#!)
 Zrozumiesz podobieństwa i różnice między platformami
Windows Phone 8 i Windows 8
 Poznasz podstawy wzorca Model-View-ViewModel
 Zastosujesz Portable Class Libraries do wyodrębnienia wspólnej
logiki
aplikacji Windows Phone i Windows 8
Cel sesji
 Różne strategie pisania kodu przenośnego
 HTML i JavaScript – jQuery Mobile, PhoneGap
 C#
 Windows Phone 8, Windows 8 – podobieństwa i różnice
 Architektura aplikacji - MVVM i Portable Class Libraries
Plan prezentacji
Dlaczego HTML i Javascript?
 Jedyny wspólny mianownik między platformami
 Przeglądarki internetowe w urządzeniach mobilnych
 Osadzone kontrolki przeglądarki w natywnych aplikacjach
 A może C++?
 Windows Phone 8 obsługuje C++
 Objective-C to NIE C++
“79% of mobile developers report that they will integrate
some HTML5 in their apps in 2012”
Appcelerator/IDC – Q1-2012 – Mobile Developer Report
Javascript dzisiaj
 Natywne aplikacje dla Windows 8
 Gry – np. Cut The Rope, Angry Birds
 Office 2013, Sharepoint
 Node.js
 Cała masa bibliotek – nie tylko jQuery!
 „Model-View-Whatever” w Javascript
 np. Knockout, Angular, Backbone, Mustache
 Ciekawostki
 http://jscriptlinq.codeplex.com/ - LINQ w JS
 http://bellard.org/jslinux/ - implementacja Linux w JS
 Nowy język autorstwa Andersa Hejlsberga (twórca C#)
 Nadzbiór Javascript
 Nie trzeba uczyć się nowej składni
 Silnie typowany Javascript
 Klasy, interfejsy, dziedziczenie, modyfikatory dostępu, ...
 Częściowa zgodność z propozycją ECMAScript 6
 Refactoring, wsparcie Visual Studio
 Kompilowany do Javascript!
TypeScript
Demo
TypeScript
Strategie - HTML 5 i aplikacje mobilne
OS platform
Przeglądarka obsługująca HTML 5
Mobilna strona
Natywna platforma aplikacyjna
Rozwiązania hybrydowe
Cross-
kompilacja
Titanium (Appcelerator)
…
Frameworki Javascript
Apache Cordova (PhoneGap)
AppMobi
…
JQueryMobile
SenchaTouch
Jo
Propulsion
…
Demo
jQuery Mobile
 Dostęp do natywnych funkcji z poziomu JavaScript
 Inaczej niż w Windows 8 – opakowana kontrolka przeglądarki
 PhoneGap – popularna dystrybucja Apache Cordova
 Obecnie własnością Adobe
 PhoneGap Build Service
 Aplikacje mogą być zgłaszane do sklepów
 Windows Phone, Android, iOS, Symbian, BlackBerry, ...
 Windows 8 póki co nie – może nie mieć sensu
 Windows Phone 8 – nadal ma zastosowanie, pełne wsparcie
Apache Cordova
PhoneGap i Windows Phone
Demo
PhoneGap i Windows Phone
 Mimo wszystko większe możliwości
 Lepsza integracja z urządzeniem
 Większa wydajność niż PhoneGap
 Wygodniejsze pisanie (subiektywne) i debugowanie
 Decyzja na podstawie celu, budżetu, projektu, wiedzy
zespołu
Natywne aplikacje
 Wspólne jądro systemu – Windows NT
 Te same komponenty systemowe
 Sieć, kernel, grafika, system plików, multimedia
 Wspólny model sterowników
 Obsługa wielu rdzeni w Windows Phone
 Solidna, nowoczesna platforma do przyszłej rozbudowy
 Ten sam CLR
 Nie oznacza to dokładnie tego samego API
 Obecnie - wiele podobieństw
 W przyszłości - na pewno bardzo dużo wspólnego kodu
Windows Phone 8 i Windows 8
Windows Phone 8 API
• Aplikacje managed
wykorzystujące WP 7.1,
WP 8.0 .NET oraz WinPRT
API
• Natywne aplikacje
wykorzystujące WinPRT i
Win32
• Gry wykorzystujące WP 7.1
XNA Framework
• Gry wykorzystujące
Direct3D lub DirectX
.NET API for
Windows
Phone
Windows
Phone
Runtime
Win32 &
COM
Managed Managed &
Native
Native
WP7.1 XAML & C#/VB
WP8.0 XAML & C#/VB
WP8.0 XAML & C++
WP8.0 Games DirectX/Direct 3D & C++
WP7.1 XNA & C#/VB
WP8.0 XAML & C#/VB with Direct3D Graphics
 Kod natywny (C++)
 Współdzielenie większości kodu
 Wspólny kod gier wykorzystujących DirectX / Direct3D
 HTML 5
 np. PhoneGap, własne rozwiązanie hybrydowe lub strony mobilne
 Ten sam silnik Internet Explorer 10!
 C# / VB.NET
 Dla programistów WP 8 – wiele klas współdzielonych z WinRT
 Drobne różnice w podstawowym API (zwłaszcza widoki)
Windows Phone 8 i Windows 8 – c.d.
 Zarządzany kod
 Wszystkie API z Windows Phone 7.1
 Przestrzenie nazw System oraz Microsoft.Phone
 Wiele nowych klas dodanych w WP 8, np.:
 Microsoft.Phone.Wallet
 Microsoft.Phone.Tasks.ShareMediaTask
 Microsoft.Phone.Tasks.MapsTask
 Microsoft.Phone.Storage.ExternalStorage
 Microsoft.Phone.Networking.Voip
 …
.NET API for Windows Phone
 Podzbiór pełnego WinRT + dodatki specyficzne dla
telefonu
Windows (Phone) Runtime zaimplementowane w C++
Projekcje do C#, VB.NET, C++
Obecnie brak projekcji do HTML5/JavaScript
Windows Phone Runtime API
Pełny WinRT
(ok. 11,000 obiektów)
Podzbiór
przeniesiony do
Windows Phone
Runtime
(ok. 2,800 obiektów)
Nowe dla Windows
Phone Runtime
(ok. 600 obiektów)
Specyficzne dla Windows Phone (wybrane):
• Synteza i rozpoznawanie mowy
• VOIP
• Windows.Phone.PersonalInformation
• LockScreen,LockScreenManager
• Wszystkie i dodatki
Wspólne API dla WinRT i WinPRT
Wybrane wspólne przestrzenie nazw i klasy
• Windows.ApplicationModel.Package
• Windows.ApplicationModel.Activation
• Windows.ApplicationModel.DataTransfer
• Windows.ApplicationModel.DataTransfer.DataTransferManag
er
• Windows.ApplicationModel.Store
• Windows.Devices.Geolocation
• Windows.Devices.Sensors.Accelerometer
• Windows.Devices.Sensors.Compass
• Windows.Devices.Sensors.Gyrometer
• Windows.Devices.Sensors.Inclinometer
• Windows.Foundation.IAsyncAction
• Windows.Foundation.IAsyncOperation(TResult)
• Windows.Graphics.Display
• Windows.Networking.Connectivity
• Windows.Networking.Proximity
• Windows.Networking.Sockets
• Windows.Storage
• Windows.Storage.Pickers
• Windows.System.Launcher
• Windows.System.Threading.Threadpool
• …
• Wszystkie
 W kilku przypadkach, WinPRT API oferują podobne funkcjonalności do .NET
API
z WP 7.5, np.:
 Możemy skorzystać z dowolnego API
Deweloperzy adresujący WP 7.1 oraz WP 8 będą preferowali .NET API
Deweloperzy myślący o współdzieleniu kodu pomiędzy Windows Phone 8 i Windows 8
będą skłaniali się do WinPRT API
Przypadki duplikacji w API
.NET API Windows Phone Runtime API
System.IO.IsolatedStorage Windows.Storage
System.NET.Sockets Windows.Networking.Sockets
System.Threading.ThreadPool Windows.System.Threading.ThreadPool
Microsoft.Devices.Sensors Windows.Devices.Sensors
 Oprócz .NET i WinPRT API, dostęp do niektórych Win32 API, np.:
Winsock do niskopoziomowego oprogramowania połączeń
Camera APIs dla aplikacji natywnych
COM APIs takie jak CoInitializeEx, CoTaskMemAlloc, CoTaskMemFree,
CreateFile2, ReadFile, WriteFile, HeapAlloc, CreateMutexExW,
WaitForSingleObjectW, …
 Głównie dla programistów piszących w kodzie natywnym
 Możliwość dodania referencji w projekcie managed
(rzadko potrzebne)
Win32 i COM API
Demo
WinPRT i WinRT - podobieństwa
 Namespace’y XAML
 WP – xmlns:imgsch="clr-namespace:ImageSearch;assembly=…"
 W8 – xmlns:imgsch="using:ImageSearch"
 Event handlery
 WP – System.Windows.RoutedEventArgs
 W8 – Windows.UI.Xaml.RoutedEventArgs
 Nawigacja
 WP – NavigationService.Navigate(new Uri("/page.xaml?Id=5", UriKind.Relative));
 W8 – Frame.Navigate(typeof(DetailsPage), e.ClickedItem);
 SQL CE
 Windows 8 - brak
Wybrane różnice
 Windows Phone 7
settings = IsolatedStorageSettings.ApplicationSettings;
settings["exampleSetting"] = "Hello Phone";
 Windows 8
settings = Windows.ApplicationData.Current.LocalSettings;
container = settings.CreateContainer(“main", ApplicationDataCreateDisposition.Always);
settings.Containers["main"].Values["exampleSetting"] = "Hello Windows";
 Roaming – tylko Windows 8
settings = ApplicationData.Current.RoamingSettings;
Zapis ustawień
Kontrolki XAML
Mapowanie kontrolek
Np. Panorama, PivotNp. GridView, ListView
Np. Grid, StackPanel, TextBox, ListBox, Button, itp.
Demo
Z Windows Phone do Windows 8 - różnice
 Współdzielenie elementów XAML
 Separacja logiki i UI – wzorzec Model-View-ViewModel
 Wspólna logika w Portable Class Libraries
 Dodawanie plików jako link
 Własne komponenty Windows Runtime (tylko WP 8)
 Kompilacja warunkowa + dyrektywy preprocesora
Techniki współdzielenia kodu
Współdzielenie logiki – jak?
 Brak binarnej kompatybilności między projektami
 Silverlight, Windows Phone, Windows 8, WPF
 Osobne typy class library
Trudności w utrzymaniu...
 Jedno źródło
 Jeden projekt
 Jedne binaria
 Wiele platform!
Portable Class Libraries
Platform / feature matrix
Demo
Portable Class Library
Model-View-ViewModel
DataBinding Commands
Messages
View Service
Events
PropertyChanged
Demo
Przyspieszony kurs podstaw MVVM
Architektura cross-platform
Windows Store App
Portable Class Library
Windows Phone App
// W Portable Class Library
public interface IFileStorage
{
Task SaveFileAsync(string filename, string contents);
Task<string> LoadFileAsync(string filename);
}
// W ViewModelu
public void Save()
{
_fileStorage.SaveFileAsync(Filename, Contents);
}
public async void Load()
{
Contents = await _fileStorage.LoadFileAsync(Filename);
}
Abstrakcja – interfejs
Dodawanie plików jako link
Również z Partial Classes...
Kompilacja warunkowa
Nie w Portable Class Library
W plikach XAML – nieobsługiwane
Ostrożnie i z umiarem...
Demo
Portable Class Libraries i MVVM
public abstract class ServiceBusAdapter
{
public static ServiceBusAdapter Current
{
get;
set;
}
public abstract byte[] ComputeHmacSha256(byte[] secretKey, byte[] data);
}
Abstrakcja - klasa abstrakcyjna
// Windows Phone - implementacja
public class PhoneServiceBusAdapter : ServiceBusAdapter
{
public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data)
{
using (var cryptoProvider = new HMACSHA256(secretKey))
{
return cryptoProvider.ComputeHash(data);
}
}
}
// Windows 8 - implementacja
public class MetroServiceBusAdapter : ServiceBusAdapter
{
private const string HmacSha256AlgorithmName = "HMAC_SHA256";
public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data)
{
var provider = MacAlgorithmProvider.OpenAlgorithm(HmacSha256AlgorithmName);
//...
return hashed.ToArray();
}
}
ServiceBusAdapter.Current = new PhoneServiceBusAdapter(); // Windows Phone startup
ServiceBusAdapter.Current = new MetroServiceBusAdapter(); // Windows 8 startup
// W Portable Class Library
var adapter = ServiceBusAdapter.Current;
byte[] signatureBytes = adapter.ComputeHmacSha256(issuerSecretBytes,
Encoding.UTF8.GetBytes(token));
Wywoływanie kodu platform-specific
Kod specyficzny dla platformy
 Abstrakcje
 Klasy abstrakcyjne
 Interfejsy
 Przekazywanie zależności z kodu aplikacji
 Kontener IoC
 Service locator / platform abstraction layer
public class ServiceLocator
{
public static IFileStorage FileStorage { get; set; }
public static IPhotoChooser PhotoChooser { get; set; }
}
// Rejestrowanie usługi – start aplikacji WP 7
_container.RegisterType<IStateService, PhoneIsolatedStorageStateService>();
// Rejestrowanie usługi – start aplikacji Win 8
_container.RegisterType<IStateService, Win8LocalStorageStateService>();
// Rejestrowanie usługi – singleton
_container.RegisterType<INavigationService, Win8NaviService>(
new ContainerControlledLifetimeManager());
Dependency Injection - Unity
public class MyViewModel(IStateService stateService)
{
// ...
}
// Wewnątrz Portable Class Library
// Widok bindujemy (np. w XAML) do ServiceLocator.MainViewModel
public class ServiceLocator
{
public static MyViewModel MainViewModel
{
get
{
// Automatyczne wstrzykiwanie zal. do konstruktora
return container.Resolve<MyViewModel>();
}
}
}
Dependency Injection – c.d.
Demo
Windows Phone i Windows 8 + PCL – przykład zaawansowany
 Xamarin
 Port Mono dla iOS (MonoTouch) i Android
 MvvmCross
 Framework MVVM dostarczany w postaci Portable Class Library
 Współdzielenie kodu ViewModeli, Modeli oraz usług między
Windows Phone, WinRT, MonoTouch i Mono for Android
Inne platformy?
Demo
MVVMCross
 HTML 5 (+ PhoneGap)
 Niski koszt wejścia
 Wiele platform
 Niższa wydajność i mniejsze możliwości
 MVVM i Portable Class Libraries
 Współdzielenie logiki
 Abstrakcje funkcjonalności platform-specific
 Windows Phone 8 i Windows 8
 Wiele współdzielonych elementów, ale też różnic
Podsumowanie
 MVVM
 MVVM Light Toolkit portable fork
 MvvmCross
 IoC
 Autofac
 Ninject portable fork
 Microsoft.Composition (Lightweight MEF)
 Other
 Json.NET
Zasoby
 MVVM Light toolkit (basics)
http://channel9.msdn.com/Events/MIX/MIX10/EX14
 MVVM Light toolkit (deep dive)
http://channel9.msdn.com/Events/MIX/MIX11/OPN03
 Windows 8 and MVVM Light toolkit
http://blog.galasoft.ch/archive/2012/02/19/impressions-slides-and-
code-from-techdays-belgium-and-netherlands.aspx
 Caliburn.micro concepts
http://channel9.msdn.com/Events/MIX/MIX10/EX15
Zasoby – c.d.
 Daniel Plaisted’s blog
 http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx
 Portable Class Library MSDN documentation
 http://msdn.microsoft.com/en-us/library/gg597391(v=vs.110)
 Portable Class Library overview blog post
 blogs.msdn.com/b/dotnet/archive/2012/07/06/targeting-multiple-platforms-with-portable-code-
overview.aspx
 Create a continuous client using portable libraries
 msdn.microsoft.com/en-us/magazine/hh852593.aspx
 MvvmCross
 slodge.blogspot.com/2012/05/portable-class-libraries-in-mvvmcross.html
 Portable Class Libraries on Channel 9 (lots of links in show notes)
 channel9.msdn.com/Shows/Visual-Studio-Toolbox/Visual-Studio-ToolboxPortable-Class-Libraries
Zasoby – c.d.
© 2012 Microsoft Corporation. Wszelkie prawa zastrzeżone.
Microsoft, Windows oraz inne nazwy produktów są lub mogą być znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Microsoft
w Stanach Zjednoczonych i innych krajach. Zamieszczone informacje mają charakter wyłącznie informacyjny. FIRMA MICROSOFT NIE UDZIELA
ŻADNYCH GWARANCJI (WYRAŻONYCH WPROST LUB DOMYŚLNIE), W TYM TAKŻE USTAWOWEJ RĘKOJMI ZA WADY FIZYCZNE I PRAWNE, CO DO
INFORMACJI ZAWARTYCH W TEJ PREZENTACJI.

Más contenido relacionado

Destacado

Knowledge Management 2.0 - Zarządzanie wiedzą 2.0
Knowledge Management 2.0 - Zarządzanie wiedzą 2.0Knowledge Management 2.0 - Zarządzanie wiedzą 2.0
Knowledge Management 2.0 - Zarządzanie wiedzą 2.0Digital-Knowledge
 
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.GameDesire Academy
 
8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego
8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego
8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczegoLukas Pobocha
 
Visual Basic 2005. Zapiski programisty
Visual Basic 2005. Zapiski programistyVisual Basic 2005. Zapiski programisty
Visual Basic 2005. Zapiski programistyWydawnictwo Helion
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaWydawnictwo Helion
 
Dzielenie się wiedzą – jako przykład (nie
Dzielenie się wiedzą – jako przykład (nieDzielenie się wiedzą – jako przykład (nie
Dzielenie się wiedzą – jako przykład (nieKatarzyna Materska
 
Procesy mogą nam pomóc prowadzić projekty!
Procesy mogą nam pomóc prowadzić projekty!Procesy mogą nam pomóc prowadzić projekty!
Procesy mogą nam pomóc prowadzić projekty!Marek Smura
 
Przemysł cementowy a gospodarka odpadami
Przemysł cementowy a gospodarka odpadamiPrzemysł cementowy a gospodarka odpadami
Przemysł cementowy a gospodarka odpadamiOdzyskenergii
 
Prezentacja Jabber
Prezentacja JabberPrezentacja Jabber
Prezentacja Jabberbm9ib2r5
 
Mijl res[1]
Mijl res[1]Mijl res[1]
Mijl res[1]anad1979
 

Destacado (17)

И.А. Вальдман "Ключевые аспекты качества образования".
И.А. Вальдман "Ключевые аспекты качества образования".И.А. Вальдман "Ключевые аспекты качества образования".
И.А. Вальдман "Ключевые аспекты качества образования".
 
Podstawy komunikacji
Podstawy komunikacjiPodstawy komunikacji
Podstawy komunikacji
 
BRE-CASE Seminarium 55 - Portuguese Experience in Restructuring and Privatizi...
BRE-CASE Seminarium 55 - Portuguese Experience in Restructuring and Privatizi...BRE-CASE Seminarium 55 - Portuguese Experience in Restructuring and Privatizi...
BRE-CASE Seminarium 55 - Portuguese Experience in Restructuring and Privatizi...
 
Knowledge Management 2.0 - Zarządzanie wiedzą 2.0
Knowledge Management 2.0 - Zarządzanie wiedzą 2.0Knowledge Management 2.0 - Zarządzanie wiedzą 2.0
Knowledge Management 2.0 - Zarządzanie wiedzą 2.0
 
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
Krzysztof Indyk: Jak przetwarzać duże ilości danych? Wprowadzenie do Hadoopa.
 
8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego
8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego
8. Stosowanie narzędzi marketingu w działalności podmiotu gospodarczego
 
Visual Basic 2005. Zapiski programisty
Visual Basic 2005. Zapiski programistyVisual Basic 2005. Zapiski programisty
Visual Basic 2005. Zapiski programisty
 
PHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowaniaPHP5. Profesjonalne tworzenie oprogramowania
PHP5. Profesjonalne tworzenie oprogramowania
 
Dzielenie się wiedzą – jako przykład (nie
Dzielenie się wiedzą – jako przykład (nieDzielenie się wiedzą – jako przykład (nie
Dzielenie się wiedzą – jako przykład (nie
 
1.ins znrow14
1.ins znrow141.ins znrow14
1.ins znrow14
 
Kryzys jugosłowiański
Kryzys jugosłowiańskiKryzys jugosłowiański
Kryzys jugosłowiański
 
Procesy mogą nam pomóc prowadzić projekty!
Procesy mogą nam pomóc prowadzić projekty!Procesy mogą nam pomóc prowadzić projekty!
Procesy mogą nam pomóc prowadzić projekty!
 
Przemysł cementowy a gospodarka odpadami
Przemysł cementowy a gospodarka odpadamiPrzemysł cementowy a gospodarka odpadami
Przemysł cementowy a gospodarka odpadami
 
Prezentacja Jabber
Prezentacja JabberPrezentacja Jabber
Prezentacja Jabber
 
Mijl res[1]
Mijl res[1]Mijl res[1]
Mijl res[1]
 
Internet w komunikacji naukowej.
Internet w komunikacji naukowej.Internet w komunikacji naukowej.
Internet w komunikacji naukowej.
 
Bz prezentacja
Bz prezentacjaBz prezentacja
Bz prezentacja
 

Similar a Współdzielenie kodu aplikacji Windows Phone i Windows 8

Aplikacje mobilne tworzone w technologiach webowych
Aplikacje mobilne tworzone w technologiach webowychAplikacje mobilne tworzone w technologiach webowych
Aplikacje mobilne tworzone w technologiach webowychTomasz Borowski
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?PHPCon Poland
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004Tomasz Cieplak
 
Titanium - RuPy Tuesday
Titanium - RuPy TuesdayTitanium - RuPy Tuesday
Titanium - RuPy TuesdayGaldoMedia
 
Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...
Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...
Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...3camp
 
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuTechnologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuMichal Lukaszewski
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Bartlomiej Zass
 
Ionic framework - aplikacja mobilna w 15 minut
Ionic framework - aplikacja mobilna w 15 minutIonic framework - aplikacja mobilna w 15 minut
Ionic framework - aplikacja mobilna w 15 minutTomasz Borowski
 
Programowanie .NET web i mobile
Programowanie .NET web i mobile Programowanie .NET web i mobile
Programowanie .NET web i mobile Boguslaw Blonski
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.jsWojciech Kaniuka
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
Programowanie Windows Phone 7
Programowanie Windows Phone 7Programowanie Windows Phone 7
Programowanie Windows Phone 7daniel.plawgo
 
3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wady3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wadyappreal.net - Software House
 
PHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubiPHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubiPHPCon Poland
 

Similar a Współdzielenie kodu aplikacji Windows Phone i Windows 8 (20)

Aplikacje mobilne tworzone w technologiach webowych
Aplikacje mobilne tworzone w technologiach webowychAplikacje mobilne tworzone w technologiach webowych
Aplikacje mobilne tworzone w technologiach webowych
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
 
Silverlight i PHP
Silverlight i PHPSilverlight i PHP
Silverlight i PHP
 
Seminarium .Net CF 2004
Seminarium .Net CF 2004Seminarium .Net CF 2004
Seminarium .Net CF 2004
 
Projektowanie i programowanie aplikacji nowej generacji
Projektowanie i programowanie aplikacji nowej generacjiProjektowanie i programowanie aplikacji nowej generacji
Projektowanie i programowanie aplikacji nowej generacji
 
Titanium - RuPy Tuesday
Titanium - RuPy TuesdayTitanium - RuPy Tuesday
Titanium - RuPy Tuesday
 
JavaEE + OSGi
JavaEE + OSGiJavaEE + OSGi
JavaEE + OSGi
 
Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...
Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...
Łukasz Spandel – Atena – JavaScript rośnie w siłę – najnowsze trendy w tworze...
 
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadkuTechnologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
Technologie mobilne w platformach edukacyjnych. Kosmikus, studium przypadku
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Ionic framework - aplikacja mobilna w 15 minut
Ionic framework - aplikacja mobilna w 15 minutIonic framework - aplikacja mobilna w 15 minut
Ionic framework - aplikacja mobilna w 15 minut
 
Programowanie .NET web i mobile
Programowanie .NET web i mobile Programowanie .NET web i mobile
Programowanie .NET web i mobile
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
Programowanie Windows Phone 7
Programowanie Windows Phone 7Programowanie Windows Phone 7
Programowanie Windows Phone 7
 
3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wady3 możliwości kodowania aplikacji mobilnych. Zalety i wady
3 możliwości kodowania aplikacji mobilnych. Zalety i wady
 
Php i Microsoft
Php i MicrosoftPhp i Microsoft
Php i Microsoft
 
PHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubiPHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubi
 
PHP i microsoft
PHP i microsoftPHP i microsoft
PHP i microsoft
 

Współdzielenie kodu aplikacji Windows Phone i Windows 8

  • 1. Współdzielenie kodu aplikacji Windows Phone i Windows 8 ...czyli dwie pieczenie na jednym ogniu Bartłomiej Zass Technical Evangelist | Microsoft
  • 2.  Poznasz różne strategie pisania przenośnego kodu dla smartfonów i tabletów (nie tylko Microsoft i nie tylko w C#!)  Zrozumiesz podobieństwa i różnice między platformami Windows Phone 8 i Windows 8  Poznasz podstawy wzorca Model-View-ViewModel  Zastosujesz Portable Class Libraries do wyodrębnienia wspólnej logiki aplikacji Windows Phone i Windows 8 Cel sesji
  • 3.  Różne strategie pisania kodu przenośnego  HTML i JavaScript – jQuery Mobile, PhoneGap  C#  Windows Phone 8, Windows 8 – podobieństwa i różnice  Architektura aplikacji - MVVM i Portable Class Libraries Plan prezentacji
  • 4.
  • 5.
  • 6. Dlaczego HTML i Javascript?  Jedyny wspólny mianownik między platformami  Przeglądarki internetowe w urządzeniach mobilnych  Osadzone kontrolki przeglądarki w natywnych aplikacjach  A może C++?  Windows Phone 8 obsługuje C++  Objective-C to NIE C++ “79% of mobile developers report that they will integrate some HTML5 in their apps in 2012” Appcelerator/IDC – Q1-2012 – Mobile Developer Report
  • 7. Javascript dzisiaj  Natywne aplikacje dla Windows 8  Gry – np. Cut The Rope, Angry Birds  Office 2013, Sharepoint  Node.js  Cała masa bibliotek – nie tylko jQuery!  „Model-View-Whatever” w Javascript  np. Knockout, Angular, Backbone, Mustache  Ciekawostki  http://jscriptlinq.codeplex.com/ - LINQ w JS  http://bellard.org/jslinux/ - implementacja Linux w JS
  • 8.  Nowy język autorstwa Andersa Hejlsberga (twórca C#)  Nadzbiór Javascript  Nie trzeba uczyć się nowej składni  Silnie typowany Javascript  Klasy, interfejsy, dziedziczenie, modyfikatory dostępu, ...  Częściowa zgodność z propozycją ECMAScript 6  Refactoring, wsparcie Visual Studio  Kompilowany do Javascript! TypeScript
  • 10. Strategie - HTML 5 i aplikacje mobilne OS platform Przeglądarka obsługująca HTML 5 Mobilna strona Natywna platforma aplikacyjna Rozwiązania hybrydowe Cross- kompilacja Titanium (Appcelerator) … Frameworki Javascript Apache Cordova (PhoneGap) AppMobi … JQueryMobile SenchaTouch Jo Propulsion …
  • 12.  Dostęp do natywnych funkcji z poziomu JavaScript  Inaczej niż w Windows 8 – opakowana kontrolka przeglądarki  PhoneGap – popularna dystrybucja Apache Cordova  Obecnie własnością Adobe  PhoneGap Build Service  Aplikacje mogą być zgłaszane do sklepów  Windows Phone, Android, iOS, Symbian, BlackBerry, ...  Windows 8 póki co nie – może nie mieć sensu  Windows Phone 8 – nadal ma zastosowanie, pełne wsparcie Apache Cordova
  • 15.  Mimo wszystko większe możliwości  Lepsza integracja z urządzeniem  Większa wydajność niż PhoneGap  Wygodniejsze pisanie (subiektywne) i debugowanie  Decyzja na podstawie celu, budżetu, projektu, wiedzy zespołu Natywne aplikacje
  • 16.  Wspólne jądro systemu – Windows NT  Te same komponenty systemowe  Sieć, kernel, grafika, system plików, multimedia  Wspólny model sterowników  Obsługa wielu rdzeni w Windows Phone  Solidna, nowoczesna platforma do przyszłej rozbudowy  Ten sam CLR  Nie oznacza to dokładnie tego samego API  Obecnie - wiele podobieństw  W przyszłości - na pewno bardzo dużo wspólnego kodu Windows Phone 8 i Windows 8
  • 17. Windows Phone 8 API • Aplikacje managed wykorzystujące WP 7.1, WP 8.0 .NET oraz WinPRT API • Natywne aplikacje wykorzystujące WinPRT i Win32 • Gry wykorzystujące WP 7.1 XNA Framework • Gry wykorzystujące Direct3D lub DirectX .NET API for Windows Phone Windows Phone Runtime Win32 & COM Managed Managed & Native Native WP7.1 XAML & C#/VB WP8.0 XAML & C#/VB WP8.0 XAML & C++ WP8.0 Games DirectX/Direct 3D & C++ WP7.1 XNA & C#/VB WP8.0 XAML & C#/VB with Direct3D Graphics
  • 18.  Kod natywny (C++)  Współdzielenie większości kodu  Wspólny kod gier wykorzystujących DirectX / Direct3D  HTML 5  np. PhoneGap, własne rozwiązanie hybrydowe lub strony mobilne  Ten sam silnik Internet Explorer 10!  C# / VB.NET  Dla programistów WP 8 – wiele klas współdzielonych z WinRT  Drobne różnice w podstawowym API (zwłaszcza widoki) Windows Phone 8 i Windows 8 – c.d.
  • 19.  Zarządzany kod  Wszystkie API z Windows Phone 7.1  Przestrzenie nazw System oraz Microsoft.Phone  Wiele nowych klas dodanych w WP 8, np.:  Microsoft.Phone.Wallet  Microsoft.Phone.Tasks.ShareMediaTask  Microsoft.Phone.Tasks.MapsTask  Microsoft.Phone.Storage.ExternalStorage  Microsoft.Phone.Networking.Voip  … .NET API for Windows Phone
  • 20.  Podzbiór pełnego WinRT + dodatki specyficzne dla telefonu Windows (Phone) Runtime zaimplementowane w C++ Projekcje do C#, VB.NET, C++ Obecnie brak projekcji do HTML5/JavaScript Windows Phone Runtime API Pełny WinRT (ok. 11,000 obiektów) Podzbiór przeniesiony do Windows Phone Runtime (ok. 2,800 obiektów) Nowe dla Windows Phone Runtime (ok. 600 obiektów) Specyficzne dla Windows Phone (wybrane): • Synteza i rozpoznawanie mowy • VOIP • Windows.Phone.PersonalInformation • LockScreen,LockScreenManager • Wszystkie i dodatki
  • 21. Wspólne API dla WinRT i WinPRT Wybrane wspólne przestrzenie nazw i klasy • Windows.ApplicationModel.Package • Windows.ApplicationModel.Activation • Windows.ApplicationModel.DataTransfer • Windows.ApplicationModel.DataTransfer.DataTransferManag er • Windows.ApplicationModel.Store • Windows.Devices.Geolocation • Windows.Devices.Sensors.Accelerometer • Windows.Devices.Sensors.Compass • Windows.Devices.Sensors.Gyrometer • Windows.Devices.Sensors.Inclinometer • Windows.Foundation.IAsyncAction • Windows.Foundation.IAsyncOperation(TResult) • Windows.Graphics.Display • Windows.Networking.Connectivity • Windows.Networking.Proximity • Windows.Networking.Sockets • Windows.Storage • Windows.Storage.Pickers • Windows.System.Launcher • Windows.System.Threading.Threadpool • … • Wszystkie
  • 22.  W kilku przypadkach, WinPRT API oferują podobne funkcjonalności do .NET API z WP 7.5, np.:  Możemy skorzystać z dowolnego API Deweloperzy adresujący WP 7.1 oraz WP 8 będą preferowali .NET API Deweloperzy myślący o współdzieleniu kodu pomiędzy Windows Phone 8 i Windows 8 będą skłaniali się do WinPRT API Przypadki duplikacji w API .NET API Windows Phone Runtime API System.IO.IsolatedStorage Windows.Storage System.NET.Sockets Windows.Networking.Sockets System.Threading.ThreadPool Windows.System.Threading.ThreadPool Microsoft.Devices.Sensors Windows.Devices.Sensors
  • 23.  Oprócz .NET i WinPRT API, dostęp do niektórych Win32 API, np.: Winsock do niskopoziomowego oprogramowania połączeń Camera APIs dla aplikacji natywnych COM APIs takie jak CoInitializeEx, CoTaskMemAlloc, CoTaskMemFree, CreateFile2, ReadFile, WriteFile, HeapAlloc, CreateMutexExW, WaitForSingleObjectW, …  Głównie dla programistów piszących w kodzie natywnym  Możliwość dodania referencji w projekcie managed (rzadko potrzebne) Win32 i COM API
  • 24. Demo WinPRT i WinRT - podobieństwa
  • 25.  Namespace’y XAML  WP – xmlns:imgsch="clr-namespace:ImageSearch;assembly=…"  W8 – xmlns:imgsch="using:ImageSearch"  Event handlery  WP – System.Windows.RoutedEventArgs  W8 – Windows.UI.Xaml.RoutedEventArgs  Nawigacja  WP – NavigationService.Navigate(new Uri("/page.xaml?Id=5", UriKind.Relative));  W8 – Frame.Navigate(typeof(DetailsPage), e.ClickedItem);  SQL CE  Windows 8 - brak Wybrane różnice
  • 26.  Windows Phone 7 settings = IsolatedStorageSettings.ApplicationSettings; settings["exampleSetting"] = "Hello Phone";  Windows 8 settings = Windows.ApplicationData.Current.LocalSettings; container = settings.CreateContainer(“main", ApplicationDataCreateDisposition.Always); settings.Containers["main"].Values["exampleSetting"] = "Hello Windows";  Roaming – tylko Windows 8 settings = ApplicationData.Current.RoamingSettings; Zapis ustawień
  • 27. Kontrolki XAML Mapowanie kontrolek Np. Panorama, PivotNp. GridView, ListView Np. Grid, StackPanel, TextBox, ListBox, Button, itp.
  • 28. Demo Z Windows Phone do Windows 8 - różnice
  • 29.  Współdzielenie elementów XAML  Separacja logiki i UI – wzorzec Model-View-ViewModel  Wspólna logika w Portable Class Libraries  Dodawanie plików jako link  Własne komponenty Windows Runtime (tylko WP 8)  Kompilacja warunkowa + dyrektywy preprocesora Techniki współdzielenia kodu
  • 30. Współdzielenie logiki – jak?  Brak binarnej kompatybilności między projektami  Silverlight, Windows Phone, Windows 8, WPF  Osobne typy class library
  • 32.  Jedno źródło  Jeden projekt  Jedne binaria  Wiele platform! Portable Class Libraries
  • 37. Architektura cross-platform Windows Store App Portable Class Library Windows Phone App
  • 38. // W Portable Class Library public interface IFileStorage { Task SaveFileAsync(string filename, string contents); Task<string> LoadFileAsync(string filename); } // W ViewModelu public void Save() { _fileStorage.SaveFileAsync(Filename, Contents); } public async void Load() { Contents = await _fileStorage.LoadFileAsync(Filename); } Abstrakcja – interfejs
  • 39. Dodawanie plików jako link Również z Partial Classes...
  • 40. Kompilacja warunkowa Nie w Portable Class Library W plikach XAML – nieobsługiwane Ostrożnie i z umiarem...
  • 42. public abstract class ServiceBusAdapter { public static ServiceBusAdapter Current { get; set; } public abstract byte[] ComputeHmacSha256(byte[] secretKey, byte[] data); } Abstrakcja - klasa abstrakcyjna
  • 43. // Windows Phone - implementacja public class PhoneServiceBusAdapter : ServiceBusAdapter { public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data) { using (var cryptoProvider = new HMACSHA256(secretKey)) { return cryptoProvider.ComputeHash(data); } } } // Windows 8 - implementacja public class MetroServiceBusAdapter : ServiceBusAdapter { private const string HmacSha256AlgorithmName = "HMAC_SHA256"; public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data) { var provider = MacAlgorithmProvider.OpenAlgorithm(HmacSha256AlgorithmName); //... return hashed.ToArray(); } }
  • 44. ServiceBusAdapter.Current = new PhoneServiceBusAdapter(); // Windows Phone startup ServiceBusAdapter.Current = new MetroServiceBusAdapter(); // Windows 8 startup // W Portable Class Library var adapter = ServiceBusAdapter.Current; byte[] signatureBytes = adapter.ComputeHmacSha256(issuerSecretBytes, Encoding.UTF8.GetBytes(token)); Wywoływanie kodu platform-specific
  • 45. Kod specyficzny dla platformy  Abstrakcje  Klasy abstrakcyjne  Interfejsy  Przekazywanie zależności z kodu aplikacji  Kontener IoC  Service locator / platform abstraction layer public class ServiceLocator { public static IFileStorage FileStorage { get; set; } public static IPhotoChooser PhotoChooser { get; set; } }
  • 46. // Rejestrowanie usługi – start aplikacji WP 7 _container.RegisterType<IStateService, PhoneIsolatedStorageStateService>(); // Rejestrowanie usługi – start aplikacji Win 8 _container.RegisterType<IStateService, Win8LocalStorageStateService>(); // Rejestrowanie usługi – singleton _container.RegisterType<INavigationService, Win8NaviService>( new ContainerControlledLifetimeManager()); Dependency Injection - Unity
  • 47. public class MyViewModel(IStateService stateService) { // ... } // Wewnątrz Portable Class Library // Widok bindujemy (np. w XAML) do ServiceLocator.MainViewModel public class ServiceLocator { public static MyViewModel MainViewModel { get { // Automatyczne wstrzykiwanie zal. do konstruktora return container.Resolve<MyViewModel>(); } } } Dependency Injection – c.d.
  • 48. Demo Windows Phone i Windows 8 + PCL – przykład zaawansowany
  • 49.  Xamarin  Port Mono dla iOS (MonoTouch) i Android  MvvmCross  Framework MVVM dostarczany w postaci Portable Class Library  Współdzielenie kodu ViewModeli, Modeli oraz usług między Windows Phone, WinRT, MonoTouch i Mono for Android Inne platformy?
  • 51.  HTML 5 (+ PhoneGap)  Niski koszt wejścia  Wiele platform  Niższa wydajność i mniejsze możliwości  MVVM i Portable Class Libraries  Współdzielenie logiki  Abstrakcje funkcjonalności platform-specific  Windows Phone 8 i Windows 8  Wiele współdzielonych elementów, ale też różnic Podsumowanie
  • 52.  MVVM  MVVM Light Toolkit portable fork  MvvmCross  IoC  Autofac  Ninject portable fork  Microsoft.Composition (Lightweight MEF)  Other  Json.NET Zasoby
  • 53.  MVVM Light toolkit (basics) http://channel9.msdn.com/Events/MIX/MIX10/EX14  MVVM Light toolkit (deep dive) http://channel9.msdn.com/Events/MIX/MIX11/OPN03  Windows 8 and MVVM Light toolkit http://blog.galasoft.ch/archive/2012/02/19/impressions-slides-and- code-from-techdays-belgium-and-netherlands.aspx  Caliburn.micro concepts http://channel9.msdn.com/Events/MIX/MIX10/EX15 Zasoby – c.d.
  • 54.  Daniel Plaisted’s blog  http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx  Portable Class Library MSDN documentation  http://msdn.microsoft.com/en-us/library/gg597391(v=vs.110)  Portable Class Library overview blog post  blogs.msdn.com/b/dotnet/archive/2012/07/06/targeting-multiple-platforms-with-portable-code- overview.aspx  Create a continuous client using portable libraries  msdn.microsoft.com/en-us/magazine/hh852593.aspx  MvvmCross  slodge.blogspot.com/2012/05/portable-class-libraries-in-mvvmcross.html  Portable Class Libraries on Channel 9 (lots of links in show notes)  channel9.msdn.com/Shows/Visual-Studio-Toolbox/Visual-Studio-ToolboxPortable-Class-Libraries Zasoby – c.d.
  • 55. © 2012 Microsoft Corporation. Wszelkie prawa zastrzeżone. Microsoft, Windows oraz inne nazwy produktów są lub mogą być znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Microsoft w Stanach Zjednoczonych i innych krajach. Zamieszczone informacje mają charakter wyłącznie informacyjny. FIRMA MICROSOFT NIE UDZIELA ŻADNYCH GWARANCJI (WYRAŻONYCH WPROST LUB DOMYŚLNIE), W TYM TAKŻE USTAWOWEJ RĘKOJMI ZA WADY FIZYCZNE I PRAWNE, CO DO INFORMACJI ZAWARTYCH W TEJ PREZENTACJI.