Building Native Mobile Apps using Javascript with Titanium

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

Transcript of Building Native Mobile Apps using Javascript with Titanium

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 !