37
JavaScript Lab January 18, 2016 Building Native Mobile Apps using Javascript with Titanium

Building Native Mobile Apps using Javascript with Titanium

Embed Size (px)

Citation preview

Page 1: Building Native Mobile Apps using Javascript with Titanium

JavaScript Lab January 18, 2016

Building Native Mobile Apps using Javascript with Titanium

Page 2: Building Native Mobile Apps using Javascript with Titanium

Fokke Zandbergen Developer Evangelist

Appcelerator

@FokkeZB

Page 3: Building Native Mobile Apps using Javascript with Titanium

Program

1. Appcelerator: More than Apps 2. JS2Native: No WebView 3. Titanium: SDK & Cross-Platform API 4. Alloy: MVC for Titanium 5. Hyperloop: Access any (3P) API in JS

Slides will be linked from @FokkeZB tomorrow morning

Page 4: Building Native Mobile Apps using Javascript with Titanium

Appcelerator: More than Apps

Page 6: Building Native Mobile Apps using Javascript with Titanium
Page 7: Building Native Mobile Apps using Javascript with Titanium
Page 8: Building Native Mobile Apps using Javascript with Titanium
Page 9: Building Native Mobile Apps using Javascript with Titanium

2 Native

Page 10: Building Native Mobile Apps using Javascript with Titanium

NO!

Page 11: Building Native Mobile Apps using Javascript with Titanium

HTML Apps

" #!

Page 12: Building Native Mobile Apps using Javascript with Titanium

HTML Apps

Page 13: Building Native Mobile Apps using Javascript with Titanium

JS2Native

Page 14: Building Native Mobile Apps using Javascript with Titanium

Titanium

Page 15: Building Native Mobile Apps using Javascript with Titanium

Architecture

Alloy Codebase Development

JavaScript

PackageRun-time

TitaniumModule APIs

TitaniumCore APIs

HyperloopAPIs

Kroll(iOS/Android)

HAL (Windows)

3P APIs OS Device & UI APIs Platform

Page 16: Building Native Mobile Apps using Javascript with Titanium

Hello World

var window = Ti.UI.createWindow({backgroundColor: “white"

});

var label = Ti.UI.createLabel({text: “Hello World”

});

label.addEventListener(“click”,function open() {

alert(“Hello World”);}

);

window.add(label);

window.open();

Ti API

Page 17: Building Native Mobile Apps using Javascript with Titanium

Ti.createMyFartApp()

Ti.UI.createX() // Cross-platform UI View factoriesTi.UI.X // The UI View proxy the factory creates

Ti.UI.iOS.X // Platform specific UI View factories

Ti.X // Cross-platform device APIsTi.Android.X // Platform specific device APIs

require(“ti.map”).X // CommonJS & Titanium Modules

Page 18: Building Native Mobile Apps using Javascript with Titanium

docs.appcelerator.com

Page 19: Building Native Mobile Apps using Javascript with Titanium

File Structure

▾ Resources ▾ images logo.png app.js main.js utils.jstiapp.xml config

code

Page 20: Building Native Mobile Apps using Javascript with Titanium
Page 21: Building Native Mobile Apps using Javascript with Titanium

Alloy MVC

Page 22: Building Native Mobile Apps using Javascript with Titanium

Classic Spaghetti

var window = Ti.UI.createWindow({backgroundColor: “white"

});

var label = Ti.UI.createLabel({text: “Hello World”

});

label.addEventListener(“click”,function open() {

alert(“Hello World”);}

);

window.add(label);

window.open();

style

logic

markup

Page 23: Building Native Mobile Apps using Javascript with Titanium

<Alloy> <Window> <Label onClick=”open”>Hello World</Label> </Window></Alloy>

”Window”: {backgroundColor: “white”

}

function open() {alert(“Hello World”);

}

$.index.open();

index.xml

index.tss

index.js

Alloy

Page 24: Building Native Mobile Apps using Javascript with Titanium

▸ app▾ Resources ▾ alloy ▾ controllers index.js backbone.js CFG.js underscore.js ▾ images logo.png alloy.js app.js utils.jstiapp.xml

▾ Resources ▾ images logo.png app.js main.js utils.jstiapp.xml

▾ app▾ assets ▾ images logo.png▾ controllers index.js▾ lib utils.js▾ styles index.tss▾ views index.xml▾ widgetsalloy.jsconfig.json

tiapp.xml

File Structure

Page 25: Building Native Mobile Apps using Javascript with Titanium

What happens to your XML and TSS?<Foo>

<Foo ns=“Ti.bar”>

<Foo module=“bar”>

<Require src=“foo”>

<Widget src=“foo”>

<Foo id=“bar”>

<Foo bar=“zoo”>

“#bar”: { color: “white” }

Ti.UI.createFoo();

Ti.bar.createFoo();

require(“bar”).createFoo();

Alloy.createController(“foo”) .getView();

Alloy.createWidget(“foo”) .getView();

$.bar = Ti.UI.createFoo();

Ti.UI.createFoo({ bar: “zoo” });

$.bar = Ti.UI.createFoo({ color: “white” });

Page 26: Building Native Mobile Apps using Javascript with Titanium

A lote more..

• Platform specific code blocks and assets • Platform/Environment specific config file • Underscore + Moment.js: built-in libraries • Backbone.js: events, models and data-binding • Alloy Themes: Ideal for white label apps • Alloy Widgets: Re-use code across apps • …

Page 27: Building Native Mobile Apps using Javascript with Titanium
Page 28: Building Native Mobile Apps using Javascript with Titanium
Page 29: Building Native Mobile Apps using Javascript with Titanium

"

var blur = require('bencoding.blur');

var view = blur.createBasicBlurView({ blurRadius: 5, image: '/images/background.png' });

var window = Ti.UI.createWindow(); window.add(view);

window.open();

How you used to extend Titanium

Page 30: Building Native Mobile Apps using Javascript with Titanium

# Hyperloop for Windows

var Window = require('Windows.UI.Xaml.Window'), TextBlock = require('Windows.UI.Xaml.Controls.TextBlock'), Colors = require('Windows.UI.Colors'), SolidColorBrush = require('Windows.UI.Xaml.Media.SolidColorBrush');

var text = new TextBlock(); text.Text = 'Hello, world!'; text.FontSize = 50; text.Foreground = new SolidColorBrush(Colors.Red);

var window = Window.Current, window.Content = text;

window.Activate();

Page 31: Building Native Mobile Apps using Javascript with Titanium

var Hyperloop = require("hyperloop"); var TiApp = require("TiApp"); var UIViewController = require("UIViewController"); var UILabel = require("UILabel"); var UIColor = require("UIColor"); var UIScreen = require("UIScreen"); var CGRect = require("CGRect"); var NSTextAlignment = require("NSTextAlignment");

var label = UILabel.initWithFrame(CGRect.Make(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height )); label.setText('Hello World!'); label.setTextColor(UIColor.redColor());

var viewController = UIViewController.init(); viewController.view.setBackgroundColor(UIColor.whiteColor()); viewController.view.addSubview(label);

TiApp.app().showModalController(viewController, false);

Hyperloop for iOS

Page 32: Building Native Mobile Apps using Javascript with Titanium

var Hyperloop = require("hyperloop"); var TiApp = require("TiApp"); var UIViewController = require("UIViewController"); var UILabel = require("UILabel"); var UIColor = require("UIColor"); var UIScreen = require("UIScreen"); var CGRect = require("CGRect"); var NSTextAlignment = require("NSTextAlignment");

var label = UILabel.initWithFrame(CGRect.Make(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height )); label.setText('Hello World!'); label.setTextColor(UIColor.redColor());

var viewController = UIViewController.init(); viewController.view.setBackgroundColor(UIColor.whiteColor()); viewController.view.addSubview(label);

TiApp.app().showModalController(viewController, false);

Hyperloop for iOS

Page 33: Building Native Mobile Apps using Javascript with Titanium

" Hyperloop for Android

var TextView = require('android.widget.TextView'), Activity = require('android.app.Activity'), Color = require('android.graphics.Color'), RelativeLayout = require('android.widget.RelativeLayout'), Gravity = require('android.view.Gravity'), TypedValue = require('android.util.TypedValue'); var text = new TextView(activity); text.setText("Hello World!"); text.setTextColor(Color.RED); text.setTextSize(TypedValue.COMPLEX_UNIT_PX, 60);

var layout = new RelativeLayout(activity); layout.setGravity(Gravity.CENTER); layout.setBackgroundColor(Color.BLACK);

layout.addView(text);

var activity = new Activity(Ti.Android.currentActivity); activity.setContentView(layout);

Page 34: Building Native Mobile Apps using Javascript with Titanium

var text = Ti.UI.createLabel({ text: "Hello, world!", font: { fontSize: 60 }, color: 'red' });

var window = Ti.UI.createWindow();

window.add(text); window.open();

Abstraction can be good

Page 35: Building Native Mobile Apps using Javascript with Titanium

labs.appcelerator.com

Page 36: Building Native Mobile Apps using Javascript with Titanium

www.appcelerator.com/signup

Page 37: Building Native Mobile Apps using Javascript with Titanium

Slides will be linked from @FokkeZB tomorrow morning

Thank You !