to everything, best performance • Store deployment • Knowledge of each platform required • Web • One codebase (really?) • No deployment • JavaScript engines V8 / Nitro • Rendering engines Webkit / Blink • Hybrid • HTML5 & JavaScript - put into a native app shell • Leverage native features through plugins • Hybrid deux • Hybrid + explicitly mix native and web elements
apps from HTML5/JavaScript codebase • Start wrapping your HTML5 code into native app shell • Hook into platform features & events • Extend app functionality through plugins • Re-factor • New base architecture • New tools, new APIs
to the Apache Software Foundation (ASF) for incubation • Requirement to ensure intellectual property was unfettered by trademark ambiguity • Hard requirement to rename PhoneGap in its open source form as a project incubating at Apache • PhoneGap is a distribution of Apache Cordova • Think of Apache Cordova as the engine that powers PhoneGap • Similar to how WebKit is the engine that powers Chrome or Safari, well…
on plugins • Lightweight core • Plugins install via NPM • Application implemented as a web page • References whatever CSS, JavaScript, images, media files, or other resources are necessary for it to run • Executes as a web view control within the native application wrapper • Interact with various device features by referencing cordova.js file which provides API bindings
• Specifies parameters affecting how it works (e.g. responding to orientation shifts) • Adheres to the W3C's Packaged Web App, or Widget, specification • Whitelisting • Security model that controls access to outside domains • Default security policy allows access to any site • Before moving your application to production, review whitelist and declare access to specific network domains and subdomains • Features • Out-of-the-box native features via JavaScript API • Need to be enabled, implemented as plugins • Plugins • Bridges bit of functionality between web view and native platform the application is running on • Threading – watch out • iOS: executed in the same thread as the UI. If your plugin requires a great deal of processing or requires a blocking call, you should use a background thread