Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Reverted from v. 3

...

Table of Content Zone
locationtop

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.213.0 will be the new minimum supported version with SDK 9.0.0.

New features

Android platform

  • TIMOB-4041 - Android: Add "separatorStyle" property to Ti.UI.ListView
    • Added support for ListView.separatorStyle
    • Code Block
      title ListView.separatorStyle
      linenumberstrue
      languagejs
      collapsetrue
      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 - Android: Add Ti.Platform.canOpenURL() support
    • Added support for Ti.Platform.canOpenURL()
  • TIMOB-26793 - Android: Hide radio buttons OptionDialog
    • Added support to use OptionDialog without radio buttons

    • Code Block
      titleOptionDialog
      linenumberstrue
      languagejs
      collapsetrue
      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 - iOS: Add animation properties "springVelocity" and "dampingRatio"
    • Added dampingRatio and springVelocity to allow iOS spring animations
  • TIMOB-26523 - iOS 11+: Support large title style (dynamic fonts)
    • Added support for dynamic fonts in UIFontTextStyleLargeTitle
    • Code Block
      titleUIFontTextStyleLargeTitle
      linenumberstrue
      languagejs
      collapsetrue
      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 - iOS: Add "allowTranscoding" option to Ti.Media.openPhotoGallery()
    • Added option to disable video compression when importing video
  • TIMOB-26973 - iOS: Add accessibilityIdentifier
    • Added accessibilityIdentifier which can compose views on iOS the same way content description is composed on Android
  • TIMOB-27124 - iOS 13: Support running on Xcode 11 Simulators
    • Added support for Xcode 11

Windows platform

  • TIMOB-25778 - Windows: Implement Ti.UI.Label.ellipsize
    • Implemented Ti.UI.Label.ellipsize
    • TEXT_ELLIPSIZE_TRUNCATE_STARTTEXT_ELLIPSIZE_TRUNCATE_MIDDLE, and TEXT_ELLIPSIZE_TRUNCATE_MARQUEE are not supported on Windows because platform component doesn't support them

Multiple platforms

  • TIMOB-26571 - TiAPI: Global process object compatible with Node.js
    • Expanded the global process object to be more compatible with Node.js
  • TIMOB-26669 - TiAPI: Create Node-compatible assert module API
    • Added Node.js-compatible asset module API
  • TIMOB-26670 - 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 - Add ability to alias required modules in Titanium
    •  Added ability to alias required modules

Community credits

Fixed issues

Android

  • TIMOB-24415 - Android: Listview not able to add accessibility label in the ListItem components
  • TIMOB-24881 - Android: Label ellipsize modes START and MIDDLE don't work if "autoLink" is true
  • TIMOB-26456 - Android: Optimize TiBlob.imageAsResized
  • TIMOB-26650 - Android: Using toImage on views with border properties not added to UI results in empty blob
  • TIMOB-26841 - Android: Reading TextField "backgroundDisabledColor" will crash if background/border color is assigned
  • TIMOB-26862 - Android: TextField/TextArea within a TableView can have performance issues with some keyboards
  • TIMOB-26869 - CLI: Android build fails with cannot find module error
  • TIMOB-26878 - Android: Ti.Database.install() fails if destination directory does not exist
  • TIMOB-26954 - Android: Reading a JSON file fails on Android Q
  • TIMOB-26993 - Android: WebView sometimes crashes on window close after zooming content
  • TIMOB-27087 - Android: ShortcutItem not being updated based on "id"
  • TIMOB-27094 - Android: ListView's SearchBar/SearchView wrongly overlaps rows as of 8.0.1
  • TIMOB-27100 - Android: TabGroup labels not displayed anymore (SDK 8.1.0+)
  • TIMOB-27153 - Android: Prevent multiple exception logs
  • TIMOB-27188 - Android: TabGroup crashes if tab "title" property is not set as of 8.0.2
  • TIMOB-27232 - Android: Setting Window "barColor" while using a theme without an ActionBar/TitleBar will cause a crash as of 8.1.0
  • TIMOB-27269 - Android: Do not retry sending events if no connectivity
  • TIMOB-27300 - Android: AssetCryptImpl buffer overflow for large JS assets
  • TIMOB-27314 - Android: Unable to build to device on Windows

iOS

  • TIMOB-26795 - iOS: Event listener on overlay is not working for camera when camera is kept idle for a few minutes
  • TIMOB-26829 - iOS: Titanium.Media.openMusicLibrary returns empty items on iOS 9.3.5
  • TIMOB-26833 - iOS: Two startup log messages are output
  • TIMOB-26838 - iOS: the openWindow() method of NavigationWindow does not work when called from base window open event
  • TIMOB-26854 - iOS: Crash when handling user-activities
  • TIMOB-26885 - iOS: Crash when trying to push a window twice (e.g. on slow devices)
  • TIMOB-26946 - iOS: Launch screen shows last screen when quickly relaunching the app
  • TIMOB-27049 - iOS: Simulator can crash because of the "trackUserInteraction" feature
  • TIMOB-27074 - IOS: Rebuilding the app with simulator fails with due to log port being occupied
  • TIMOB-27082 - iOS: Modules using TiBlob and built before SDK 8.1 causing app crash
  • TIMOB-27089 - iOS: App crashes when asking for location permissions (SDK 8.1.0+)
  • TIMOB-27090 - iOS: Using a non-string value in alert() causes app to crash in SDK 8.0.0+
  • TIMOB-27098 - iOS: debugger does not show all app files loaded
  • TIMOB-27103 - iOS: Native extensions without sources are crashing build
  • TIMOB-27155 - iOS: Incremental builds broken
  • TIMOB-27175 - iOS: Ti.Platform.id changes when updating to SDK 8.0.0
  • TIMOB-27202 - IOS:Rebuilding app on device throws Couldn't find module error
  • TIMOB-27203 - iOS: no apiversion validation performed on application build
  • TIMOB-27210 - iOS: Cannot find iOS 13 simulators in Xcode 11 Beta 3
  • TIMOB-27230 - iOS: CLI prefers Xcode 11/iOS 13 even though Xcode 10.2.1 is selected
  • TIMOB-27270 - iOS: Allow capture of signal exceptions
  • TIMOB-27277 - iOS: Invalid analytics platform
  • TIMOB-27278 - iOS: App crashes upon giving permission to Calendar
  • TIMOB-27313 - IOS:Regression-Console.log does not concatenate and log if it has multiple arguments with space

Windows

  • TIMOB-24418 - Windows Phone: OptionDialog undefined error
  • TIMOB-24423 - Windows Phone: TableViewRow and Label layout not respected
  • TIMOB-24443 - Windows Phone: Progressbar not respect width and not resize
  • TIMOB-25134 - Windows: Mocha test Titanium.UI.TextField padding test failure
  • TIMOB-26550 - Windows: Add support for file property to HTTPClient
  • TIMOB-26664 - Windows: Ti.Geolocation.lastGeolocation should return string
  • TIMOB-26689 - Windows: Wrong height for TableViewRow with Label
  • TIMOB-26690 - Windows: TabGroup does not fire open/close events
  • TIMOB-26791 - Windows: Ti.UI.View reports top/left/bottom/right values as Strings always
  • TIMOB-26797 - Windows: removeEventListener removes wrong callback
  • TIMOB-26969 - Windows: Codec encodeNumber/decodeNumber should throw Error on invalid setup
  • TIMOB-27257 - [Windows] Error is shown when packaging a windows module

Multiple platforms

  • TIMOB-27204 - CLI: apiversion validation always fails for native modules installed via npm

Improvements

Android

  • TIMOB-26686 - Android: Allow Ti.Network.HTTPClient "file" parameter to be set to Ti.Filesystem.File object like iOS
    • Parity for File object support
  • TIMOB-26817 - Android: Add parity for Window's barColor property.
    • Parity for barColor property of Ti.UI.Window
  • TIMOB-26848 - Android: Re-add "baseURL" support to WebView.setHtml() that was removed in 6.0.3
    • Re-implemented baseURL to support WebView.setHtml
  • TIMOB-26877 - 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 - Android: Improve V8 cold start performance
    • Updated V8 to 7.3.492.26 which provides performance updates
  • TIMOB-26957 - Android: Update V8 runtime to 7.3.492.26
    • Updated V8 to 7.3.492.26 which provides performance updates
  • TIMOB-27042 - Android: Update ti.playservices to 16.1.3
    • Updated ti.playservices to version 16.1.3
  • TIMOB-27111 - 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 - iOS: Allow Ti.UI.SearchBar to be displayed in navigation-bar
    • Added support to show search bar navigation for TiUIListView and TiUITableView
  • TIMOB-26770 - iOS: Use Swift 5 by default
    • Added support for Swift 5
  • TIMOB-27043 - Cache JS processing between builds
    • Improved incremental app build times
  • TIMOB-27047 - 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 - 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 - Windows: Implement WebView.data
    • Implemented WebView.data
    • Code Block
      titleWebView.data
      linenumberstrue
      languagejs
      collapsetrue
      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 - Windows: Support async variants of Ti.Network.TCP #read and #write
    • Parity for async variants of Ti.Network.TCP
  • TIMOB-26855 - Windows: Add "baseURL" support to WebView.setHtml()
    • Re-implemented baseURL to support WebView.setHtml
  • TIMOB-26961 - Windows: Save HttpClient instance until callback is fired
    • The httpClient instance is saved until onerror or onloadcallback is called
    • Code Block
      linenumberstrue
      languagejs
      collapsetrue
      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 - TiAPI: Implement set/clearImmediate

    • Implemented process.nextTick() and the global setImmediate/clearImmediate
  • TIMOB-26729 - 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 - Pass along ENV variables to process.env on development builds
    • Write env.json file with ENV variables
  • TIMOB-27182 - 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

Multiexcerpt include
MultiExcerptName8.1.0
PageWithExcerptNew API Notice SDK 8.x

Android and iOSSDK modules versions

ModuleAndroid versioniOS version
urlSessionn/a2.2.0
facebook8.0.06.0.0
ti_coremotionn/a2.0.1
ti_map4.3.13.1.2
ti_safaridialogn/a1.1.1
ti_webdialog1.1.01.1.0
ti_touchid3.0.12.1.4
ti_identity2.1.01.0.6
ti_cloudpush6.0.1n/a
ti_playservices16.1.3n/a

CommonJS

ModuleVersion
ti.cloud3.2.11

Hyperloop

ModuleVersion
Hyperloop4.0.3