Upload
charity-haney
View
53
Download
0
Embed Size (px)
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
Citation preview
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 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-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.