Introducing NativeScript TJ VanToll | @tjvantoll nativescript.org - - PowerPoint PPT Presentation

introducing nativescript
SMART_READER_LITE
LIVE PREVIEW

Introducing NativeScript TJ VanToll | @tjvantoll nativescript.org - - PowerPoint PPT Presentation

Introducing NativeScript TJ VanToll | @tjvantoll nativescript.org NativeScript Timeline 0.9 Public Beta March 5 th , 2015 1.0 Go-live license Windows Phone support May 2015 What is NativeScript? A runtime for


slide-1
SLIDE 1

Introducing NativeScript

TJ VanToll | @tjvantoll

slide-2
SLIDE 2

nativescript.org

slide-3
SLIDE 3

NativeScript Timeline

  • 0.9
  • Public Beta
  • March 5th, 2015
  • 1.0
  • Go-live license
  • Windows Phone support
  • May 2015
slide-4
SLIDE 4

What is NativeScript?

  • A runtime for building and running native iOS,

Android, and Windows Phone apps with a single, JavaScript code base

slide-5
SLIDE 5
  • Bridge
slide-6
SLIDE 6
  • No DOM
  • No cross compilation

!= !=

slide-7
SLIDE 7

NativeScript Android example

Output:

slide-8
SLIDE 8
slide-9
SLIDE 9

NativeScript iOS example

slide-10
SLIDE 10
slide-11
SLIDE 11

How does this work?

slide-12
SLIDE 12

NativeScript and JS VMs

  • NativeScript runs JavaScript on a JavaScript VM
  • JavaScriptCore on iOS
  • V8 on Android
  • JavaScriptCore on Windows
slide-13
SLIDE 13
  • Runs on V8
  • Runs on JavaScriptCore
slide-14
SLIDE 14

Gathering Native APIs

  • NativeScript uses reflection to build a list of

available APIs for each platform.

  • For optimal performance, this metadata is pre-

generated, and injected into the app package at build time.

slide-15
SLIDE 15

Injecting native APIs

  • V8/JavaScript

Core have APIs to inject global variables

slide-16
SLIDE 16

Invoking native APIs

  • V8/JavaScriptCore have C++ callbacks for JS function

calls and property accesses.

  • The NativeScript runtime uses those callbacks to

translate JS calls into native calls.

  • On iOS, you can directly call Objective-C APIs from C+

+ code.

  • On Android, NativeScript uses Android’s JNI (Java

Native Interface) to make the bridge from C++ to Java.

slide-17
SLIDE 17
  • 1) The V8 function callback runs.
  • 2) The NativeScript runtime uses its metadata to

know that Time() means it needs to instantiate an android.text.format.Time object.

  • 3) The NativeScript runtime uses the JNI to

instantiate an android.text.format.Time object and keeps a reference to it.

slide-18
SLIDE 18
  • 4) The NativeScript runtime returns a JS object that

proxies the Java Time object.

  • 5) Control returns to JS where the proxy object

gets stored as a local time variable.

slide-19
SLIDE 19
slide-20
SLIDE 20

So do you only write native code?

No

slide-21
SLIDE 21

TNS modules

  • NativeScript-provided modules that provide cross-

platform functionality.

  • There are dozens of them and they’re easy to write

yourself.

  • TNS modules follow Node module’s conventions

(CommonJS).

slide-22
SLIDE 22

TNS file module

slide-23
SLIDE 23

HTTP module example

slide-24
SLIDE 24

Custom TNS modules

slide-25
SLIDE 25

Using the custom device module

slide-26
SLIDE 26

Community modules

  • https://github.com/alejonext/NativeNumber
  • Someone created this 7 hours after the NativeScript public

release.

slide-27
SLIDE 27

But how do I turn this into an app?

slide-28
SLIDE 28

Two ways to use NativeScript

1) 2)

slide-29
SLIDE 29
  • Backend-as-a-service
  • Push notifications, cloud data, file storage, and more
  • Analytics
  • AppBuilder
  • Cloud builds (build iOS apps on Windows, Windows Phone apps on

a Mac)

  • NativeScript debugging and tooling
  • Automated app testing
  • And more!

http://telerik.com/platform

slide-30
SLIDE 30

https://www.telerik.com/purchase/platform

slide-31
SLIDE 31

NativeScript CLI

  • Free and open source
  • https://github.com/nativescript/nativescript-cli
slide-32
SLIDE 32

NativeScript CLI requirements

  • https://github.com/nativescript/nativescript-

cli#system-requirements

  • Xcode, Xcode CLI tools, iOS SDK
  • JDK, Apache Ant, Android SDK
slide-33
SLIDE 33

Starting a new project

slide-34
SLIDE 34

Running on iOS

slide-35
SLIDE 35

Running on Android

slide-36
SLIDE 36
slide-37
SLIDE 37

app.js

slide-38
SLIDE 38

Pages

  • XML markup structure
  • Elements (e.g. <Page>, <Label>) are TNS

modules

slide-39
SLIDE 39

Data binding

slide-40
SLIDE 40

Data binding improved

slide-41
SLIDE 41

CSS

slide-42
SLIDE 42

http://docs.nativescript.org/styling#supported- properties

slide-43
SLIDE 43

Demo time!

slide-44
SLIDE 44

Contribute! (nativescript.org/contribute)

slide-45
SLIDE 45

Follow NativeScript

  • @nativescript
  • https://nativescript.org/blog
slide-46
SLIDE 46

Questions?

  • TJ VanToll | @tjvantoll
slide-47
SLIDE 47

Thanks!