Programowanie urządzeń mobilnych

Post on 31-Dec-2015

55 views 0 download

description

Programowanie urządzeń mobilnych. Bartłomiej Zass Microsoft. Plan prezentacji. Aplikacje mobilne w HTML i JavaScript Aplikacje natywne Windows 8, Windows Phone 7 – krótkie przypomnienie Windows Phone 8 dla programistów Techniki współdzielenia kodu dla aplikacji natywnych - PowerPoint PPT Presentation

Transcript of Programowanie urządzeń mobilnych

Programowanie urządzeń mobilnych

Bartłomiej ZassMicrosoft

Aplikacje mobilne w HTML i JavaScript Aplikacje natywne

Windows 8, Windows Phone 7 – krótkie przypomnienie Windows Phone 8 dla programistów

Techniki współdzielenia kodu dla aplikacji natywnych Windows Phone 8, Windows 8 – podobieństwa i różnice Architektura aplikacji - MVVM i Portable Class Libraries

Plan prezentacji

Źródło: Gartner

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 hybrydoweCross-kompilacja

Titanium (Appcelerator)…

Frameworki Javascript

Apache Cordova (PhoneGap)AppMobi…

JQueryMobileSenchaTouchJoPropulsion…

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

Aplikacje natywne

Windows 8 – krótkie przypomnienieWindows Phone

Platforma Windows 8Windows Store Apps

HTMLJavaScript

CC++

C#VB

Desktop Apps

Win32 .NET / SL

Internet Explorer

Communication & Data

Application Model

Devices & Printing

WinRT APIs

Graphics & Media

Syst

em S

ervi

ces

JavaScript(Chakra)

CC++

C#VB

XAML HTML / CSSView

Mod

el

Cont

rolle

r

Windows Core OS ServicesCore

DemoWindows 8 i Windows Phone 7

Windows Phone 8

• wiele rdzeni procesora,• nowy procesor graficzny,• nowoczesna architektura,• karty MicroSD,• NFC,• …

Nowe telefony, nowe rozdzielczości, …

WVGA800 x 48015:9

WXGA1280 x 76815:9

720p1280 x 72016:9

WVGA480x8001.0 Scale

720p720x12801.5 Scale

WXGA768x12801.6 Scale

400 Logical400 Physical

400 Logical600 Physical

400 Logical640 Physical

30 Logical30 Physical

30 Logical45 Physical

30 Logical48 Physical

2 Logical2 Physical

2 Logical3 Physical

2 Logical3 Physical (Rounded)

Myśl o layoutach w pikselach WVGAMyśl o grafice / filmach w WXGA

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

RuntimeWin32 & 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

• 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.PersonalInformati

on• LockScreen,LockScreenManager• Wszystkie i dodatki

• 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

Co z aplikacjami na Windows Phone 7.x?

• Aplikacje stworzone na WP 7.x

będą działały na telefonach z

systemem WP 8.0

Aplikacje WP 7.x na systemie WP 8.0

WP OS 7.1 app

WP 8.0 Runtime/Libraries

bez rekompilacji

WP OS 7.1 app

+Quirks

WP OS 8.0 app

WP OS 8.0 app

Skąd wziąć narzędzia do programowania?

http://dev.windowsphone.com

Twoje centrum dowodzenia aplikacjami

• Nie jest wymagane do tworzenia aplikacji• Jest wymagane do testowania aplikacji na urządzeniu i publikacji jej w

Windows Phone Store• Jak je otrzymać?:

• znajduje się w MSDN,• studenci bezpłatnie poprzez Dreamspark, • płacąc 99$ rocznie per programista.

Konto deweloperskie

• System operacyjny:• Windows 8 x64

• Hardware:• zalecane 4GB RAM, • 8GB wolnej przestrzeni dyskowej

• WP Emulator wymaga Second Level Address Translation (SLAT)

Wymagania sprzętowe dla WP SDK 8.0

• Z klawiatury:•Dwa razy F12

• Simulation Dashboard

Lock the Screen na emulatorze

• Dostępne w simulation dashboard• Testowanie dla różnych warunków sieci

Symulacja sieci

• Na emulatorze• Na urządzeniu

•Przyciski Win + power

Zrzuty ekranu

36

Co nowego w Windows Phone 8?

Wydajność aplikacji

• Czas startu bardzo ważny z punktu widzenia użytkownika• Facebook • WP 7 – 12 sekund• WP 8 – 4 sekundy

• Dlaczego?• Zmiany w środowisku uruchomieniowym• Usprawnienia CoreCLR• Kompilowanie w chmurze• Dual core > 1 ghz

Kompilowanie w chmurze

• CoreCLR dodaje wsparcie dla NGEN• Czasochłonne na urządzeniu

• Po zgłoszeniu aplikacji do Windows Store automatyczny NGEN• Nowe aplikacje• Zgłaszamy XAP• XAP aktualizowany – kod natywny

• Co z istniejącymi aplikacjami?• Aplikacje WP 7.5 kompilowane przez NGEN dla WP 8• Oryginalny XAP pozostaje dla WP 7.x

Model aplikacji

• Użytkownicy oceniają aplikację na podstawie własnych doświadczeń• 4 sekundy to wciąż długo, jeśli często uruchamiamy aplikację• Za każdym razem wchodzenie do określonej sekcji aplikacji

• Fast Application Swithing – WP 7.x• Przycisk wstecz• Task switcher – wielu użytkowników nie wie o nim

Fast Application Resume

• Aplikacja może być wskrzeszana niezależnie od tego jak została uruchomiona• Lista aplikacji• Live Tile• Toast• Deep link

• Jeśli jest na stosie – przywracanie• Jeśli nie ma jej na stosie – nowa instancja• Podobnie jak w Windows 8

Włączanie Fast Application Resume

• Domyślnie wyłączone• Ochrona interfejsu użytkownika• Pewność, ze aplikacje będą działały prawidłowo

• Bardzo proste do włączenia• Nowy atrybut ActivationPolicy w DefaultTask

<DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume"/>

Kontrolki

• ProgressBar animuje się poza wątkiem UI• Panorama, Pivot i LongListSelector przeniesione do ROM• Mniejsze zużycie pamięci przez kontrolkę Panorama• Poprawiony „first touch experience”• Toolkit – http://phone.codeplex.com

LongListSelector

JumpList Sticky HeadersGrid View

• Nowa kontrolka korzysta z technologii i zasobów Nokia

• Zawiera m.in.:

•Bazuje na wektorach

• cztery modele kartograficzne

• tryb jasny i ciemny

• informacje o ruchu, trasach itp.

Nowa kontrolka do wyświetlania map

• Bliźniacze do API w Windows 8

• Windows Phone OS 7.1 .NET Location API nadal jest

wspierane

• Background task pobierający lokalizację urządzenia

• Tylko 1 agent

• Tylko kiedy aktywnie śledzi położenie

Nowe API służące do lokalizacji

Jak włączyć?

<DefaultTask Name="_default" NavigationPage="Views/Home.xaml"><BackgroundExecution>

<ExecutionType Name="LocationTracking" /></BackgroundExecution>

</DefaultTask>

Nowe wielkości i szablony kafelków

• W Windows Phone 8 możemy korzystać z trzech typów Tile:

• Flip – dwa „rotujące” obrazki (tożsame z WP 7.1 Tile)

• Iconic – sama pojedyncza ikona

• Cycle – „rotacja” do dziewięciu różnych obrazków

• Użytkownik może dodać powiadomienia z naszej aplikacji (LockScreen Notification)

• Nasza aplikacja może zmienić tło zablokowanego ekranu (LockScreen Background)

• New Shell APIs• ShellSetWallpaper to use a new image• ShellWallpaperSchedule to download a single image

from the internet on a specific interval (e.g., 30 mins, 1 hour, etc.)

• ShellWallpaperFolderSchedule to cycle through a set of image in app’s isolated storage (e.g., a photo slideshow) based on number of views of the lock screen

Dostęp do Lockscreen

• SaveAppointmentTask• ShareMediaTask•MapDownloaderTask •MapsTask •MapsDirectionsTask

Zestaw nowych launcherów

• Voice Commands umożliwia uruchomienie aplikacji, lub jej konkretnej funkcji, za pomocą głosu, po przytrzymaniu przycisku Start

• Speech Recognition + Text-to-Speech API wspiera przekształcenie mowy w tekst i czytanie już zapisanego teksu

Komendy głosowe i rozpoznawanie mowy

Portfel

Możliwość zarządzania kartami i „kuponami” z poziomu własnej aplikacji

Obsługa kart: kredytowych i debetowych, lojalnościowych, specjalnych ofert,

Wsparcie dla „tap to pay”

• Lenses = rozszerzenia do kamery oferujące nowe opcje, możemy tworzyć je sami i udostępniać użytkownikom • Picture.GetPreviewImage() = miniaturka

obrazka• Integracja aplikacji z Photo Edit Picker

lub rejestracja jako własny edytor• Upload zdjęć w tle do zewnętrznych

serwisów• Zaawansowana kontrola (klasy

PhotoCaptureDevice i AudioVideoCaptureDevice)

Nowe możliwości aparatu fotograficznego i przetwarzania zdjęć

VoIP i wideo rozmowy

API dostępne dla wszystkich

deweloperów

Rozmowy integrują się z

systemem telefonu

Aplikacje VoIP działają również w

tle

Protokoły i asocjacje

• Własne schematy• Rejestracja własnego URI dla aplikacji• Np. skype:jankowalski – rozpoczyna konwersację• Fb://profile/7031234 – otwiera profil użytkownika

• Integracja z przeglądarką• Integracja między aplikacjami

• Typy plików• Zarejestruj aplikację dla danego formatu pliku

Loved the Purple Onion

Peter Bergman

Skype:PeterBergman

Deep linking - przykład

• Bluetooth API• komunikacja aplikacja – aplikacja,• komunikacja aplikacja – urządzenie

• Proximity API• połączenie aplikacji z wykorzystaniem Bluetooth,• ustanowenie połączenia Wi-Fi, Bluetooth lub Wi-Fi

Direct pomiędzy aplikacją, a jej instancją działająca na innym urządzeniu,

• wysyłanie danych poprzez NFC,• interakcję z tagami NFC

Bluetooth i NFC

• Windows.Networking Windows Phone Runtime API• nowe API kompatybilne z Windows 8

• Nasłuchiwanie przychodzących połączeń (Incoming Sockets)• wspierane przez System.Net.Sockets i Windows.Networking.Sockets

• Wsparcie dla IPV6• Wsparcie dla Winsock API

• możliwość przenoszenia już istniejących bibliotek natywnych korzystających z tego API

Możliwości sieciowe

• Microsoft.Phone.Storage API umożliwia

czytanie danych z karty MicroSD

• Użytkownik może zapisywać personalne

dane i multimedia na karcie w telefonie

Przechowywanie danych na kartach MicroSD

Zdjęcia ▪ Muzyka Filmy ▪ Instalacja aplikacji

Baza danych

• SQL Server i Linq To SQL nadal obsługiwane• Wiele zgłoszeń, że potrzebne są alternatywne rozwiązania• Kompatybilność z innymi platformami

• SQLite

• Dostęp do API umożliwiającego tworzenie, edycję,

kasowanie, przeszukiwanie własnych typów kontaktów

• Możliwość automatycznej synchronizacji listy z listą

wystawiona na własnym serwerze

• Dostęp read/write do własnych

• Dostęp readonly do pozostałych jeśli użytkownik

wyraził zgodę (jak w Mango)

Własna lista kontaktów

• API do tworzenia aplikacji z katalogiem własnych produktów • Microsoft zapewnia całe środowisko

sprzedażowe• Po stronie programisty pozostaje obsługa

zakupionego przez użytkownika przedmiotu

In-app Purchase = zakupy wewnątrz aplikacji

Enterprise

• Zarządzanie urządzeniami• inTune, itp.• Ustawianie i aktualizowanie polis• Automatyczne aktualizowanie aplikacji

• Deployment• Nie trzeba zgłaszać aplikacji do Windows Store• Różne sposoby wdrażania (managed / unmanaged), web, email, aplikacja

Firmowe kontoNazwa firmy wyświetlana na telefonie

Wymagane zatwierdzenie żądania

Tworzenie konta

Deployment – managed vs unmanaged

Feature Managed Unmanaged

Enrollment method Settings applet + MDM Email/browser

Policy management Yes No

Number of enrollments Limited to 1 Unlimited

App install method MDM/company hub Email/browser/company hub

App inventory MDM No

Silent app updates MDM No

Unenroll Remote and local No

Managed enrollment

Company Hub

Windows Phone i Windows 8

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.DataTransferManager

• 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

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

Kontrolki XAML

Mapowanie kontrolek

Np. Panorama, PivotNp. GridView, ListView

Np. Grid, StackPanel, TextBox, ListBox, Button, itp.

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

View

ViewModel

DataBinding CommandsMessages

Model

View Service

Events

PropertyChanged

Widoki Jak wyświetlić

informację? Napisane w XAML

View Modele Jaką informację

wyświetlić? Logika interakcji

Modele Model danych Logika biznesowa ...

Platform-specific

Przenośne

Architektura cross-platform

Startup

Widoki

Windows Store App

Kod platform - specific

View Modele

Modele

Portable Class Library

Abstrakcje platform - specific

Startup

Widoki

Windows Phone App

Kod platform - specific

Referencja Referencja

// 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 LibraryW plikach XAML – nieobsługiwaneOstroż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 - implementacjapublic class PhoneServiceBusAdapter : ServiceBusAdapter{  public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data)  {    using (var cryptoProvider = new HMACSHA256(secretKey))    {      return cryptoProvider.ComputeHash(data);    }  }}// Windows 8 - implementacjapublic 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 startupServiceBusAdapter.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

// 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.MainViewModelpublic 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?

HTML 5 (+ PhoneGap) Niski koszt wejścia Wiele platform Niższa wydajność i mniejsze możliwości

Windows Phone 8 i Windows 8 Wiele współdzielonych elementów, ale też różnic

MVVM i Portable Class Libraries Współdzielenie logiki Abstrakcje funkcjonalności platform-specific

Podsumowanie

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-yo

u.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.