5. System homogenicznych firm się rozpada
• Firmy koncentrują się zwykle na jednej
platformie i na jednym języku.
• Zwykle jest to C# i .NET.
• Rynek mobilny przypomniał, że trzeba
specjalistów z różnorodnych platform i
języków.
25. There is hope:
• Wracasz z pracy.
• Jaką formę rozrywki po pracy wybrać
• …nie grasz w gry bo nie masz na to
czasu.
• …ty oglądasz jak ktoś gra w grę.
29. Koszty
• 399$ dla firmy która ma mniej niż 10
pracowników. Licencja jest na jedną
osobę.
• 999$ dla firmy która ma więcej niż 10
pracowników. Licencja jest dla każdego
pracownika.
38. Co to znaczy natywny
• Różne interpretacje natywności
Objective C/
C++
C/C++
Inna architektura
CPU
C#
/Silverlight/
WinRT? XNA
39. Znaczenie natywności
• Natywny = używa platformy i bibliotek
OS nie zależnie od języka czy narzędzi.
• Natywny = Doświadczenie użytkownika
które w 100% scala się z domyślny
doświadczeniem przygotowanym przez
twórcę platformy „X”.
40. 3 różne natywność
XCODE
Objective C
Android SDK
JAVA
WP 7
SIlverlight
Narzędzia dostawcy Magiczne pudełko
Adobe Air
ActionScript
Rhodes
Ruby + HTML
Symbas
Unwired
„4GL” Code
gene
Antenna
Rapid
Scripting
Language
Phone Gap
HTML 5
Appcelerator
Titanium
JavaScrip >
Native
43. Czy to prawda
• Nie pokaże wam kodu który to
potwierdzi
• Jednak wystarczy użyć trochę logik by
stworzyć konstruktywny dowód.
• Wszystko sprowadza się do kompilatora
44. Mono C# vs Java
• Android i Java
– Android nie używa kodu natywnego
– Działa on VM „Dalvik” (który uruchamia
binarny kod Javy)
– Mono JIT został porównany i…
– …jest szybszy
http://www.koushikdutta.com/2009/01/dalv
ik-vs-mono.html
45. Mono C# vs Java
• Android i Java
– Jednak Mono musi się komunikować z
„Dalvik”.
46. Mono C# vs Objective C
• W przypadku Objective-C
– IOS i MonoTouch kompiluje kod do
natywnej aplikacji przed jej instalacją na
urządzenie Apple (wynika to z licencji)
– Mono i Objective C podobno używają tej
samej maszyny (LLVM) który ten kod
generuje więc nie powinno być żadnej
różnicy.
47. Szczególnie dotyczy to urządzeń mobilnych
Jeśli coś wolno działa to raczej to twoja winna
Nie twórz czegoś co przekracza możliwości urządzenia
48. Postrzegana wydajność
Spraw by aplikacja
byłą szybka
• Utrzymaj mały
rozmiar aplikacji
• Utnij czas startu
aplikacji
• Działaj w tle
Wydajność jest ukryta w oku
obserwatora
50. Możecie mieć dostęp do wszystkich możliwości
urządzenia
• Dla każdego urządzenia jest zestaw przestrzeni
nazw które umożliwiają dostęp do urządzenia.
Używaj abstrakcji
55. O czym zapominamy
• Styl aplikacji
– Widziałem dużo aplikacji IPhone na WP8
• Było to koszmarne przeżycie
• Specyfika urządzenia
– Android ma tyle różnych rozmiarów itp.
58. Model ale nie jego wykonanie
• Jest cykl życia aplikacji
• Zapisywanie stanu aplikacji
• Sandbox
• Łączność z Internetem
• Szyfrowanie informacji
• Dostęp do właściwości urządzenia.
• Tosty
59. Usługi sieciowe
• Jakiej technologii używamy by uzyskać dostęp
do danych.
– Powinniśmy używać REST
• Lekkie dla telefonu.
• Dużo własnego kodu
– Powinniśmy używać SOAP ?
• Narzędzia które generują proxy.
• Za ciężkie dla telefonu
– RIA Service
• Utworzenie endpointów XML,JSON i ODATA
67. PORTABLE CLASS LIBRARY
• Zalety
– Jedna biblioteka do wszystkich platform
– Pomaga w tworzeniu wspólnego
podzbioru
• Wady
– Brak dyrektyw PreProccesor
– Brak kodu specyficznego dla platformy
– Brak wsparcia dla MonoDevlop
70. Linked Files
• Zalety
– Ten sam kod na wszystkich platformach
– Możliwość dodanie kodu specyficznego
dla platformy
– Dyrektywy Preprocessor
• Wady
– Potrzeba zarządzania wieloma projektami
74. VSMonoTouch
• Zalety
– Otwiera i weryfikuje projekty MonoTouch
w VS2010 (Windows)
• Wady
– Brak prawdziwej <kompilacji>
– Pewne kroki manualne trzeba wykonać
80. // Windows Phone 7
public class DispatchAdapter : IDispatchOnUIThread
{
public void Invoke(Action action)
{
Deployment.Current.Dispatcher.BeginInvoke(action);
}
}
81. // Mono for Android
public class DispatchAdapter : IDispatchOnUIThread
{
private readonly Activity _owner;
public DispatchAdapter(Activity owner)
{
_owner = owner;
}
public void Invoke(Action action)
{
_owner.RunOnUiThread(action);
}
}
82. // Monotouch
public class DispatchAdapter : IDispatchOnUIThread
{
private readonly NSObject _owner;
public DispatchAdapter(NSObject owner)
{
_owner = owner;
}
public void Invoke (Action action)
{
_owner.BeginInvokeOnMainThread(
new NSAction(action));
}
}
94. XML vs XAML
• Windows Phone 7, Windows 8
• Monodroid
95. MVVM
• Zalety
– Jeszcze większe dzielenie kodu
– Testowalne ViewModel
• Wady
– Więcej abstrakcji w kodzie
– Może wydawać się nienaturalny dla
platformy
– MVVMCross nie posiada dużo
przykładów