Release Notes

Titanium SDK 3.5.0 GA - 13 January 2015

Contents

About This Release

This is the general availability (GA) release version of the Titanium SDK 3.5.0.

Note that this release includes feature and behavior changes. See Notice of Feature and Behavior Changes for details.

This release includes over 90 bug fixes and improvements, see the full list of issues that were addressed in Release 3.5.0. Notable issues include adding 64-bit build support for iOS and refactoring various APIs to use the newer iOS 8 APIs.

There are no updates to the other Titanium components: Alloy, Studio or the CLI. Use the current GA versions: Alloy 1.5.1, Studio 3.4.1 and CLI 3.4.1.

iOS 64-bit Support

Starting February 1, 2015, Apple will require that all new App Store submissions be compiled using the iOS 8 SDK, and support 64-bit architectures, and starting June 1, 2015, all updated applications will also need to follow the same requirements.

This Release contains the following changes to support 64-bit builds:

Note: Any module included with your project must support 64-bit architectures. All modules included in this Release support 64-bit architectures. To build old modules with 64-bit support, you need to change the supported architectures and deployment targets. For details, see the Module Builds section below.

Notice of Feature or Behavior Changes

Module Builds

To update an existing iOS module and make it 64-bit compatible follow these steps:

  1. Open the module's Xcode project.
  2. You should have at least one warning asking you to update the project to the "recommended settings", do that.
  3. Change all architectures to $(ARCHS_STANDARD).
  4. Set the deployment target to at least iOS 6.0.

That's it. Build the module normally with this Release and it should now be 64-bit compatible. To verify, run the following command:

cd /PATH/TO/MODULE/
xcrun lipo -info build/lib.<MODULE_NAME>.a

And the output should be:

Architectures in the fat file: build/lib.your_module_here.a are: armv7 i386 x86_64 arm64

For Android and iOS modules, add the architectures field to the manifest file with the architectures to support. To find out which architectures the SDK supports, create a module using this Release and open its manifest file(s). Copy the architectures field from the manifest file to the manifest file of the module you want to build. Android and iOS support difference architectures. Once the architectures field is added, build the module.

Note: For Android and iOS modules, starting with Release 3.6.0, the build will fail if the architectures field is missing or the architectures do not match the architectures the Titanium SDK supports.

For example, add the following lines to the respected manifest files:

android/manifest:

architectures: armeabi armeabi-v7a

ios/manifest:

architectures: armv7 arm64 i386 x86_64

Note: For Android, only add the supported architectures your module supports.

iOS Platform

This section lists changes for the iOS platform.

Alert and Option Dialogs

The Alert and Option Dialog APIs were refactored to support the newer iOS 8 Alert and Option Dialog APIs. There are no Titanium SDK API changes associated with this refactor, but there are behavior changes.

Since Alert and Option Dialogs are view controllers in iOS 8, the background window will fire the blur and focus events when the dialog appears and disappears. In iOS 7, the events do not fire.

Audio Session

The Audio Session API was refactored to support the newer iOS 8 Audio Session APIs. The older APIs are being deprecated in favor of the newer APIs. If your application uses any of the older Audio Session APIs, see the table below for the new APIs to use.

Prior to Release 3.5.0Release 3.5.0 and later
Titanium.Media.audioLineType property Use the Titanium.Media.currentRoute property
Titanium.Media.audioSessionMode property Use the Titanium.Media.audioSessionCategory property
Titanium.Media.linechange event Use the Titanium.Media.routechange event
Titanium.Media.recordinginput event Use the Titanium.Media.canRecord property to check if the device supports recording audio
Titanium.Media.AUDIO_HEADPHONES,
Titanium.Media.AUDIO_HEADPHONES_AND_MIC,
Titanium.Media.AUDIO_HEADSET_INOUT,
Titanium.Media.AUDIO_LINEOUT,
Titanium.Media.AUDIO_MICROPHONE,
Titanium.Media.AUDIO_MUTED,
Titanium.Media.AUDIO_RECEIVER_AND_MIC,
Titanium.Media.AUDIO_SPEAKER,
Titanium.Media.AUDIO_UNAVAILABLE
and Titanium.Media.AUDIO_UNKNOWN constants
Use a Titanium.Media.AUDIO_SESSION_PORT_* constant
Titanium.Media.AUDIO_SESSION_MODE_* constants Use a Titanium.Media.AUDIO_SESSION_CATEGORY_* constant

Popover

The Popover API was refactored to support the newer iOS 8 Popover APIs. The add() and remove() methods have been removed and the title, leftNavButton and rightNavButton properties have been deprecated.

Assign the contentView property of the Popover object to a View object to display as the contents of the popover. To display a navigation bar that includes a title and navigation buttons, use a Titanium.UI.iOS.NavigationWindow object as the root container of the content view.

Window url Property

As of this Release, the Titanium.UI.Window.url property is deprecated. This property was used to create a window with its own context using a JavaScript file.

The recommended way of creating windows with their own context is to either use the Alloy Framework or a CommonJS module.

Known Issues

iOS Debugger

Stepping over breakpoints fails if the breakpoints are in a file added to the application using the Ti.include() method (TIMOB-18369).

iOS Profiler

The profiler does not report the function's name, and reports it as either anonymous or program (TIMOB-18064).

API Changes

New APIs

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

APITypeNotes
Titanium.Media.AUDIO_SESSION_CATEGORY_AMBIENTproperty

For long-duration sounds such as rain, car engine noise, and so on. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_CATEGORY_PLAYBACKproperty

Session mode for playing recorded music or other sounds that are central to the successful use of your application. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_CATEGORY_PLAY_AND_RECORDproperty

Session mode for recording (input) and playback (output) of audio, such as for a VOIP (voice over IP) application. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_CATEGORY_RECORDproperty

Session mode for recording audio; it silences playback audio. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_CATEGORY_SOLO_AMBIENTproperty

Session mode for long-duration sounds such as rain, car engine noise, and so on. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_AIRPLAYproperty

Constant for output on a remote Air Play device. This is an output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_BLUETOOTHA2DPproperty

Constant for output on a Bluetooth A2DP device. This is an output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_BLUETOOTHHFPproperty

Constant for input or output on a Bluetooth Hands-Free Profile device. This can be both an input and output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_BLUETOOTHLEproperty

Constant for output on a Bluetooth Low Energy device. This is an output port. This is available on iOS7 and later. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_BUILTINMICproperty

Constant for built-in microphone on an iOS device. This is an input port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_BUILTINRECEIVERproperty

Constant for the speaker you hold to your ear when on a phone call. This is an output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_BUILTINSPEAKERproperty

Constant for built-in speaker on an iOS device. This is an output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_CARAUDIOproperty

Constant for Input or output via Car Audio. This can be both an input and output port. This is available on iOS7 and later. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_HDMIproperty

Constant for output via High-Definition Multimedia Interface. This is an output port (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_HEADPHONESproperty

Constant for headphone or headset output. This is an output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_HEADSETMICproperty

Constant for microphone on a wired headset. This is an input port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_LINEINproperty

Constant for line level input on a dock connector. This is an input port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_LINEOUTproperty

Constant for line level output on a dock connector. This is an output port. (New API, supported on iPhone and iPad.)

Titanium.Media.AUDIO_SESSION_PORT_USBAUDIOproperty

Constant for input or output on a Universal Serial Bus device. This can be both an input and output port. (New API, supported on iPhone and iPad.)

Titanium.Media.audioSessionCategoryproperty

A constant for the audio session category to be used. (New API, supported on iPhone and iPad.)

Titanium.Media.currentRouteproperty

Returns a description of the current route, consisting of zero or more input ports and zero or more output ports. (New API, supported on iPhone and iPad.)

Titanium.Media.getAudioSessionCategorymethod

Gets the value of the audioSessionCategory property. (New API, supported on iPhone and iPad.)

Titanium.Media.getCurrentRoutemethod

Gets the value of the currentRoute property. (New API, supported on iPhone and iPad.)

Titanium.Media.routechangeevent

Fired when an audio line type change is detected. (New API, supported on iPhone and iPad.)

Titanium.Media.setAudioSessionCategorymethod

Sets the value of the audioSessionCategory property. (New API, supported on iPhone and iPad.)

Titanium.Network.PROGRESS_UNKNOWNproperty

Constant value specifying that the progress of a download can not be calculated. (New API, supported on Android, iPhone and iPad.)

Deprecated APIs

The following APIs are deprecated in Release 3.5.0.

APITypeNotes
Titanium.Media.AUDIO_HEADPHONESproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_HEADPHONES_AND_MICproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_HEADSET_INOUTproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_LINEOUTproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_MICROPHONEproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_MUTEDproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_RECEIVER_AND_MICproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_SESSION_MODE_AMBIENTproperty

Deprecated in favor of the AUDIO_SESSION_CATEGORY constants defined in Titanium.Media.

Titanium.Media.AUDIO_SESSION_MODE_PLAYBACKproperty

Deprecated in favor of the AUDIO_SESSION_CATEGORY constants defined in Titanium.Media.

Titanium.Media.AUDIO_SESSION_MODE_PLAY_AND_RECORDproperty

Deprecated in favor of the AUDIO_SESSION_CATEGORY constants defined in Titanium.Media.

Titanium.Media.AUDIO_SESSION_MODE_RECORDproperty

Deprecated in favor of the AUDIO_SESSION_CATEGORY constants defined in Titanium.Media.

Titanium.Media.AUDIO_SESSION_MODE_SOLO_AMBIENTproperty

Deprecated in favor of the AUDIO_SESSION_CATEGORY constants defined in Titanium.Media.

Titanium.Media.AUDIO_SPEAKERproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_UNAVAILABLEproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.AUDIO_UNKNOWNproperty

Deprecated in favor of the AUDIO_SESSION_PORT constants defined in Titanium.Media.

Titanium.Media.audioLineTypeproperty

Deprecated in favor of currentRoute property defined in Titanium.Media.

Titanium.Media.audioSessionModeproperty

Deprecated in favor of the audioSessionCategory property defined in Titanium.Media.

Titanium.Media.getAudioLineTypemethod
Titanium.Media.getAudioSessionModemethod
Titanium.Media.linechangeevent

Titanium no longer fires this event. Use the routechange event instead.

Titanium.Media.recordinginputevent

Titanium no longer fires this event. Use the canRecord property to check if an input hardware is available.

Titanium.Media.setAudioSessionModemethod
Titanium.UI.iOS.COLOR_SCROLLVIEW_BACKGROUNDproperty

Deprecated in iOS 7.

Titanium.UI.iOS.COLOR_UNDER_PAGE_BACKGROUNDproperty

Deprecated in iOS 7.

Titanium.UI.iOS.COLOR_VIEW_FLIPSIDE_BACKGROUNDproperty

Deprecated in iOS 7.

Titanium.UI.iPad.Popover.heightproperty

This property is deprecated. Set the height on the contentView property instead.

Titanium.UI.iPad.Popover.leftNavButtonproperty

This property is no longer supported.

Titanium.UI.iPad.Popover.rightNavButtonproperty

This property is no longer supported.

Titanium.UI.iPad.Popover.titleproperty

This property is no longer supported.

Titanium.UI.iPad.Popover.widthproperty

This property is deprecated. Set the width on the contentView property instead.

Titanium.UI.Window.urlproperty

The recommended way of creating windows with their own context is to either use the Alloy Framework or a CommonJS module than using this property.

Removed APIs

The following APIs have been removed in Release 3.5.0.

APITypeNotes
Titanium.UI.iPad.Popover.addmethod

Use the Titanium.UI.iPad.Popover.contentView property to modify the content of the popover.

Titanium.UI.iPad.Popover.removemethod

Use the Titanium.UI.iPad.Popover.contentView property to modify the content of the popover.