85
MOBILE DEVELOPMENT OPTIONS PRATIK PATEL | CTO | TripLingo twitter: @prpatel

Mobile Development Options

Embed Size (px)

DESCRIPTION

Great Wide Open 2014 - Day 1 Pratik Patel - TripLingo 2:30 - Developers 2

Citation preview

Page 1: Mobile Development Options

MOBILE DEVELOPMENT

OPTIONS

!PRATIK PATEL | CTO | TripLingo twitter: @prpatel

Page 2: Mobile Development Options

TOPICS• Android, iOS, HTML5/CSS3, Phonegap, Titanium, and jQuery Mobile

• native, cross-platform-to-native, and mobile web

• deep dive into: - phonegap - titanium

PRATIK PATEL | CTO

Page 3: Mobile Development Options

WE’ll FOCUS ON

PRATIK PATEL | CTO

Page 4: Mobile Development Options

MY EXPERIENCE

PRATIK PATEL | CTO

Page 5: Mobile Development Options

overview of the options !!!!

Page 6: Mobile Development Options

NATIVE MOBILE• Must know Objective-C & Java very well

• SDK is closed source, many open-source libs available

PRATIK PATEL | CTO

Page 7: Mobile Development Options

NATIVE II• MUST KNOW THE TOOL chain for each platform

PRATIK PATEL | CTO

Page 8: Mobile Development Options

ANDROID

PRATIK PATEL | CTO

Page 9: Mobile Development Options

XCODE

PRATIK PATEL | CTO

Page 10: Mobile Development Options

NATIVE III• ABILITY TO CREATE best possible app

• time & effort multiplied by platform

• obviously not cross-platform

PRATIK PATEL | CTO

Page 11: Mobile Development Options

PRATIK PATEL | CTO

Page 12: Mobile Development Options

PHONEGAP• native wrapper

- bootstraps a webkit browser !

• open-source as “Apache Cordova”

PRATIK PATEL | CTO

Page 13: Mobile Development Options

PHONEGAP• provides hooks into native functions - camera, contacts, accelerometer, etc

PRATIK PATEL | CTO

Page 14: Mobile Development Options

PRATIK PATEL | CTO

http://www.melablog.it/post/11421/phonegap-riceve-il-nulla-osta-di-apple-per-app-store

Page 15: Mobile Development Options

PHONEGAP• Must use native toolchain to build phonegap wrapper

PRATIK PATEL | CTO

Page 16: Mobile Development Options

CROSS PLATFORM

PRATIK PATEL | CTO

http://mashable.com/2011/02/22/html-mobile-development/

Page 17: Mobile Development Options

CODING PHONEGAP• you can develop right in a desktop browser for most of your app!

PRATIK PATEL | CTO

Page 18: Mobile Development Options

MOBILE WEB LIBS- jquery mobile - sencha touch - jo (joapp.com) - kendoui

PRATIK PATEL | CTO

Page 19: Mobile Development Options

PRATIK PATEL | CTO

phonegap DIAGRAMOperating System (iOS/Android)

Phonegap native wrapper app

Webkit browser engineYour

code runs here

Page 20: Mobile Development Options

PRATIK PATEL | CTO

phonegap on ios

Page 21: Mobile Development Options

APP DEV PLATFORMS

PRATIK PATEL | CTO

Page 22: Mobile Development Options

APP DEV PLATFORMS• Xamarin (formerly monotouch) (C#)

• Ansca Corona (LUA)

• Appcelerator TITANIUM (JAVASCRIPT)

• Only TITANIUM is open-source

PRATIK PATEL | CTO

Page 23: Mobile Development Options

APP DEV PLATFORMS• do _NOT_ generate code

• bridge from LANG <X> to native

• uses native toolchain

PRATIK PATEL | CTO

Page 24: Mobile Development Options

BRIDGE• VENDOR WRITES HOOKS to native API

• vendor marshalls / unmarshalls calls & data in both directions

PRATIK PATEL | CTO

Page 25: Mobile Development Options

PRATIK PATEL | CTO

how they work

you code here

var win1 = Titanium.UI.createWindow({ url:'main.js', title:'Spice Guide', // backgroundImage:'./images/bg.png', navBarHidden: false, tabBarHidden: true});

app platform

android sdkios sdk

platform provides API

platform bridges to native

Page 26: Mobile Development Options

TITANIUM

PRATIK PATEL | CTO

Page 27: Mobile Development Options

TITANIUM• open source, 100% free

• IDE - titanium studio - based on eclipse

PRATIK PATEL | CTO

Page 28: Mobile Development Options

TITANIUM II• code in javascript

• again, not a generator !

PRATIK PATEL | CTO

Page 29: Mobile Development Options

CODE REUSE?• 100% Of non-UI code is reusable

• 80% of UI code is reusable

• UI code can become more reusable with experience and patterns!

PRATIK PATEL | CTO

Page 30: Mobile Development Options

TITANIUM == NATIVE

PRATIK PATEL | CTO

• Titanium api calls native objects/methods

• no code generation

• native widgets

• Tons of open-source modules available!

Page 31: Mobile Development Options

PRATIK PATEL | CTO

titanium live coding

Page 32: Mobile Development Options

notice something common? !!!!

Page 33: Mobile Development Options

NATIVE TOOLCHAIN!

PRATIK PATEL | CTO

Page 34: Mobile Development Options

PRATIK PATEL | CTO

you must learn the native toolchain for any of the options!

Page 35: Mobile Development Options

NATIVE TOOLCHAIN• you must learn the native toolchain

• spend a few days building a native app for each platform you’re interested in

• the time you invest in this will be paid back 100x

PRATIK PATEL | CTO

Page 36: Mobile Development Options

COMPARING THE OPTIONS

PRATIK PATEL | CTO

Page 37: Mobile Development Options

NATIVE • no code reuse

• best possible experience

• games, low-level needs

• cost: $$$$$

PRATIK PATEL | CTO

Page 38: Mobile Development Options

PHONEGAP • use tech you know (HTML/JS/CSS)

• Rapid development

• user experience is hard to perFect

• bad performance

• nuances of browser tech = black hole of effort

PRATIK PATEL | CTO

Page 39: Mobile Development Options

APP DEV PLATFORMS • can get good code reuse

• performance is very close to native

• must learn a new tool/platform

• abstraction distractions

• rapid development

PRATIK PATEL | CTO

Page 40: Mobile Development Options

PRATIK PATEL | CTO

Page 41: Mobile Development Options

PRATIK PATEL | CTO

Page 42: Mobile Development Options

PRATIK PATEL | CTO

Page 43: Mobile Development Options

AU REVOIR!

!

Follow me on twitter: @PRPATEL

Page 44: Mobile Development Options

NATIVE

PRATIK PATEL | CTO

Page 45: Mobile Development Options

IOS• OBJECTIVE-C language

• dispatch model is very powerful

• NOT low ceremony

PRATIK PATEL | CTO

Page 46: Mobile Development Options

ANDROID• Java with limitations (Davlik VM)

• open source platform

• tools you know and love (?) !

PRATIK PATEL | CTO

Page 47: Mobile Development Options

NATIVE II• developing the ‘same’ app for 2+ platforms == $$$$

• “LOW LEVEL” programming

PRATIK PATEL | CTO

Page 48: Mobile Development Options

PHONEGAP

PRATIK PATEL | CTO

Page 49: Mobile Development Options

PHONEGAP• open source, 100% free

• APACHE PROJECT

• large community

• tons of plugins

PRATIK PATEL | CTO

Page 50: Mobile Development Options

MIND THE GAP II• wraps a web browser in a native project

• your code runs in the browser

• plugins allow more native functions

• provides hooks into native functions - camera, contacts, accelerometer, etc !

PRATIK PATEL | CTO

Page 51: Mobile Development Options

MIND THE GAP III• you can develop right in a desktop browser for most of your app!

• can use mobile web libs: - jquery mobile - sencha touch - jo (joapp.com) - kendoui

PRATIK PATEL | CTO

Page 52: Mobile Development Options

phonegap demo !!!!

Page 53: Mobile Development Options

APP DEV PLATFORMS

PRATIK PATEL | CTO

Page 54: Mobile Development Options

BRIDGE• vendor provides proprietary API on top

• you code to this API

• VENDOR WRITES HOOKS to native API

• vendor marshalls / unmarshalls calls & data in both directions

• again, no code generation!

PRATIK PATEL | CTO

Page 55: Mobile Development Options

PRATIK PATEL | CTO

how they work

you code here

var win1 = Titanium.UI.createWindow({ url:'main.js', title:'Spice Guide', // backgroundImage:'./images/bg.png', navBarHidden: false, tabBarHidden: true});

app platform

android sdkios sdk

platform provides API

platform bridges to native

Page 56: Mobile Development Options

MONOTOUCH• based on mono

• C#

• $600 for both ios and android

PRATIK PATEL | CTO

Page 57: Mobile Development Options

ANSCA CORONA• based on LUA - a script lang for c

• popular with game devs

• $349 for both ios and android

• less bridGing

PRATIK PATEL | CTO

Page 58: Mobile Development Options

RUBYMOTION• based on RUBY - but ios only

• fairly new

• $199

• live REPL, other nice features

PRATIK PATEL | CTO

Page 59: Mobile Development Options

TITANIUM

PRATIK PATEL | CTO

Page 60: Mobile Development Options

TITANIUM• open source, 100% free

• support contract costs $

• extra modules cost $ (ex: storekit)

• IDE - titanium studio - based on eclipse

PRATIK PATEL | CTO

Page 61: Mobile Development Options

TITANIUM II• code in javascript

• again, not a generator !

PRATIK PATEL | CTO

Page 62: Mobile Development Options

PLATFORMS• iOS

• ANDROID

• Mobile web (beta)

• Blackberry 10 coming soon

PRATIK PATEL | CTO

Page 63: Mobile Development Options

Titanium SDK• Javascript to native bridge

• Code to Titanium API (proprietary)

• Write once, deploy to iOS + ANdroid

• platform specific API’s too!

PRATIK PATEL | CTO

Page 64: Mobile Development Options

WIDGETS• Buttons, Labels, Windows, Views

• Sliders, TextFields, WebViews

• Pickers, Tables

PRATIK PATEL | CTO

Page 65: Mobile Development Options

EVENTS• ADD / Fire events

• Very much like “web” Javascript dev

PRATIK PATEL | CTO

Page 66: Mobile Development Options

CODE REUSE?• 100% Of non-UI code is reusable

• 50% of UI code is reusable

• UI code can become more reusable with experience and patterns!

PRATIK PATEL | CTO

Page 67: Mobile Development Options

TITANIUM == NATIVE

PRATIK PATEL | CTO

• Titanium api calls native objects/methods

• no code generation

• native widgets

Page 68: Mobile Development Options

TITANIUM MODULES• Titanium is based on modules

• Each module represents an API

• Bridge from JavaScript to native runtime

• Example modules: networking, database, Filesystem, UI, Yahoo, Media, Map, Facebook, Accelerometer

PRATIK PATEL | CTO

Page 69: Mobile Development Options

let’s write a Titanium app

Page 70: Mobile Development Options

Layouts codevar  view  =  Ti.UI.createView({          backgroundColor:'transparent',          top:0,          left:0,          width:'100%',          height:'100%',          layout:'vertical'  });  //  create  labels,  buttons,  text  fields  !view.add(usernameLabel);  view.add(usernameField);  view.add(submitButton);

PRATIK PATEL | CTO

Page 71: Mobile Development Options

Events code

Ti.App.addEventListener('event_type',  function(e)  {          Ti.API.info('The  '+e.type+'  event  happened');  });  !Ti.App.fireEvent('click',    

{datakey:  'value'});  

PRATIK PATEL | CTO

Page 72: Mobile Development Options

Custom Controlsvar buttonView1 = Titanium.UI.createView({ top: 0, left: 0, height: 50, width: 50, borderRadius: 10, backgroundColor: '#cef7ff' });var selection1 = Titanium.UI.createLabel({ text : 'Fish', color : '#f79e18', font : {fontSize : 40}, textAlign: 'center' });buttonView1.add(selection1);

PRATIK PATEL | CTO

Page 73: Mobile Development Options

HttpClientvar  url  =  "https://www.google.com";  var  xhr  =  Ti.Network.createHTTPClient({          onload:  function(e)  {                  Ti.API.debug(this.responseText);                  alert('success');          },          onerror:  function(e)  {                  Ti.API.debug(e.error);                  alert('error');          },  timeout:5000  });  xhr.open("GET",  url);  xhr.send();

PRATIK PATEL | CTO

Page 74: Mobile Development Options

Databasevar  db  =  Titanium.Database.open('mydb');  !db.execute('CREATE  TABLE  IF  NOT  EXISTS  DATABASETEST    (ID  INTEGER,  NAME  TEXT)');  db.execute('DELETE  FROM  DATABASETEST');  !db.execute('INSERT  INTO  DATABASETEST  (ID,  NAME  )  VALUES(?,?)',1,'Name  1');  db.execute('UPDATE  DATABASETEST  SET  NAME  =  ?  WHERE  ID  =  ?',  updateName,  updateId);  var  rows  =  db.execute('SELECT  *  FROM  DATABASETEST');  !while  (rows.isValidRow())  {     Titanium.API.info('ID:  '  +  rows.field(0)  +  '  NAME:  '  +  rows.fieldByName('name')  +  '  COLUMN  NAME  '  +  rows.fieldName(0));     rows.next();  }

PRATIK PATEL | CTO

Page 75: Mobile Development Options

Facebookvar  fbButton  =  Titanium.Facebook.createLoginButton({     'style':'wide',     'apikey':'9494e611f2a93b8d7bfcdfa8cefdaf9f',     'sessionProxy':'http://api.appcelerator.net/p/fbconnect/',     bottom:10,  height:30,  width:300  });  Titanium.Facebook.publishStream("Set  your  status",null,null,function(r)     {       Titanium.API.info("received  status  response  =  "+JSON.stringify(r));       if  (r.success)  

{Ti.UI.createAlertDialog({title:'Facebook',    message:'Your  status  was  ublished'}).show();  

    }       else       {Ti.UI.createAlertDialog({title:'Facebook',  message:'Error  '  +  

 r.error}).show();         }     });

PRATIK PATEL | CTO

Page 76: Mobile Development Options

Animations   var  t3  =  Ti.UI.create2DMatrix();     t3  =  t3.rotate(20);     t3  =  t3.scale(1.5);  !   var  a  =  Titanium.UI.createAnimation();     a.transform  =  t3;     a.duration  =  3000;  !var  view1  =  Titanium.UI.createView({     backgroundColor:'#336699',     top:10,  left:220,  height:50,  width:50,     anchorPoint:{x:0,y:0}  });  win.add(view1);  topLeft.addEventListener('click',  function()  {     view1.animate(a);  });

PRATIK PATEL | CTO

Page 77: Mobile Development Options

app dev platforms

PRATIK PATEL | CTO

Page 78: Mobile Development Options

REDUX• APP dev PLATFORMS: a high level env

• reuse code

• access to native (and specific) API’s

PRATIK PATEL | CTO

Page 79: Mobile Development Options

REDUX II• performance is near native (95%)

• drawbacks: - abstraction - must know app platform + native platform

PRATIK PATEL | CTO

Page 80: Mobile Development Options

choosing

PRATIK PATEL | CTO

Page 81: Mobile Development Options

NATIVE • no code reuse

• best possible experience

• games, low-level needs

• cost: $$$$$

PRATIK PATEL | CTO

Page 82: Mobile Development Options

PHONEGAP • use tech you know (HTML/JS/CSS)

• user experience is hard to perFect

• bad performance

• nuances of browser tech = black hole of effort

PRATIK PATEL | CTO

Page 83: Mobile Development Options

APP DEV PLATFORMS • can get good code reuse

• performance is very close to native

• must learn a new tool/platform

• abstraction distractions

• rapid development

PRATIK PATEL | CTO

Page 84: Mobile Development Options

what would you pick? !!!!

Page 85: Mobile Development Options

AU REVOIRPRATIK PATEL

@PRPATEL [email protected]