O tworzeniu rozwiązań mobilnych z punktu widzenia front-end dewelopera. Omówienie istniejących rozwiązań oraz głębsza analiza biblioteki NativeScript wraz z demem.
Demo #1: https://github.com/pawelkondraciuk/nativescript-hello-world-demo-1
Demo #2: https://github.com/pawelkondraciuk/sample-groceries-demo-2
19. Architektura
• Brak DOM
• Natywne komponenty
• JavaScript Virtual Machine
• Moduły node.js
Google V8 JavaScript Engine
WebKit JavaScript Core
20. Appcelerator Titanium
• Płatny $36/miesiąc
• Słaba dokumentacja
• Słabe wsparcie
• Wolny
„If I had a time machine, I’d stay away from this.”
21. React Native
• Naucz się raz, pisz wszędzie
• Shadow DOM
• JS, JSX, style objects
• oddzielne widoki na iOS i Android
• dostęp do API przez natywne
moduły
22. Hello World!
import React, { Component } from 'react';
import { AppRegistry, Text } from 'react-native';
class HelloWorldApp extends Component {
render() {
return (
<Text>Hello world!</Text>
);
}
}
AppRegistry
.registerComponent('HelloWorldApp', () => HelloWorldApp);
29. Brak API Wrappers
• Android
• iOS
var time = new android.text.format.Time();
time.set(1, 0, 2015);
console.log(time.format("%D"));
var alert = new UIAlertView();
alert.message = "Hello world!";
alert.addButtonWithTitle("OK");
alert.show();
32. Metadane
1. Generowanie listy dostępnego API
2. Budowanie drzewa metadanych
3. Wstrzykiwanie zależności do globalnego zakresu
API
Metadata.dat
android
util
Config() Log()
nfc
Tag()
Global
33. Jak to działa?
var file = new java.io.File(path);
java.lang.StringKonwersja typów
java.io.File()Metadane
java.io.File() file = FileProxyCall dispatcher
JavaScript Virtual Machine
43. Podsumowanie
• Mobilki to nie tylko Java/ObjC/C#
• JavaScript to potężny język
• Jeden dzień to za mało żeby zostać mobile deweloperem
• Wystarczą dwa
Moim zdaniem główne punkty do przemycenia byłyby takie:
- robimy od nowa fajne projekty dla dobrych klientów;
- staramy się zawsze z klientem wywalczyć maksymalną dowolność w wyborze technologii;
- stack technologiczny wybieramy także pod kątem szczęśliwości naszych developerów;
- nie boimy się wchodzić w nowe rzeczy (np. Elixir/Phoenix na backendzie, Angular 2 na froncie);
- nie robimy tylko CRUDów, potrafimy ogarnąć naprawdę skomplikowane rzeczy - np. codebeat;
- robimy też swoje rzeczy - na razie codebeat, ale w przyszłości będzie tego więcej;
- stawiamy na rozwój osobisty programistów, zachęcamy do nauki, także finansowo;
- mamy dobrze ogarnięty proces:
- code review, także pomiędzy projektami;
- pair programming dla chętnych;
- używamy najlepszych dostępnych na rynku narzędzi nawet jeśli są najdroższe (np. Slack);
- atmosfera (memy, PlayStation, V2MOM, godna płaca) ;
Kiedyś było łatwo, Windows albo Web. 2007 iPhone WWDC Steve Jobs
Dostęp przez api przeglądarki (notyfikacje, lokalna baza), często wymaga oddzielnego szablonu dla aplikacji mobilnych
Wiele wersji kodu
Wymaga wielu zespołów
Wydłuża proces
Jest kosztowne
Trudne w utrzymaniu
Powtarzalne błędy
Zmiany są jeszcze bardziej kosztowne
Dostęp do natywnego API
Wydajność
Look and Feel
Kompilacja skośna.
dostęp do API przez wrappery.
Ios kompilowany(Ahead-of-time) do natywnego ARM,
Android do języka pośredniego (IL), który jest JIT’owany do natwynego języka gdy aplikacja zostaje uruchomiona.
przejęty przez Microsoft i zintegrowany z Visual Studio.
OPEN SOURCE
Ograniczenia android: brak konstruktora, generyczne klasy są częściowo wspierane
Ograniczenia ios: Ograniczenia w dziedziczeniu NSObjects i dynamicznego generowania kodu System.Reflection.Emit
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_1_-_understanding_the_xamarin_mobile_platform/
Jedna baza kodu,
brak możliwości korzystania z UI Widgets
natywne API jest opakowane przez pluginy,
używa WebView i operuje na 1 watku więc jest niska wydajność,
niski koszt dewelopmentu, słaba dokumentacja.
Cordova to silnik renderujący używany przez PhoneGap (coś jak webkit dla Chorme).
Ionic to framework który renderuje wszystkie widoku w pojedynczym WebView (menu, nawigacja, zakładki jako dyrektywy AngularJS) a zmiany ekranów są animowane za pomocą CSSa. Material design
Supersonic wiele WebView, które przetrzymują różne dokumenty (index.html, contact.html). Nawigacja jest natywna. Zmiana ekranu odbywa się przez przejście do drugiego WebView (przejścia są wykonywane natywnie) a stan poprzedniego ekranu jest taki sam. Supersonic pozwala na używanie natywnych komponentów (np. Action bara) przez definiowanie ich w HTMLu
W skrócie Ionic to czysty AngularJS a Supersonic bardziej wykorzystuje natywność.
http://developer.telerik.com/featured/what-is-a-hybrid-mobile-app/
Na początku roku przeszli na płatny model i zamkneli forum społeczności. 36$ za najniższy plan
Rozbudowany ReactJS
W przypadku braku modułu trzeba znać ObjC/Java:
- mapowanie typów
- obsługa callbacków
- obsługa wątków
- rejestracja modułw
UI Thread: standard main thread for the platforms
Shadow Thread: Where measuring and layout occur. In a world where UI is constructed off the main thread, like in ComponentKit (an idea we’re hoping to ship soon), this is where that occurs.
JS Thread: Where React and Relay run.