These release notes apply to an earlier version of the software and the corresponding documentation. Some links may no longer be active.

Release Notes

Highlights - Cascades

The previous release notes highlight.

Previous release notes

You might be interested to know what was featured in previous beta releases of Cascades. Be sure to read through the release notes for beta 1, beta 2, beta 3, and beta 4 to get a complete picture of all the available features.

The new project wizard highlight.

New project wizard

Creating a new Cascades project in the QNX Momentics IDE has been improved. You can now select the type of application to create, and then choose a template that's most appropriate for that type of app.

The active text styling highlight.

Active text styling

You can now use rich text markup to apply styles to active text in your apps. For example, you can add links that are generated automatically in text content, such as URLs, email addresses, and phone numbers.

New in this release

Cascades UI framework

Built-in controls

  • Text controls - You can now set restrictions on the length of text that users can type in text input controls, such as text fields and text areas. Also, you can turn off the interpretation of rich text in text controls, if you don't want your apps to support rich text.

Other features

  • Virtual keyboard - You can use APIs to prevent the virtual keyboard from being displayed in your apps. This feature can be useful if your app handles text input in a special way that doesn't use the virtual keyboard.
  • Active text - You can now use rich text markup to apply styles to active text in your apps. For example, you can add links that are generated automatically in text content, such as URLs, email addresses, and phone numbers.
  • Resource loading - You can now specify the loading effect on an ImageView control. This can be useful if you want the asset resources in your app to have the same non-blocking loading behavior as content resources have. Cascades doesn't make any distinction between assets that are accessed using relative paths and assets that are accessed using absolute paths.

Cascades platform APIs

  • Dialog boxes, prompts, and toasts - Several additions and improvements have been made to these controls, including the following:
    • You can use the emoticonsEnabled property to display smiley faces as emoticons in a SystemDialog, SystemCredentialsPrompt, SystemPrompt, or SystemProgressDialog.
    • You can associate an action with the return key in a SystemDialog, SystemListDialog, SystemPrompt, SystemCredentialsPrompt, or SystemProgressDialog using the returnKeyAction property.
    • You can add a custom button to a SystemPrompt, SystemCredentialsPrompt, SystemDialog, SystemProgressDialog, or SystemListDialog.
    • The buttonAreaLimit property has been added to the SystemListDialog, SystemPrompt, SystemCredentialsPrompt, and SystemProgressDialog classes.
    • You can customize a message that is displayed when invalid credentials are entered in a SystemCredentialsPrompt using the validationMessage property.
    • You can use the new system classes, SystemProgressDialog, SystemProgressToast, and SystemUiProgressState, to create standardized progress dialog boxes and prompts.
  • App integration (invocation framework) - In order to properly support extended character sets, the invocation framework has updated its URI handling to enable clients and targets to better coordinate their use of URIs. The invocation framework now expects valid URIs to be passed in their encoded form to enable the targets to interpret them properly. For non-file URIs, the updated handling ensures that the framework does not alter the URIs and delivers them as-is. With this change, the targets receiving URIs in invocations should expect to receive encoded URIs and are required to decode them.

Other features

  • New project wizard - Creating a new Cascades project in the QNX Momentics IDE has been improved. You can now select the type of application to create, and then choose a template that's most appropriate for that type of app. Also, the IDE automatically detects when your device OS version and SDK version are different and displays a warning. You can then choose to find an SDK version that matches your device OS version. QML Preview compatibility checks are also performed to give you the best possible performance in the QML Preview.
  • Improving build performance of native projects - By default, projects are set up to build one file at a time. To significantly improve build performance, you can use the QNX Momentics IDE parallel build feature.

    To enable the parallel build feature:
    1. In the C/C++ perspective, right-click the project name and select Properties.
    2. Click C/C++ Build and then click the Behavior tab.
    3. Select the Use parallel build check box.

    For Windows and Linux, you can use the Use optimal jobs number setting. On Mac, you can use the Use parallel jobs setting. Using too many jobs causes system instability so the ideal setting on Mac is to use the number of hardware threads available on the host machine and subtract one. For example, on a quad core machine with hyper threading, the number of jobs should be set no higher than 7 (4 * 2 - 1).

Back to Top

Known limitations

  • Issues with sending output to the console

    In this release, the qDebug() and console.log() functions (and related functions qWarning(), qFatal(), and qCritical()) do not work the same way as they did in previous releases. Previously, when you used these functions in your JavaScript/QML code, the function sent the debug information to the console, and you could view the information in the Console view in the IDE. Now, this function does not send output to the console. Instead, this function sends debug information to the slogger2 log.

    You can now view all slogger2 log information in the Device Log view in the QNX Momentics IDE. To open the Device Log view, on the Window menu, click Show View > Other. Expand Debug and select Device Log.

    If you want to view log information in the console, you can use the fprintf() function with stdout or stderr as the output stream to receive output directly to the console. Or, you can use a function similar to the following:

    void myMessageOutput(QtMsgType type, const char* msg) {
        fprintf(stdout, "%s\n", msg);

    Then, you can register this handler function with QDebug by calling the qInstallMsgHandler() function in your main function after the default Application creation, similar to the following:

    int main(int argc, char **argv)
        Application app(argc, argv);
        #ifndef QT_NO_DEBUG

    After this, qDebug() calls will be logged to the console. However, you should keep in mind that this approach may adversely affect the performance of your applications.

  • QML preview considerations

    There are several considerations you should keep in mind as you work with the QML preview in the QNX Momentics IDE.

    Using QML preview with multiple files open

    Depending on system resources available, users may experience an unexpected termination of the QNX Momentics IDE when keeping more than 10 QML files open in the editor while QML preview is enabled.
    Workaround: Keep the number of QML files open at any given time under 10, or disable the QML preview feature in Preferences.

    QML preview in Linux

    QML preview functionality is not working on Linux, and only works on Windows and Mac OS at the moment. Linux users can deploy their applications to a device or simulator to test the look of their QML components.

    Using older drivers with QML preview

    Any drivers more than 12 months old are unsupported and can lead to issues with rendering, including, but not limited to, complete disabling of whole QML preview feature. The user will also be notified about this situation by a dialog within the QNX Momentics IDE.
    Workaround: Update to the latest drivers. Note that this issue might occur even with newer graphics cards and the latest drivers. In this case, you should report this issue to Research In Motion in as much detail as possible.

    QML preview with C++ objects

    The QML preview can load and render components based on the Cascades plug-in only (in bb.cascades 1.0). Objects that are registered in C++ in your project are not understood by the QML preview and cannot be loaded and rendered.

    CPU usage with QML preview

    If you're using looping animations in your QML code with QML preview enabled, the QNX Momentics IDE may use excessive CPU.

  • Viewers in the invocation framework

    Using the invocation framework, viewer-related classes (for example, InvokeViewerMessage and InvokeViewerRequest) and methods have been deprecated. The viewer-related classes and methods have been replaced by Card classes and methods. For more information on the Card API, see the Cards documentation.

  • Push pins for geographic data on a MapView control

    Push pins are added to MapView through MapData. MapData for a Mapview is obtained by calling the mapData() function. Push pins can be added through MapData::add(bb::platform::geo::Geographic *geo) or MapData::add(const bb::platform::geo::GeoList &elements). If you add the push pins to the MapView, the push pins will not render at all. Subsequently, the user is not able to interact with push pins. Bubbles around the push pins will not render either. The APIs do not show any errors during compilation or cause an unexpected termination at runtime.

    You can learn more about this issue, including a proposed solution with a complete sample app, by reading the BlackBerry 10 Cascades MapView blog post.

Back to Top

Fixed in this release

Cascades UI framework


Some Cascades apps could enter a state where they no longer rotated properly, and they might potentially have stopped responding and required a reset to recover.


In some cases, list items disappeared when multiple items were added to a list.


When you used a StandardListItem in a list, sometimes the list item retained its activated visual state (by changing color) even when the item was not active.


If you double-tapped a fine cursor for text selection and then moved it before the fine cursor disappeared, the application might have terminated unexpectedly.


If you had a ListView with multiple top-level items, some of the top-level items disappeared when sub-items were added to the top-level items.


If you tapped and held on a fine cursor, the context menu was not invoked.


Switching from English to another language didn't translate the context menu during a cut, select, copy, or dismiss action.


If your application opened a Sheet and closed it using a timer, memory from the sheet might not have been freed after it was closed.


If you were using your device in Arabic and you tapped and held to open a menu, text in the menu might have been truncated.


Sometimes when selecting text, the text selection handles on either side of the text didn't follow your finger when moved.


If you were using your device in portrait orientation and then switched to landscape orientation, your device might not have displayed as expected.


When returning from a peek transition, the TitleBar from the previous view sometimes incorrectly appeared in the returned view.


Setting the imageSource property on any image control (such as ImagePaintDefinition) took longer than expected (around 3 ms). This issue reduced the creation time of the application scene.


If you pressed and held on the whitespace of a StandardListItem, the context menu was not displayed.


The space between title and description on a StandardListItem was smaller than intended.


Cascades applications logged statements in a .log file instead of a .slog file.


Right-to-left language text started on the left instead of the right when using a TextField or TextArea.


When using a GridListLayout object, calling the setSpacingAfterHeader() function does not add spacing after the header. If the spacingAfterHeader property is connected to a slot function, a signal is not emitted when the setSpacingAfterHeader() function is called, as it should.

Cascades platform APIs


When using application targets in the invocation framework, an app may have been able to incorrectly modify the targets of other applications on the device, even if the app was not the owner of the target.


When you used an SqlConnection object and tried to add an empty QVariantList, the empty list reused the previous list item's data and was added to the SqlConnection. The empty list data should not have been added.


The BatteryChargingState class returned the incorrect charging state when the charger was unplugged.


The appearance of the barcode detector control is now consistent with that of other controls.


The Marker class is now available.


The AttachmentDownloadStatus class is now available.


If you were using the InvokeTargetReply class and the error() function returned a value other than None, the targetType() function returned values outside the defined range.


If your application used the Card class and a SystemDialog control, and called SystemDialog.exec() to display the dialog, your application could sometimes have terminated unexpectedly.


The NFC secure element APIs now support, and enforce where appropriate, the Global Platform ACF format. If you were using certain Gemalto SIMs, you may have found that you received the error response NFC_RESULT_SE_REQUEST_REJECTED from the APIs due to a "deny all" rule in the GlobalPlatform ACF applet that Gemalto load onto their SIMs. You should explicitly whitelist any particular AID that you want your application to have access to by providing an "any application can access AID X.Y.Z rule".


If your application had the post_notification permission and the application ID, <id>, defined in the bar-descriptor.xml file was longer than 50 characters, the notification service terminated unexpectedly.


The CalendarEventPicker and CalendarEventPickerError classes are now available.


When using certain Qt classes (such as Qtimer), Cascades may not have properly unblocked these classes when an application returned to a fullscreen state from a thumbnailed state.


In some cases, you might have seen a %20 in a Title instead of a space.


If you were using the SqlDataAccess class, calling the execute() function on a table that didn't exist returned an error message that lacked information about the non-existence of that table. The message "No query/ Unable to fetch row" was returned.


If you deleted an app whose icon was dimmed, the app might not have been deleted and might have reappeared when you restarted your device.


If the user opened the application menu and selected a HelpActionItem, the user couldn't subsequently open the application menu again.


Sheet controls that were opened from the application menu could be displayed only once.


If the language on the device was set to Arabic, the Calculator app showed a 'k' as the decimal point.


The JsonDataAccess class could not handle JSON files that were saved in UTF-8 with byte order mark (BOM).

Cascades Builder


If you created a Cascades project with a name that included a hyphen (-), the app could not be deployed to a device.


Using the QNX Momentics IDE with older/unsupported video drivers may have resulted in the IDE terminating unexpectedly without any error. Under some conditions related to QML preview, the IDE may have terminated unexpectedly without any error.

Back to Top

Known issues

Cascades UI framework


When you attempt to select text with two fingers, sometimes the text isn't selected.


When a ListView control's flick mode is set to a non-default value and a slot function is connected to the flickModeChanged() signal, calling the resetFlickMode() function doesn't set the flick mode back to the default value and no signal is emitted.


When specifying the SubmitKey value for a TextField, the "Submit" text is not displayed on the Enter key.


When text is entered into a TextField that is longer than the TextField, there is no ellipsis at the beginning of the text.


A ListView component defined in QML with a GridListLayout displays only the grid header and does not display data within each cell.


The API documentation indicates that the TextField.resetHintText() slot function resets hint text to an empty string, but the function actually resets hint text to "Enter text".


When using a HeaderListItem with layoutDirection set to LeftToRight or RightToLeft, the parent ListView has infinite scrolling and non-header items are hidden.


Default-sized TextField controls in Container controls with LeftToRight layouts can push some Label controls out of view by exceeding the bounds of the Container.

Cascades platform APIs


When using cards in an app and the app is run on the BlackBerry 10 Device Simulator, rotating the simulator may cause the UI to become distorted.


When using the invocation framework and you try to query another application's filter (for example, NFC), the filter query may be successful. You should not be able to query another application's filter and should receive a TargetNotOwned error.


When an app uses cards and the cards are peeked at many times in quick succession, the device may become unresponsive or the app may terminate unexpectedly.


When you use the HardwareInfo class to query for device information, the modelName() function returns the incorrect model name.


When using the windowGroupFullscreen() signal in the Application class, the documentation does not note that the window group ID of a window will not be available until a window message has been processed by the application.


When you use the Message API to read the list of SMS messages on the device, and you try to read the body of the messages, the body can't be accessed. The message body always appears as an empty string.


When using the invocation framework, if you set the file:// scheme in your URI request and invoke a target with the URI, an incorrect error may be reported. A Bad Request error is expected, but an Internal Error may be reported instead.


When you add a custom URI to an InvokeTargetFilter and then retrieve the list of custom attributes, the size of the custom attribute list is reported as 0. The documentation does not specify that the returned size will be 0.


When using a dialog in your app and the dialog request cannot be completed, the appropriate finished signals are not emitted. For example, this situation might occur when a PPS channel cannot be opened.


If you run an app in one perimeter (either the enterprise perimeter or personal perimeter) and try to invoke another app that's in the opposite perimeter, the error that you receive is incorrect. You receive a Bad Request error, and the expected error is No Target Found.


Progress toasts sometimes time out incorrectly when show() or exec() is called repeatedly.


If you change the orientation of the device as a card is being loaded, sometimes the card appears distorted.


The MapView API doesn't work on the BlackBerry 10 device simulator. The MapView API uses port 8128 to download its MapData. If your application is rendering a black screen only, you should ensure your firewall rules allow TCP traffic on port 8128.


On the BlackBerry 10 device simulator, if you're using the SdCardInfo API, the SD card channel requires access_shared permissions, but no permissions should need to be set.


If an application has an invoke filter containing an asterisk (*), the application fails to install showing a failure 884.


If you're using the QGeoPositionInfoSource class with the timeoutUpdated() signal connected to a slot function that prints the value of the replyErrorCode property, when the device running the app is stationary, the WarnStationary error code is not given. Instead, the value None is given.


The BatteryInfo API returns -1 as the value of the full charge capacity.


The API documentation for the Application.pooling() signal needs improvement. The app needs to be closed to trigger the pooling feature and pooling() signal. In the pooling() slot function, the handler, or somewhere after the pooling() signal is emitted, the app must call poolingCompleted(). If not, the app will be terminated in the normal way. In order to properly have pooling working, the app must be deployed using the 'BlackBerry-deploy' command line program. Pooling will not work if you run your app from the QNX Momentics IDE using the 'Run as' option.
Workaround: Deploy your app using the command line. To do this, in your project, remove "-devmode" from the makefile. Open a command prompt, navigate to the bbndk folder, and run the following command: bbndk-env. After that, navigate to the app directory, and make the BAR file. If you need to sign the BAR file, use the following command: blackberry-signer -storepass thePassword To deploy the application, run the following command: blackberry-deploy -installApp -device -password DevicePassword


The ProcessState API documentation doesn't contain enough information on the difference between background and stopping Type enumerations.


The API reference for resetEmoticonsEnabled() of the SystemCredentialsPrompt class says the function resets the main text of the pop-up to QString::null. However, the function actually resets the emoticonsEnabled property back to the default value of false.


The move() function of QListDataModel moves items incorrectly. If the 'from' index is lower than the 'to' index, the item is moved to the 'to' index minus 1.
Workaround: If you're moving to any index except for the last, move to an index expected plus one. There is no way to move to the last index with this issue present.


There is missing documentation on QtNfcSubset classes including some enumerations and constructors in QNdefRecord, QNdefMessage, QNdefNfcSmartPosterRecord, QNdefNfcTextRecord, and QNdefNfcUriRecord.
Workaround: Look at the respective header files in the installation folder of the BlackBerry 10 Native SDK.


If invocation requests are pending, sometimes peeking and closing a card does not work.


MenuManager does not create the menu if you set the TargetType to -100.


Invoking multiple cards while in landscape mode distorts the user interface.


After prolonged use, the peek functionality sometimes doesn't work correctly and prevents apps from launching and minimizing.
Workaround: Restart the device.


When a card is closed, the InvokeManager::peekEnded() signal is emitted twice. It should only be emitted once.


When using an ArrayDataModel and a QListDataModel, the itemsChanged() signal is emitted when clear() is called on an empty data model.


On the BlackBerry 10 device simulator, calling secondaryDisplayId() from the DisplayInfo class returns an invalid display, and no secondary display is simulated.


If you call find() on an empty GroupDataModel, a QVariantList containing a single 0 is returned (saying that we found a match at the very first item in the model) instead of an empty QVariantList as expected. Also, if you have an ArrayDataModel containing QString types of values, a call to indexOf() looking for a QString type value within the range of the model returns an index, even if the QString type value isn't in the model.


Classes that inherit DataModel, such as GroupDataModel, QListDataModel, and XmlDataModel, are missing some description information for implemented superclass functions, such as childCount(), hasChildren(), type(), and data().

Cascades Builder


The application profiler does not correctly report the number of function calls in a shared library of a Cascades app.


When you add a library to a Cascades project, the Add Library wizard contains instructions that are incorrect.


After building a project in the QNX Momentics IDE, the project may compile correctly but, in some cases, it may show header files as unresolved.


When rendering QML files with animations, the QML preview may use a large amount of CPU processing power.


Restarting the QNX Momentics IDE on a Mac may trigger an erroneous "Possible crash detected" message, which can be safely ignored.


When using the Memory Analysis Tool to analyze Cascades projects, the Memory Problems view takes longer than expected to populate the errors.


Sometimes when you debug JavaScript code in your application after the first debug run, you receive an error and are unable to debug the app. Also, the JavaScript debugger remains after the debug session has ended.
Workaround: Restart the QNX Momentics IDE and close all old debug sessions.


When updating nine-slice margins for an image, changes may not be seen in QML preview.
Workaround: Close and reopen QML file.


The conditional breakpoint doesn't work in both the JavaScript section of a QML file and a JavaScript function of a JavaScript file.


If a color is set on text, the color shown in the Properties view is incorrect, though the color appears correctly in QML preview and on the device.


WebView controls don't render in QML preview.


Sometimes when editing JavaScript, code completion displays no proposals when there are proposals to display, including on console functions (such as the console.debug() function) or math functions (such as the Math.sin() function). The functions still work at runtime though.


Syntax highlighting (pretty-printing) of some Qt classes isn't displayed properly in the IDE (for example, Qstring, QVector, QChar, and others).


The debugger displays errors when watching expression values on Cascades objects.

BBM Social Platform


When you call ProfileBox::requestRetrieveIcon() to obtain the profile box icon that is registered with BBM Social Platform, the icon is not retrieved.


Images that use transparency might not appear correctly in the user's list of BBM applications.


When BBM Connect (Settings > Security and Privacy > Application Permissions) is toggled from on to off, or from off to on, the registration and permission states are not updated.


When a C-only app uses the BBM Social Platform BPS APIs, the compiler requires additional non-C libraries to be added manually (libQtCore and libcpp).


If BBM Connect (Settings > Security and Privacy > Application Permissions) for an app is turned off before launching the app, toggling BBM Connect doesn't update the registration status of the app.
Workaround: Turn BBM Connect on before launching the app.

Back to Top

Looking for release notes for previous betas?

You can find the release notes for the previous beta releases on the following pages:

Back to Top

  1. 1. Download the tools

    Before you start developing, you'll need to visit the Downloads tab. Here you'll find downloads for the BlackBerry 10 Native SDK, BlackBerry 10 Device Simulator, and some other useful tools.

  2. 2. Try the sample apps

    Now featuring a filter control, the Sample apps tab allows you to search for samples by name or by feature.

    Select either the Core or Cascades radio buttons to display the samples relevant to you.

  3. 3. Educate yourself

    The Documentation tab contains tons of examples, tutorials, and best practices to guide you along the path towards building an awesome app.

    You can access all the documentation that you need in the left-hand navigation.

  4. 4. Start developing

    The Reference tab is where you'll find essential details about how to use our APIs.

    You can use the left-hand navigation to choose how you would like to browse the reference: by module, by topic, or alphabetically. If you have an idea of what you are looking for, start typing it in the Filter box.