Titanium SDK 4.1.0 Release Note

Titanium SDK 4.1.0 General Availability - 08 July 2015

Contents

About This Release

This is the general availability (GA) version of Titanium SDK 4.1.0. This Release introduces a number of new features. See New Features for a summary of new features in this release.

This release includes over 150 bug fixes and improvements, see the full list of issues that were addressed in Release 4.1.0.

CLI 4.1.0

This Release conincides with the release of Appcelerator CLI 4.1.0. Notable fixed issues for the CLI include improvements to use the CLI from behind a proxy server.

For more details, see the CLI Release Notes.

iOS Support

This Release includes support for iOS 8.4 and Xcode 6.4. A complete test pass was performed against Release 4.1.0 and no issues were discovered.

Studio 4.1.0

This Release coincides with the release of Studio 4.1.0.

Summary of Changes:

  • Support for Windows Phone and Store development.
  • Import a Studio or Eclipse project by dragging the folder and dropping it to the Project Explorer view.
  • Add ability to create Controllers, Styles and Views for Alloy Widgets.

For more details, see the Studio Release Notes.

Windows Hybrid Support

Due to the addition of native support for Windows Runtime apps in the Titanium SDK, support for building and deploying Windows Hybrid applications is deprecated in this Release and support will be removed in a future release.

A Windows Hybrid application is a Titanium Mobile Web project that can be turned into a Windows 8 JavaScript or Windows Phone HTML 5 project.

Windows Platform Support

This Release supports building and deploying Windows Runtime apps, referred to as Windows Phone and Windows Store applications. Windows Phone applications are ARM-based applications that can be deployed to Windows Phone devices, while Windows Store applications are x86-based applications that can be deployed to tablets.

For information on getting started, see:

New Features

This section describes new features introduced in Release 4.1.0.

Android Platform

This section lists new features and improvements only available on the Android platform.

Hint Text

On Android, the application can set the hint text color of either a TextArea or TextField object by using the hintColorText property.

HTTP Client

The HTTPClient open method now supports the PATCH HTTP verb on Android.

Label

On Android, the application can set how tall in lines a label can be by using the lines and maxline properties.

List View

In addition to the List View improvements mentioned below, on Android, use List View's separatorHeight property to set the height of the line separator between list items.

Scrollable View

Android now supports the cacheSize property for ScrollableView. Previously, the API was only available for iOS.

Audio Player

On Android, iOS and Windows Phone, the Titanium.Media.AudioPlayer module now fires the error event when an error occurs playing the audio stream.

Facebook Module

The requestDialogCompleted event now returns a data field containing the response data from Facebook.

List View

This Release introduces several List View improvements for both Android and iOS.

Listen for the scrollstart and scrollend to see when the List View starts or stops scrolling, respectively.

List View now supports adding multiple markers, which fires the marker event when the user scrolls to it. Previously, you could only set one marker at a time. For more details, see ListViews: ListView marker event.

Map Module

The Map module now supports adding vector overlays on the map. For details, see the Map.CircleMap.Polygon and Map.Polyline classes.

iOS Platform

This section lists new features and improvements only available on the iOS platform.

File Protection Attributes

As of this Release, the application can set and read file protection attributes. Use the Titanium.Filesystem.File objects setProtectionKey() and getProtectionKey()methods to set and read the file object's protection attributes, respectively.

List View

In addition to the previously mentioned List View improvements, you can add custom action items to list items. Action items appear when the user swipes left on a list item, then the user can select an action to perform on the item. Custom action items require iOS 8 and above.

For details, see ListViews: Action Items.

Tab

On iOS, the application can set the title color of the active tab or inactive tabs by using the Tab object's activeTitleColor and titleColor properties, respectively.

Region Locale

The Internationalization framework for Android and iOS now supports region locales. For details, see the Internationalization guide.

Uncaught Errors

The application can now catch and respond to unhandled JavaScript errors. Listen for the Titanium.App uncaughtException event.

Known Issues

iOS Calendar Status Constants

The iOS Calendar STATUS constants do not return the correct values (TIMOB-18926).

Windows Platform

You may encounter the following issues when using the Windows Platform:

  • No log output returned for Windows Phone devices (TIMOB-19077).
  • New analytics session ID is generated every time an app is opened (TIMOB-19083).
  • If you try to display an alert dialog while one is already opened, the application throws an error (TIMOB-19137).
  • Ti.version does not return a value (TIMOB-19144).
  • When building for an emulator with a deployment type of production, the CLI throws an error (TIMOB-19153).
  • When trying to stringify an Titanium object, the application throws an error (TIMOB-19183).
  • Using a TabGroup with a Windows Store application throws an error (TIMOB-19187).

API Changes

New APIs

The following APIs are new or have expanded platform support in Release 4.1.0.

API Type Notes
Global object

The APIs that reside in the global scope, which may be called without a namespace prefix. (Added support for Windows Phone.)

Global.JSON object

Global JSON object providing the parse and stringify methods. (Added support for Windows Phone.)

Global.String object

The JavaScript built-in String type. (Added support for Windows Phone.)

Global.console object

Console logging facilities. (Added support for Windows Phone.)

Modules.Cloud.createX509CertificatePinningSecurityManager method

creates a security manager to authenticate specified HTTPS URLs. (New API, supported on Android, iPhone, iPad and Mobile Web.)

Modules.Map.Circle object

Represents a bounded area on the map. (New API, supported on Android, iPhone and iPad.)

Modules.Map.Polygon object

Represents a bounded area on the map. (New API, supported on Android, iPhone and iPad.)

Modules.Map.Polyline object

Represents a bounded area on the map. (New API, supported on Android, iPhone and iPad.)

Modules.Map.createCircle method

Creates and returns an instance of Modules.Map.Circle. (New API, supported on Android, iPhone and iPad.)

Modules.Map.createPolygon method

Creates and returns an instance of Modules.Map.Polygon. (New API, supported on Android, iPhone and iPad.)

Modules.Map.createPolyline method

Creates and returns an instance of Modules.Map.Polyline. (New API, supported on Android, iPhone and iPad.)

Titanium object

The top-level Titanium module. (Added support for Windows Phone.)

Titanium.API object

The top-level API module, containing methods to output messages to the system log. (Added support for Windows Phone.)

Titanium.Accelerometer object

The top-level Accelerometer module, used to determine the device's physical position. (Added support for Windows Phone.)

Titanium.Analytics object

Used for transmitting developer-defined Analytics events to the Appcelerator Analytics product. (Added support for Windows Phone.)

Titanium.Analytics.filterEvents method

Sets a list of events that will not be sent to the analytics server. (New API, supported on Android, iPhone and iPad.)

Titanium.App object

The top-level App module is mainly used for accessing information about the application at runtime, and for sending or listening for system events. (Added support for Windows Phone.)

Titanium.App.Properties object

The App Properties module is used for storing application-related data in property/value pairs that persist beyond application sessions and device power cycles. (Added support for Windows Phone.)

Titanium.App.iOS.sendWatchExtensionReply method

Marks the end of an openParentApplication:reply execution by a WatchKit extension. Available only on iOS 8.2 and later. (New API, supported on iPhone and iPad.)

Titanium.App.iOS.watchkitextensionrequest event

Fired when openParentApplication:reply is called from a WatchKit extension. Available only on iOS 8.2 and later. (New API, supported on iPhone and iPad.)

Titanium.App.uncaughtException event

Fired when an uncaught JavaScript exception occurs. (New API, supported on Android, iPhone and iPad.)

Titanium.Blob object

A container for binary data. (Added support for Windows Phone.)

Titanium.Database object

The top-level Database module, used for creating and accessing the in-application SQLite database. (Added support for Windows Phone.)

Titanium.Database.DB object

The Database instance returned by Titanium.Database.open or Titanium.Database.install. (Added support for Windows Phone.)

Titanium.Database.ResultSet object

The ResultSet instance returned by Titanium.Database.DB.execute. (Added support for Windows Phone.)

Titanium.Filesystem object

The top level filesystem module, used to access files and directories on the device. (Added support for Windows Phone.)

Titanium.Filesystem.File.getProtectionKey method

Returns the protection key value of this file object. Returns null if there's an error. (New API, supported on iPhone and iPad.)

Titanium.Filesystem.File object

Object representing a path to a file or directory in the device's persistent storage. (Added support for Windows Phone.)

Titanium.Filesystem.File.setProtectionKey method

Sets the protection key as an attribute to the file identified by this file object. (New API, supported on iPhone and iPad.)

Titanium.Filesystem.IOS_FILE_PROTECTION_COMPLETE property

Constant used to set protection key to NSFileProtectionComplete in file attributes. (New API, supported on iPhone and iPad.)

Titanium.Filesystem.IOS_FILE_PROTECTION_COMPLETE_UNLESS_OPEN property

Constant used to set protection key to NSFileProtectionCompleteUnlessOpen in file attributes. (New API, supported on iPhone and iPad.)

Titanium.Filesystem.IOS_FILE_PROTECTION_COMPLETE_UNTIL_FIRST_USER_AUTHENTICATION property

Constant used to set protection key to NSFileProtectionCompleteUntilFirstUserAuthentication in file attributes. (New API, supported on iPhone and iPad.)

Titanium.Filesystem.IOS_FILE_PROTECTION_NONE property

Constant used to set protection key to NSFileProtectionNone in file attributes. (New API, supported on iPhone and iPad.)

Titanium.Geolocation object

The top level Geolocation module. The Geolocation module is used for accessing device location based information. (Added support for Windows Phone.)

Titanium.Gesture object

The Gesture module is responsible for high-level device gestures such as orientation changes and shake gestures. (Added support for Windows Phone.)

Titanium.Media object

The top-level Media module. (Added support for Windows Phone.)

Titanium.Media.AudioPlayer object

An audio player object used for streaming audio to the device, and low-level control of the audio playback. (Added support for Windows Phone.)

Titanium.Media.AudioPlayer.error event

Fired when there's an error. (New API, supported on Android, iPhone, iPad and Windows Phone.)

Titanium.Media.AudioRecorder object

An audio recorder object used for recording audio from the device microphone. (Added support for Windows Phone.)

Titanium.Media.Item object

A representation of a media item returned by openMusicLibrary or queryMusicLibrary. (Added support for Windows Phone.)

Titanium.Media.MusicPlayer object

This object represents a music controller. (Added support for Windows Phone.)

Titanium.Media.Sound object

An object for playing basic audio resources. (Added support for Windows Phone.)

Titanium.Media.VideoPlayer object

A native control for playing videos. (Added support for Windows Phone.)

Titanium.Network object

The top level network module. (Added support for Windows Phone.)

Titanium.Network.Cookie object

Cookie object used to manage the system cookie store and HTTP client cookie store. (Added support for Windows Phone.)

Titanium.Network.HTTPClient object

HTTP client object that (mostly) implements the XMLHttpRequest specification. (Added support for Windows Phone.)

Titanium.Network.Socket object

Socket module, used for creating sockets. (Added support for Windows Phone.)

Titanium.Network.Socket.TCP object

TCP socket that implements theTitanium.IOStream interface. (Added support for Windows Phone.)

Titanium.Network.Socket.UDP object

UDP socket. (New API, supported on Windows Phone.)

Titanium.Platform object

The top-level Platform module. The Platform module is used to access the device's platform-related functionality. (Added support for Windows Phone.)

Titanium.Platform.DisplayCaps object

The Display Caps object returned by the Titanium.Platform.displayCaps property. (Added support for Windows Phone.)

Titanium.Proxy object

The base for all Titanium objects. (Added support for Windows Phone.)

Titanium.UI object

The main Titanium.UI module. (Added support for Windows Phone.)

Titanium.UI.2DMatrix object

The 2D Matrix is an object for holding values for an affine transformation matrix. (Added support for Windows Phone.)

Titanium.UI.ActivityIndicator object

An activity indicator that lets the user know an action is taking place. (Added support for Windows Phone.)

Titanium.UI.ActivityIndicatorStyle object

A set of constants for the styles available for Titanium.UI.ActivityIndicator objects. (Added support for Windows Phone.)

Titanium.UI.AlertDialog object

An alert dialog is a modal view that includes an optional title, a message and buttons, positioned in the middle of the display. (Added support for Windows Phone.)

Titanium.UI.Animation object

The Animation object defines an animation that can be applied to a view. (Added support for Windows Phone.)

Titanium.UI.Button object

A button widget that has four states: normal, disabled, focused and selected. (Added support for Windows Phone.)

Titanium.UI.EmailDialog object

An email dialog is a modal window that allows users to compose and send an email. (Added support for Windows Phone.)

Titanium.UI.ImageView object

A view to display a single image or series of animated images. (Added support for Windows Phone.)

Titanium.UI.Label object

A text label, with optional background image. (Added support for Windows Phone.)

Titanium.UI.Label.getLines method

Gets the value of the Titanium.UI.Label.lines property. (New API, supported on Android.)

Titanium.UI.Label.getMaxLines method

Gets the value of the Titanium.UI.Label.maxLines property. (New API, supported on Android.)

Titanium.UI.Label.lines property

Makes the label be exactly this many lines tall. (New API, supported on Android.)

Titanium.UI.Label.maxLines property

Makes the label at most this many lines tall. (New API, supported on Android.)

Titanium.UI.Label.setLines method

Sets the value of the Titanium.UI.Label.lines property. (New API, supported on Android.)

Titanium.UI.Label.setMaxLines method

Sets the value of the Titanium.UI.Label.maxLines property. (New API, supported on Android.)

Titanium.UI.ListItem object

A list item is an individual item in a list section. (Added support for Windows Phone.)

Titanium.UI.ListItem.editActions property

Specifies custom action items to be shown when when a list item is edited. (New API, supported on iPhone and iPad.)

Titanium.UI.ListItem.getEditActions method

Gets the value of the Titanium.UI.ListItem.editActions property. (New API, supported on iPhone and iPad.)

Titanium.UI.ListItem.setEditActions method

Sets the value of the Titanium.UI.ListItem.editActions property. (New API, supported on iPhone and iPad.)

Titanium.UI.ListSection object

A list section is a container within a list view used to organize list items. (Added support for Windows Phone.)

Titanium.UI.ListView object

A list view is used to present information, organized in to sections and items, in a vertically-scrolling view. (Added support for Windows Phone.)

Titanium.UI.ListView.addMarker method

Adds a reference item in the list view. (New API, supported on Android, iPhone and iPad.)

Titanium.UI.ListView.separatorHeight property

height of the ListView separator. (New API, supported on Android.)

Titanium.UI.ListView.getDividerHeight method

Gets the value of the Titanium.UI.ListView.dividerHeight property. (New API, supported on Android.)

Titanium.UI.ListView.rowAction event

Fired when the user interacts with one of the custom row actions defined by Titanium.UI.ListItem.editActions. (New API, supported on iPhone and iPad.)

Titanium.UI.ListView.scrollend event

Fires when the list view ends scrolling. Calling thescrollTo methods will not fire this event (New API, supported on Android, iPhone and iPad.)

Titanium.UI.ListView.scrollstart event

Fires when the list view starts scrolling by user interaction. Calling the scrollTo methods will not fire this event (New API, supported on Android, iPhone and iPad.)

Titanium.UI.ListView.setDividerHeight method

Sets the value of the Titanium.UI.ListView.dividerHeight property. (New API, supported on Android.)

Titanium.UI.Notification object

A toast notification. (Added support for Windows Phone.)

Titanium.UI.OptionDialog object

An option dialog is a modal view that includes a message and one or more option items positioned in the middle of the display on Android and at the bottom edge on iOS. On Android, buttons may be added below the options. (Added support for Windows Phone.)

Titanium.UI.ProgressBar object

A progress bar. (Added support for Windows Phone.)

Titanium.UI.ScrollView object

A view that contains a horizontally and/or vertically-scrollable region of content. 
(Added support for Windows Phone.)

Titanium.UI.ScrollableView object

A view that encapsulates a horizontally-scrolling set of child views, known as pages, navigable using its built-in horizontal swipe gestures. (Added support for Windows Phone.)

Titanium.UI.ScrollableView.cacheSize property

Number of pages to cache (pre-render). (Added support for Android.)

Titanium.UI.ScrollableView.getCacheSize method

Gets the value of the Titanium.UI.ScrollableView.cacheSize property. (Added support for Android.)

Titanium.UI.ScrollableView.setCacheSize method

Sets the value of the Titanium.UI.ScrollableView.cacheSize property. (Added support for Android.)

Titanium.UI.Slider object

A slider component with a draggable thumb. (Added support for Windows Phone.)

Titanium.UI.Switch object

An on/off switch control. (Added support for Windows Phone.)

Titanium.UI.TEXT_ELLIPSIZE_TRUNCATE_END property

Add ellipses at the end of the label if the text is too large to fit. (New API, supported on Android.)

Titanium.UI.TEXT_ELLIPSIZE_TRUNCATE_MARQUEE property

Turns on a marquee effect of the label if the text is too large to fit. (This requires Titanium.UI.Label.focusable to be true) (New API, supported on Android.)

Titanium.UI.TEXT_ELLIPSIZE_TRUNCATE_MIDDLE property

Add ellipses in the middle of the label if the text is too large to fit. (New API, supported on Android.)

Titanium.UI.TEXT_ELLIPSIZE_TRUNCATE_START property

Add ellipses at the beginning of the label if the text is too large to fit. (New API, supported on Android.)

Titanium.UI.Tab object

A tab instance for a TabGroup. (Added support for Windows Phone.)

Titanium.UI.Tab.activeTitleColor property

Defines the color of the title of tab when it's active. (New API, supported on iPhone and iPad.)

Titanium.UI.Tab.getActiveTitleColor method

Gets the value of the Titanium.UI.Tab.activeTitleColor property. (New API, supported on iPhone and iPad.)

Titanium.UI.Tab.getTitleColor method

Gets the value of the Titanium.UI.Tab.titleColor property. (New API, supported on iPhone and iPad.)

Titanium.UI.Tab.setActiveTitleColor method

Sets the value of the Titanium.UI.Tab.activeTitleColor property. (New API, supported on iPhone and iPad.)

Titanium.UI.Tab.setTitleColor method

Sets the value of the Titanium.UI.Tab.titleColor property. (New API, supported on iPhone and iPad.)

Titanium.UI.Tab.titleColor property

Defines the color of the title of tab when it's inactive. (New API, supported on iPhone and iPad.)

Titanium.UI.TabGroup object

A tabbed group of windows. (Added support for Windows Phone.)

Titanium.UI.TableView object

A table view is used to present information, organized in sections and rows, in a vertically-scrolling view. (Added support for Windows Phone.)

Titanium.UI.TableViewRow object

A table view row is an individual item in a table, organized into table view sections. (Added support for Windows Phone.)

Titanium.UI.TableViewSection object

A table view section is a container within a table used to organize table view rows. (Added support for Windows Phone.)

Titanium.UI.TextArea object

A multiline text field that supports editing and scrolling. (Added support for Windows Phone.)

Titanium.UI.TextArea.getHintTextColor method

Gets the value of the Titanium.UI.TextArea.hintTextColor property. (New API, supported on Android.)

Titanium.UI.TextArea.hintTextColor property

Color of hint text that displays when field is empty. (New API, supported on Android.)

Titanium.UI.TextArea.setHintTextColor method

Sets the value of the Titanium.UI.TextArea.hintTextColor property. (New API, supported on Android.)

Titanium.UI.TextField object

A single line text field. (Added support for Windows Phone.)

Titanium.UI.TextField.getHintTextColor method

Gets the value of the Titanium.UI.TextField.hintTextColor property. (New API, supported on Android.)

Titanium.UI.TextField.hintTextColor property

Hint text color. (New API, supported on Android.)

Titanium.UI.TextField.setHintTextColor method

Sets the value of the Titanium.UI.TextField.hintTextColor property. (New API, supported on Android.)

Titanium.UI.View object

An empty drawing surface or container (Added support for Windows Phone.)

Titanium.UI.WebView object

The web view allows you to open an HTML5 based view which can load either local or remote content. (Added support for Windows Phone.)

Titanium.UI.Window object

The Window is an empty drawing surface or container. (Added support for Windows Phone.)

Titanium.UI.Windows object

Windows Phone specific UI capabilities. All properties, methods and events in this namespace will only work on Windows Phone devices. (New API, supported on Windows Phone.)

Titanium.UI.Windows.AppBarButton object

Windows Phone application bar button. (New API, supported on Windows Phone.)

Titanium.UI.Windows.AppBarToggleButton object

Toggle button for the Windows Phone application bar. (New API, supported on Windows Phone.)

Titanium.UI.Windows.CommandBar object

A Windows Phone application bar located at the bottom of the window. (New API, supported on Windows Phone.)

Titanium.UI.Windows.SystemIcon object

A set of constants used to create Windows Phone system buttons. (New API, supported on Windows Phone.)

Titanium.UI.iOS.ROW_ACTION_STYLE_DEFAULT property

The default style for RowActionType. (New API, supported on iPhone and iPad.)

Titanium.UI.iOS.ROW_ACTION_STYLE_DESTRUCTIVE property

The destructive style for RowActionType. (New API, supported on iPhone and iPad.)

Titanium.UI.iOS.ROW_ACTION_STYLE_NORMAL property

The normal style for RowActionType. (New API, supported on iPhone and iPad.)

Titanium.Utils object

The top-level Utils module, containing a set of JavaScript methods that are often useful when building applications. (Added support for Windows Phone.)

Titanium.XML object

The top level XML module. The XML module is used for parsing and processing XML-based content. (Added support for Windows Phone.)

Titanium.XML.Attr object

Represents an attribute of an Element. (Added support for Windows Phone.)

Titanium.XML.CDATASection object

Used to include blocks of literal text containing characters that would otherwise need to be escaped. (Added support for Windows Phone.)

Titanium.XML.CharacterData object

An interface extending Titanium.XML.Node with a set of attributes and methods for accessing character data in the DOM. Implements the DOM Level 2 API on Android and iOS. For reasons of compatibility with the javascript engine, text is represented by UTF-8 instead of UTF-16 on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.Comment object

Represents the contents of an XML comment. (Added support for Windows Phone.)

Titanium.XML.DOMImplementation object

The Titanium.XML.DOMImplementation interface provides a number of methods for performing operations that are independent of any particular instance of the document object model.Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.Document object

The DOM Document returned from Titanium.XML.parseString. (Added support for Windows Phone.)

Titanium.XML.DocumentFragment object

A lightweight document object used as a container for a group of nodes. (Added support for Windows Phone.)

Titanium.XML.DocumentType object

Each Titanium.XML.Document has a doctypeattribute whose value is either 'null' or a Titanium.XML.DocumentType object. (Added support for Windows Phone.)

Titanium.XML.Element object

Represents an element in a DOM document, a Titanium.XML.Node defined by a start-tag and end-tag (or an empty tag). Elements may have attributes associated with them. Implements the DOM Level 2 API on Android and iOS with some non-standard extensions. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.Entity object

This interface represents an entity, either parsed or unparsed, in an XML document. Note that this models the entity itself not the entity declaration. The nodeName attribute that is inherited from Node contains the name of the entity. An Entity node does not have any parent. Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.EntityReference object

Represents an XML entity reference. (Added support for Windows Phone.)

Titanium.XML.NamedNodeMap object

A key-value paired map that maps String objects to Titanium.XML.Node objects. Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.Node object

A single node in the Document tree. (Added support for Windows Phone.)

Titanium.XML.NodeList object

A list of Titanium.XML.Node objects. Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.Notation object

Represents a notation declared in the DTD. Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.ProcessingInstruction object

A way to keep processor-specific information in the text of the document. Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Titanium.XML.Text object

Represents the textual content of an Titanium.XML.Element or Titanium.XML.Attr Implements the DOM Level 2 API on Android and iOS. Exposes the DOM Level 3 API implementation on Mobile Web. (Added support for Windows Phone.)

Related Links