Search Sujata's Blogs

Saturday, 18 October 2014

Microsoft Development Tools: Mobile Apps for Web Developers





Mobile Apps for Web Developers

The path of a mobile app developer often begins with a choice: develop for iOS, Android or Windows? It’s a choice that instantly diminishes the size of your potential audience, but developers often hold their nose and reluctantly make a decision. Those who need to reach all three app stores, choose to rewrite the application for each platform.

Visual Studio enables you to have maximum reach while achieving significant code re-use. With Xamarin, C# developers can share business logic across iOS, Android, and Windows applications. With Apache Cordova, web developers can achieve maximal code re-use by building cross-platform mobile applications using HTML, CSS, and JavaScript.

In this post, we’ll take a close look at how you can use Visual Studio’s extension for Multi-Device Hybrid App Development to build a cross platform app using HTML, JS, and CSS. To follow along in the IDE:

•Download and install the extension on Visual Studio 2013 Pro Update 3, or…
•Try one of the trial VMs available on Azure.
Once you’ve installed the tools, create a project for “Multi-Device Hybrid Apps.”
 

Access Device Capabilities on any Platform Using the Same JS API

Before we explore the tools, let’s take a moment to look at the architecture of a Cordova app. The application itself is implemented as an HTML application (e.g. Single Page Application) hosted inside a webview control (or on Windows, as a WWA) that gives your app access to native device APIs. Most developers prefer to synchronize data with a server via RESTful web services (e.g. Azure Mobile Services), but all file assets like HTML, CSS, JS, and media are packaged with the application so that users can continue to use the app offline.

To access native device capabilities (e.g. camera, contacts, file system, accelerometer) from JavaScript, Cordova uses a construct called plugins. Plugins typically encapsulate two components: native code to invoke capabilities for each of the three platforms (i.e. Objective-C, Java and C#) and a normalized JavaScript API available for your app to use.

                                          

To use the API, you make an asynchronous call from within your JavaScript. The native code returns a response to the callback function. In the example below, the camera plugin returns the URI of a photo pointing to the file system on the mobile device.

// Retrieve image file location from the mobile device photo library
function getPhotoURI() { 
    navigator.camera.getPhoto(onPhotoSuccess, onPhotoFail, { 
        quality: 50, 
        destinationType: destinationType.FILE_URI, 
        sourceType: pictureSource.PHOTOLIBRARY 
    }); 
// Callback from successful Photo Library event

Designed to Converge with Web Standards
Cordova plugins are generally designed to expose JavaScript APIs that will converge with web standards over time. The goal is for the plugins to eventually evaporate leaving the implementations of the W3C standards in their place. For example, the Web API for activating device vibration, navigator.vibrate(time), is already implemented by Cordova, Chrome, and Firefox. Over time all the mobile devices and browsers will use the same API, thereby making plugins obsolete as a polyfill. The ultimate goal is for Cordova to serve as a temporary bridge until the standard web platform supports the device capability.
JavaScript or TypeScript: Your Choice
Once you get started, a large part of your time will be spent writing code. Whether it’s HTML, CSS, JavaScript or TypeScript, we aim to provide our developers with help in context for the task at hand. For example, many developers depend on IntelliSense to avoid common syntax errors and quickly explore new APIs. Would you like to know what native device capabilities are available to your app? Visual Studio’s Tools for Apache Cordova include IntelliSense support for common Cordova plugins using both JavaScript and TypeScript.

If you write a custom plugin, you might want to enable IntelliSense for your component as well. To support the common Cordova plugin APIs, we use a JavaScript IntelliSense extension for the JavaScript editor. For TypeScript, we simply wrote TypeScript d.ts files to describe each API. You can see the d.ts files in the public home for open source d.ts files: DefinitelyTyped. Each d.ts file provides the meta-data necessary to provide rock-solid, accurate IntelliSense for Cordova plugins without executing JavaScript code in the background.
Three Ways to Preview Your App
To gain the highest productivity benefit, most developers choose to use the same code - 95% or more - amongst all deployment targets: iOS, Android, and Windows.
Since most developers choose to deploy a single shared HTML/CSS/JS codebase to all platforms, it’s important to be sure your apps look and behave as expected across the platforms you care about. We made sure that previewing your app would be as painless and efficient as possible by providing three options to test your app: (1) a Chrome-based simulator called Ripple, (2) native emulators provided by the platform vendors, and (3) deployment to an actual tethered device.
Unless you’re an otherworldly developer who can get an app running perfectly without ever running it, you’ll eventually need to deploy and test it on a device or emulator for each platform. However, that’s not necessarily where you want to start. Our general guidance is as follows:

  1. For basic layout and early-stage debugging, use Ripple. Ripple is an open-source simulator that runs inside Chrome. Visual Studio automatically downloads and installs both Ripple and Chrome when you install our tools. Because Ripple uses Google’s V8 engine and blink-based rendering, it is ideal for simulating behavior on an iOS or Android device. Realistically, there are only a small number of substantial rendering differences between Chrome and IE11 these days, so it’s also a good proxy for Windows platforms. It’s nice to do your early development in Ripple because, quite frankly, it’s fast and familiar to web developers. Ripple benefits from all the CPU resources of your desktop and thousands of tiny performance optimizations designed to make desktop browsing snappy.
  2. For final validation and full-fidelity debugging, use a device. As much as we love to debug in the desktop browser, there are some minor, but significant differences between it and mobile browsers. Unfortunately, tiny differences in CSS rendering or JavaScript interpretation can have a big impact, so it’s important to test your app on the real thing. The real source of truth will always be the device. Using the native build systems (i.e. Xcode, the Android and Windows SDKs), Visual Studio can build and deploy to devices tethered to your dev machine via USB.
  3. If a device isn’t available, use an emulator. Given the range of devices and platform versions out there — especially Android versions — it’s not always possible to have a complete library of test devices. In our office, we keep a small library of representative devices including: iPods running iOS7-8, a Samsung Galaxy running Android 4.0, a Nexus 7 running Android 4.4, a Nokia 1520 running Windows Phone 8.1 and our dev machines running Windows 8.1. For everything else, we use an emulator.
 Blog by Hemant Bhagwat





No comments:

Post a Comment