Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

PhoneGap Talk @ Sencha Con 2010



Talk from November 2010 on PhoneGap, PhoneGap Build, and associated tooling

Talk from November 2010 on PhoneGap, PhoneGap Build, and associated tooling



Total Views
Views on SlideShare
Embed Views



21 Embeds 6,654

http://myxaab.wordpress.com 5130
http://www.searcheeze.com 557
http://blogs.nitobi.com 461
http://www.nextmags.com 262
http://www.sencha.com 70
http://www.phonegap.com 48
http://www.techgig.com 43
url_unknown 28
http://paper.li 16
http://phonegap.com 14
http://www.redditmedia.com 11
http://stage2.phonegap.com 3
http://cc.bingj.com 2
http://translate.googleusercontent.com 2
http://www.melablog.it 1
http://ondernemingsdatabank.indicator.be 1
http://a0.twimg.com 1
http://www.mefeedia.com 1
http://colosseo.ibrii.com 1
https://sencha.com 1
http://webcache.googleusercontent.com 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    PhoneGap Talk @ Sencha Con 2010 PhoneGap Talk @ Sencha Con 2010 Presentation Transcript

    • PhoneGap Building Native Mobile Apps using Web Technologies Andrew Lunny, Nitobi Software Wednesday, November 17, 2010
    • What is PhoneGap? Wednesday, November 17, 2010
    • How To Build A Mobile App var  idea  =  "An  app  to  list  your  todos"; [ios,  android,  blackberry].forEach(function  (platform)  {   createMobileApp(idea,  platform); }) //  using  native  APIs  and  tools function  createMobileApp  (idea,  platform)  {   var  app,          profit;   platform.registerForDeveloperProgram();   platform.downloadAndInstallSDK();   platform.learnNativeAPIs();   app  =  platform.writeNativeApp(idea);   app.buildForPlatform();   profit  =  app.submitToAppStore();   return  profit; } Wednesday, November 17, 2010
    • with PhoneGap var  idea  =  "An  app  to  list  your  todos"; var  HTML5app  =  writeAppWithHTML5(idea); createMobileApp(HTML5app,  [ios,  android,  blackberry]); //  using  PhoneGap function  createMobileApp  (HTML5app,  platforms)  {   var  app,          profit  =  0;          platforms.forEach(function  (platform)  {   platform.registerForDeveloperProgram();   platform.downloadAndInstallSDK();  app  =  platform.buildNativeAppWithPhoneGap(HTML5app);  app.buildForPlatform();   profit  +=  app.submitToAppStore();    });   return  profit; } Wednesday, November 17, 2010
    • Di -­‐    [ios,  android,  blackberry].forEach(function  (platform)  { -­‐      createMobileApp(idea,  platform); -­‐    }) +    var  HTML5app  =  writeAppWithHTML5(idea); +    createMobileApp(HTML5app,  [ios,  android,  blackberry]); -­‐   platform.learnNativeAPIs(); -­‐   app  =  platform.writeNativeApp(idea); +   app  =  platform.buildNativeAppWithPhoneGap(HTML5app); Wednesday, November 17, 2010
    • Web App HTML5 Native JavaScript APIs CSS PhoneGap etc... iOS Black webOS Android Berry Wednesday, November 17, 2010
    • is Cross-Platform iOS, Android, BlackBerry 4.6+, webOS, Symbian... Open Source MIT outbound, MIT + Apache inbound Web Technologies defer to native support Spec-compliant where applicable, tracking DAP working group Extensible any native code available through plug-ins any JS libraries available through <script> Wednesday, November 17, 2010
    • Strictly Speaking There are two parts to PhoneGap PhoneGap: the native library • phonegap.jar, phonegaplib.a, etc • instantiates chromeless web view, loads www/index.html • adds JavaScript access to native APIs PhoneGap: the JavaScript files • phonegap.js • JavaScript wrappers for native API calls • is not required - your app can run natively as is Wednesday, November 17, 2010
    • For Designers • A PhoneGap app is bigger than a native app on a lot of platforms: • no location bar • no browser menu • There’s no browser chrome! • interactions should be explicit • It should have a launch screen • It should have some icons • Mobile app expectations != mobile web expectations Wednesday, November 17, 2010
    • For Developers • Write and test your JavaScript as normal • If you choose to use phonegap.js • listen for the deviceready event on the document object • then perform all PhoneGap-specific functionality • You should be able to avoid native code entirely • assuming nothing breaks • if you need extra plug-in functionality, bug us on the mailing list Wednesday, November 17, 2010
    • Native APIs • Device identification • Network access • Sensors • Geo, Accelerometer, Orientation, Magnetometer • Camera/image sources • Contacts • File access Wednesday, November 17, 2010
    • Generally Speaking • PhoneGap is • agnostic • permissive • relaxed • You don’t have to change the way you write apps Wednesday, November 17, 2010
    • Demo Time • A mobile web app, from Safari to native apps on • iPhone • Android • webOS Wednesday, November 17, 2010
    • Thick Clients remote APIs o ine storage view templates Wednesday, November 17, 2010
    • If you put your web app in PhoneGap Then you won’t be able to rely on a web server So you will have do more on the client Wednesday, November 17, 2010
    • Remote APIs • Usually accessed on a server • due to the same-origin policy -- best you can do is JSONP • PhoneGap apps run on the file:// protocol • the file:// protocol is exempt from the same-origin policy* • XHRs can point anywhere • Simple as you like • $.get()... for example *well, unless it gets changed. But we’ll patch that if it happens Wednesday, November 17, 2010
    • O ine Storage • HTML5! • localStorage, sessionStorage, Webkit SQL, Google Gears, Indexed DB • Or native storage/external services • CouchDB! • Lots of libraries/wrappers • Ext.data.Store is the Sencha Touch class • we at Nitobi like Lawnchair Wednesday, November 17, 2010
    • View Templating • If your data’s local, then you’ll render your views locally • duh • Sencha does it! • Or use an opensource one; or roll your own; or whichever • My favorite is Mustache • Generally speaking, try to spend time working with Strings, as opposed to DOM elements • DOM manipulation is expensive Wednesday, November 17, 2010
    • Use Sencha Touch! You should’ve been at James’s talk Most of this stu is taken care of: make sure you use it! Wednesday, November 17, 2010
    • Your server is there to store data persistently sync with new devices let you use the word “cloud” in your marketing Wednesday, November 17, 2010
    • Tooling PhoneGap Build PhoneGap Dev Browser Sleight Wednesday, November 17, 2010
    • PhoneGap Build Problem: Solution: Multiple SDKs to install, multiple The cloud! operating systems to run them Ahem. The crux of cross-platform pain. Online service for building and distributing PhoneGap apps Wednesday, November 17, 2010
    • PhoneGap Build Workflow • Develop HTML5 app locally: • index.html • icon.png • config.xml • Submit to PhoneGap Build • Upload • Hook into VCS (git, svn) • Download and Test App Binaries • Submit programmatically to App Stores Wednesday, November 17, 2010
    • Wednesday, November 17, 2010
    • with PhoneGap Build var  idea  =  "An  app  to  list  your  todos"; var  HTML5app  =  writeAppWithHTML5(idea); var  phoneGapBuild  =  registerAtBuildPhoneGapCom(); createMobileApp(HTML5app,  [ios,  android,  blackberry,  symbian,   webos,  winPhone7,  bada],  phoneGapBuild); //  using  PhoneGap  Build function  createMobileApp  (HTML5app,  platforms,  phoneGapBuild)  {   var  app,          profit;        platforms.forEach(function  (platform)  {   platform.registerForDeveloperProgram();    });    //  now!    phoneGapBuild.buildNativeAppsInTheCloud(HTML5app);    //  soon!    profit  =  phoneGapBuild.submitToAppStores();   return  profit; } Wednesday, November 17, 2010
    • Di +    var  phoneGapBuild  =  registerAtBuildPhoneGapCom; -­‐    createMobileApp(HTML5app,  [ios,  android,  blackberry]); +    createMobileApp(HTML5app,  [ios,  android,  blackberry,   symbian,  webos,  winPhone7,  bada],  phoneGapBuild); -­‐   platform.downloadAndInstallSDK(); -­‐   app  =  platform.buildNativeAppWithPhoneGap(HTML5app); -­‐   app.buildForPlatform(); +   phoneGapBuild.buildNativeAppsInTheCloud(HTML5app); -­‐   profit  +=  app.submitToAppStore(); +   profit  =  phoneGapBuild.submitToAllAppStores(); Wednesday, November 17, 2010
    • Demo From GitHub to device Wednesday, November 17, 2010
    • PhoneGap Build Closed beta right now, supporting: Android, webOS, Symbian, BlackBerry Next couple of months • API access to allow IDE integration (Eclipse, Dreamweaver) • Support for iOS, WinPhone 7, Bada Further out • Plugin integration: build with arbitrary native code • testing/continuous integration Interested? Sign up for the beta (or harangue me) Wednesday, November 17, 2010
    • PhoneGap Dev Browser Problem: Solution: It takes too long to build apps, A browser-style app that includes especially compared to web PhoneGap APIs. development. Put your PhoneGap app on a Who wants to wait for a compiler? remote server, point the browser Who wants to reset their device to it, test away. every time an app is updated?* *BlackBerry owners Wednesday, November 17, 2010
    • PhoneGap Dev Browser Available on the Android Market now (free, naturally) Available on GitHub, more or less, for iOS who knows, it might get approved BlackBerry port in progress Wednesday, November 17, 2010
    • Sleight Problem: Solution: We can develop apps with the dev A node-js based web server. browsers, but none of our remote API calls work - because of the Serve static files from your disk, same origin policy. proxy remote resources from a target server. Wednesday, November 17, 2010
    • Sleight Setup: $ npm install sleight Usage: $ cd www $ sleight port=4000 target=api.twitter.com More details: https://github.com/alunny/sleight Wednesday, November 17, 2010
    • Addenda releases roadmap resources Wednesday, November 17, 2010
    • Releases are not our core competency Wednesday, November 17, 2010
    • Currently @ 0.9.3 For most fun, live on edge Planned for 0.9.4 Unified Contacts API Unified File/IO API end of November, tentatively Wednesday, November 17, 2010
    • Roadmap Internationalization Menu API (once we figure out what this will look like) Full Windows Phone 7 Support Plugin packaging/distribution Beer drinking Wednesday, November 17, 2010
    • New Tooling StopGap mocking PhoneGap calls in desktop browser fake touch events, deviceready event PhoneGap.rb / CLI build/generate/launch PG apps programmatically a single unified interface to building apps Ristretto build tool for JavaScript target devices/environments in a framework-agnostic way Wednesday, November 17, 2010
    • Resources http://docs.phonegap.com http://wiki.phonegap.com #phonegap on irc.freenode.net PhoneGap Google Group twitter.com/phonegap Wednesday, November 17, 2010
    • Thanks! andrew.lunny@nitobi.com twitter.com/alunny Wednesday, November 17, 2010