# Titanium SDK 8.1.0.GA - 13 August 2019

# About this release

Titanium SDK 8.1.0 is a minor release of the SDK, addressing high-priority issues from previous releases.

As of this release, Titanium SDK 8.0.x will not receive updates more than six months after the release of 8.1.0 (current) (2020-02-13). Any needed fixes will be in 8.1.x or later supported releases within the 8.x branch. See Axway Appcelerator Deprecation Policy and Nominal Lifetimes documents for details.

❗️ Warning

With the release of Titanium SDK 9.0.0, we will no longer support Node.js 8.X. Node.js 10.13.0 will be the new minimum supported version with SDK 9.0.0.

# New features

# Android platform

  • TIMOB-4041 (opens new window) - Android: Add "separatorStyle" property to Ti.UI.ListView

    • Added support for ListView.separatorStyle

    • ListView.separatorStyle

      var win = Ti.UI.createWindow({ backgroundColor: 'black', fullscreen: true });
      var listView = Ti.UI.createListView({
          separatorStyle: Ti.UI.TABLE_VIEW_SEPARATOR_STYLE_NONE,
      });
      var section = Ti.UI.createListSection();
      var sectionData = ;
      var i = 25;
      for (var k = 0; k < 25; k++) {
          sectionData.push({
              properties: {
                  title: 'Row ' + (k + 1)
              }
          });
      }
      section.setItems(sectionData);
      listView.sections = section;
      win.add(listView);
      win.open();
      
  • TIMOB-14460 (opens new window) - Android: Add Ti.Platform.canOpenURL() support

    • Added support for Ti.Platform.canOpenURL()
  • TIMOB-26793 (opens new window) - Android: Hide radio buttons OptionDialog

    • Added support to use OptionDialog without radio buttons

    • OptionDialog

      var win = Ti.UI.createWindow({
        title: 'Click window to test OptionDialog',
        backgroundColor: 'white'
      });
      var opts = {
        title: 'Select an option',
        options: 'Option 1', 'Option 2', 'Option 3', 'Option 4',
        buttonNames: 'Cancel'
      }
      var dialog;
      win.addEventListener('click', function() {
        dialog = Ti.UI.createOptionDialog(opts);
        dialog.addEventListener('click', onSelectDialog);
        dialog.addEventListener('cancel', function(e) {
          alert('Dialog canceled! e.cancel = ' + e.cancel + ', e.index = ' + e.index);
        })
        dialog.show();
      });
      function onSelectDialog(e) {
        console.log(e);
      }
      var btn = Ti.UI.createButton({
        title: "toggle selected index",
        bottom: 5
      });
      btn.addEventListener("click", function() {
        if (opts.selectedIndex == 0) {
          opts.selectedIndex = -1;
        } else {
          opts.selectedIndex = 0;
        }
      });
      win.add(btn);
      win.open();
      

# iOS platform

  • TIMOB-18421 (opens new window) - iOS: Add animation properties "springVelocity" and "dampingRatio"

    • Added dampingRatio and springVelocity to allow iOS spring animations
  • TIMOB-26523 (opens new window) - iOS 11+: Support large title style (dynamic fonts)

    • Added support for dynamic fonts in UIFontTextStyleLargeTitle

    • UIFontTextStyleLargeTitle

      var win = Ti.UI.createWindow({
          backgroundColor: '#fff',
          extendSafeArea: false
      });
      
      var scrollView = Ti.UI.createScrollView({ layout: 'vertical', top: 50 });
      
      var textStyles =
          Ti.UI.TEXT_STYLE_HEADLINE,
          Ti.UI.TEXT_STYLE_SUBHEADLINE,
          Ti.UI.TEXT_STYLE_BODY,
          Ti.UI.TEXT_STYLE_FOOTNOTE,
          Ti.UI.TEXT_STYLE_CAPTION1,
          Ti.UI.TEXT_STYLE_CAPTION2,
          Ti.UI.TEXT_STYLE_CALLOUT,
          Ti.UI.TEXT_STYLE_TITLE1,
          Ti.UI.TEXT_STYLE_TITLE2,
          Ti.UI.TEXT_STYLE_TITLE3,
          Ti.UI.TEXT_STYLE_LARGE_TITLE,
      ;
      
      for (var i = 0; i < textStyles.length; i++) {
          var textStyle = textStylesi;
          scrollView.add(Ti.UI.createLabel({
              top: 20,
              text: textStyle,
              font: {
                  textStyle: textStyle
              }
          }));
      }
      
      win.add(scrollView);
      win.open();
      
  • TIMOB-26599 (opens new window) - iOS: Add "allowTranscoding" option to Ti.Media.openPhotoGallery()

    • Added option to disable video compression when importing video
  • TIMOB-26973 (opens new window) - iOS: Add accessibilityIdentifier

    • Added accessibilityIdentifier which can compose views on iOS the same way content description is composed on Android
  • TIMOB-27124 (opens new window) - iOS 13: Support running on Xcode 11 Simulators

    • Added support for Xcode 11

# Windows platform

  • TIMOB-25778 (opens new window) - Windows: Implement Ti.UI.Label.ellipsize

    • Implemented Ti.UI.Label.ellipsize

    • TEXT_ELLIPSIZE_TRUNCATE_START , TEXT_ELLIPSIZE_TRUNCATE_MIDDLE, and TEXT_ELLIPSIZE_TRUNCATE_MARQUEE are not supported on Windows because platform component doesn't support them

# Multiple platforms

  • TIMOB-26571 (opens new window) - TiAPI: Global process object compatible with Node.js

    • Expanded the global process object to be more compatible with Node.js
  • TIMOB-26669 (opens new window) - TiAPI: Create Node-compatible assert module API

    • Added Node.js-compatible asset module API
  • TIMOB-26670 (opens new window) - TiAPI: Create Node-compatible util module API

    • Added Node.js-compatible util module API

    • This API does not include every method of util.types, nor does it include util.extends(), util.isDeepStrictEqual(), or util.inspect

    • Currently supports depth, showHidden, and to some degree breakLength

  • TIMOB-27150 (opens new window) - Add ability to alias required modules in Titanium

    • Added ability to alias required modules

# Community credits

# Fixed issues

# Android

# iOS

# Windows

# Multiple platforms

# Improvements

# Android

  • TIMOB-26686 (opens new window) - Android: Allow Ti.Network.HTTPClient "file" parameter to be set to Ti.Filesystem.File object like iOS

    • Parity for File object support
  • TIMOB-26817 (opens new window) - Android: Add parity for Window's barColor property.

    • Parity for barColor property of Ti.UI.Window
  • TIMOB-26848 (opens new window) - Android: Re-add "baseURL" support to WebView.setHtml() that was removed in 6.0.3

    • Re-implemented baseURL to support WebView.setHtml
  • TIMOB-26877 (opens new window) - Android: Ti.Database.install() should throw exception like iOS if source db file not found

    • Modified Ti.Database.install() to throw an exception if given source database file was not found
  • TIMOB-26909 (opens new window) - Android: Improve V8 cold start performance

    • Updated V8 to 7.3.492.26 which provides performance updates
  • TIMOB-26957 (opens new window) - Android: Update V8 runtime to 7.3.492.26

    • Updated V8 to 7.3.492.26 which provides performance updates
  • TIMOB-27042 (opens new window) - Android: Update ti.playservices to 16.1.3

    • Updated ti.playservices to version 16.1.3
  • TIMOB-27111 (opens new window) - Android: Implement async Ti.Database.DB methods

    • Implement asynchronous Ti.Database.DB methods for executing SQL queries

      • Ti.Database.DB.executeAsync(query, parameters[], callback)

      • Ti.Database.DB.executeAllAsync(queries[], callback)

    • Implement method for executing multiple queries in one request

# iOS

  • TIMOB-26509 (opens new window) - iOS: Allow Ti.UI.SearchBar to be displayed in navigation-bar

    • Added support to show search bar navigation for TiUIListView and TiUITableView
  • TIMOB-26770 (opens new window) - iOS: Use Swift 5 by default

    • Added support for Swift 5
  • TIMOB-27043 (opens new window) - Cache JS processing between builds

    • Improved incremental app build times
  • TIMOB-27047 (opens new window) - iOS: Version of SDKs default modules are not up to date

    • Updated the following modules

      • urlSession from 2.1.0 to 2.2.0

      • ti.map from 3.1.0 to 3.1.2

      • ti.safaridialog from 1.1.1 to 3.1.0

      • ti.identity from 1.0.5 to 1.0.6

  • TIMOB-27164 (opens new window) - iOS: Implement async Ti.Database.DB methods

    • Implement asynchronous Ti.Database.DB methods for executing SQL queries

      • Ti.Database.DB.executeAsync(query, parameters[], callback)

      • Ti.Database.DB.executeAllAsync(queries[], callback)

    • Implement method for executing multiple queries in one request

# Windows

  • TIMOB-19965 (opens new window) - Windows: Implement WebView.data

    • Implemented WebView.data

    • WebView.data

      var win = Ti.UI.createWindow({
          backgroundColor: 'green'
      });
      var blob = Ti.Filesystem.getFile('app.js').read();
      var webview = Ti.UI.createWebView({
          data: blob,
          height: Ti.UI.FILL,
          width: Ti.UI.FILL
      });
      webview.addEventListener('load', function () {
          Ti.API.info(typeof webview.data);
      });
      win.add(webview);
      win.open();
      
  • TIMOB-26575 (opens new window) - Windows: Support async variants of Ti.Network.TCP #read and #write

    • Parity for async variants of Ti.Network.TCP
  • TIMOB-26855 (opens new window) - Windows: Add "baseURL" support to WebView.setHtml()

    • Re-implemented baseURL to support WebView.setHtml
  • TIMOB-26961 (opens new window) - Windows: Save HttpClient instance until callback is fired

    • The httpClient instance is saved until onerror or onloadcallback is called

    •   win.addEventListener('open', function () {
            var _tmpURL = "https://docs.appcelerator.com/platform/latest/#!/api/"
            var _tmpClient = Ti.Network.createHTTPClient({
      
                onload: function (e) {
                    alert('Loaded');
                },
                onerror: function (e) {
                    alert("Error:" + e.error);
                },
                timeout: 30000
            });
      
            _tmpClient.open("GET", _tmpURL);
            _tmpClient.send();
            // In this case _tmpClient may be garbage-collected as soon as this function is finished.
            // We could think this as "logical" failure but I think Titanium developers tend to use HttpClient like this.
        });
      
        win.open();
      

# Multiple platforms

  • TIMOB-26574 (opens new window) - TiAPI: Implement set/clearImmediate

    • Implemented process.nextTick() and the global setImmediate/clearImmediate
  • TIMOB-26729 (opens new window) - TiAPI: Ship baseline polyfills in built SDK

    • This update injects the core-js/regenerator polyfills into the bundle common JS SDK code we ship when we build
  • TIMOB-27045 (opens new window) - Pass along ENV variables to process.env on development builds

    • Write env.json file with ENV variables
  • TIMOB-27182 (opens new window) - Update Hyperloop to 4.0.3

    • Android: Debugging in Hyperloop enabled projects

    • iOS: Debugging in Hyperloop enabled projects

    • iOS: Correctly require minimum SDK 8.0.0

# API changes

# New APIs

# SDK modules versions

# Android and iOS

Module Android version iOS version
urlSession n/a 2.2.0
facebook 8.0.0 6.0.0
ti_coremotion n/a 2.0.1
ti_map 4.3.1 3.1.2
ti_safaridialog n/a 1.1.1
ti_webdialog 1.1.0 1.1.0
ti_touchid 3.0.1 2.1.4
ti_identity 2.1.0 1.0.6
ti_cloudpush 6.0.1 n/a
ti_playservices 16.1.3 n/a

# CommonJS

Module Version
ti.cloud 3.2.11

# Hyperloop

Module Version
Hyperloop 4.0.3