Momentics IDE for BlackBerry

Screen showing the IDE highlight.

Momentics IDE for BlackBerry provides the development and testing environment and tools that you need to develop great apps. Check out the Gold release notes.

BlackBerry 10 Device Simulator

Screen showing the simulator running on a computer.

The BlackBerry 10 Device Simulator allows you to simulate the BlackBerry 10 OS environment to help you develop your app. Take a look at the release notes.

Plug-in for Microsoft Visual Studio

Screen showing the core logo with a plug coming out from it.

Do you want to develop your app in Microsoft Visual Studio? You can use the BlackBerry Native Plug-in for Microsoft Visual Studio. Take a look at the release notes.

The BlackBerry 10 Native SDK and the Momentics IDE for BlackBerry are available as separate releases, so their version numbers are distinct. The Native SDK provides all of the libraries that you need to create your apps, while the Momentics IDE provides the development and testing environment that brings it all together.

To make it easy to download the tools that you need, the BlackBerry 10 Native SDK is installed separately from the Momentics IDE. When you start the Momentics IDE, you can download and install the BlackBerry 10 Native SDK from within the IDE.

Upgrading to 10.3.1 Gold

To upgrade to the 10.3.1 Gold version of the Native SDK, you must also upgrade to Momentics IDE 2.1.1 Gold using the installer or the IDE.

You can install Momentics IDE 2.1.1 Gold and continue using API level 10.3.0 and earlier. However, if you want to use API level 10.3.1, you must install Momentics IDE 2.1.1 Gold first.

If you have a BlackBerry target that was created with a previous version of the Momentics IDE in your workspace, you need to delete the original target and create a new one with Momentics IDE 2.1.1 Gold.

Using the installer

If you're using the installer, you need to install the Momentics IDE to a unique location. You have two options for upgrading using the installer:

  • Uninstall the previous version, then install the new version. If you uninstall the previous version of the Momentics IDE, you can still download previous API levels by using the update site in the IDE.
  • Install the new version to a different location. You can install Momentics IDE 2.1.1 Gold to a different location than your current IDE and continue to work in both versions.

To download and install Momentics IDE 2.1.1 Gold and API level 10.3.1 Gold using the installer:

  1. Download Momentics IDE 2.1.1 Gold from the Downloads page.
  2. Run the installation file.
  3. Complete the installation by following the on-screen instructions.
  4. Start or restart the Momentics IDE.
    You may be prompted to install a new SDK. If you aren't, on the Help menu, click Update API Levels.
  5. In the API Levels dialog box, select the Gold tab.
  6. Click Install for the BlackBerry Native SDK 10.3.1 API level.
  7. When the API level finishes installing, click OK.

Using the Momentics IDE

You can upgrade from Momentics IDE 2.1 Gold and Momentics IDE 2.1.1 beta to Momentics IDE 2.1.1 Gold in the IDE:

  • On the Help menu, click Check for Updates, and follow the instructions in the wizard.

You can also configure the IDE to look for updates automatically:

  1. In Windows and Linux, on the Window menu, click Preferences. In Mac OS, on the Momentics menu, click Preferences.
  2. Expand Install/Update and click Automatic Updates.
  3. Configure your update schedule, download options, and notification options.

For more information about API levels

See API levels in Build, test, and deploy your app.

Targeting multiple API levels

If you're using the 10.3.1 Gold version of the SDK but you still want to develop for a BlackBerry 10 device that's running version 10.3.0 or earlier of the OS, you need to download an additional SDK by using the update site. To do this, in the Momentics IDE, complete the following:

  1. On the Help menu, click Update API Levels.
  2. In the API Levels dialog box, select the Gold or Beta tab.
  3. Select the API level that you want.
  4. Click Install.
  5. When the API level finishes installing, click OK.

For more information, see Set up your environment.

Finding the appropriate version

Here's a quick summary to help you choose which version of the BlackBerry 10 Native SDK you need:

  • If you are developing for a BlackBerry 10 Dev Alpha device, visit Updating the BlackBerry 10 Dev Alpha Device Software.
  • If you are developing for a BlackBerry 10 device, you need to download an API level from the update site that matches the device version that's provided by your wireless service provider. You can verify the device version by opening the Settings app, tapping About, selecting OS in the Category drop-down list, and checking the version that's listed in the OS Version field.

For more information about developing apps that work on different versions of the BlackBerry 10 Native SDK, see Appropriate version of the BlackBerry Native SDK in the BlackBerry Support Community Forums.

Reverting to an earlier software version

The following procedure will delete all data and applications on the BlackBerry device. If possible, back up the data prior to performing the procedure. Any backups created while running a developer build of the BlackBerry 10 OS cannot be restored after the production BlackBerry 10 OS has been reloaded.

If you've upgraded the software version on your device to a recent developer build of the BlackBerry 10 OS and you want to revert to a software version that's been released by your wireless service provider, complete the following:

  1. Open BlackBerry Link.
  2. Connect the device using a micro USB cable.
  3. Under Devices, click the device name.
  4. In the upper-right corner, click Preferences.
  5. On the left, click Reload Device Software.
  6. Click Reload.
  7. Click OK.

For more information on reverting to an earlier software version, read this knowledge base article.

Back to Top

Cascades and Core release notes



Screen showing the dynamic design unit hightlight.

Dynamic design units

Screen showing support for new devices highlight.

Support for new devices

Screen showing the PIM highlight.


Dynamic design units are a way to help your app adapt to changes in information density (for example, changes to the system font size). To implement dynamic design units, just integrate the dduFactor property into your existing design unit calculations. For more information, see Design units.

There are lots of new features to support the BlackBerry Classic and BlackBerry Passport devices. For example, you can customize the BlackBerry Classic navigation keys and you can capture the touch-sensitive keyboard events on the BlackBerry Passport. For more information, see New in this release.

Some new features have been added to the personal information management (PIM) APIs, including calendar reminders, contact folders, out-of-office settings, and updates to notebook entries. For more information, see Personal information management.

New in this release

Cascades | Core

Cascades platform APIs

Advanced data at rest protection (ADARP)

Added the AdarpDomain and DataLockState classes. Advanced data at rest protection (ADARP) is a feature that locks a work space when a device has been idle for a specified time period. The AdarpDomain class provides functions to monitor the status of the device and request a data lock state change. For more information, see Sensitive data in the work space and Security for Enterprise.


Added the following functions in the HardwareInfo class to determine whether a device has certain physical keys or a trackpad, which are features that are associated with the BlackBerry Classic:

Added the following classes:


Added the following features:

  • Phone Call Details and Phone Call Logs permissions are available as check boxes on the Application tab of the bar-descriptor.xml file.
  • Push and Run in Background permissions are no longer restricted and are granted to all developers by default.
  • Permissions no longer persist when a user uninstalls your app. The permissions that the user previously granted to your app are removed. The user is prompted to provide permissions when your app is reinstalled.
  • The Personal network permission allows your app to use the personal network.
  • ADARP permissions can be used to request a data lock, extend the data lock timeout period, access the data and startup data domains, and run when the app is in a data lock state.

For more information, see Available permissions.

Personal information management (PIM)

Added the following features:

  • Calendar: You can now set and update reminders for calendar events (including default reminders), as well as reminders for all-day meetings. You can also listen for changes to the default calendar folder.
  • Contacts: Contact folders are now available, which let you sort contacts into folders that you can display in your apps. You can retrieve a list of contact folders from a particular account and choose whether these folders are synchronized with the account.
  • Message: You can retrieve a preview of a message instead of the entire message, and you can set and retrieve classification information for a message. You can also perform bulk operations, such as deletion and marking as read, on messages and conversations. New out-of-office settings are available, which let you set and retrieve the text that internal and external recipients receive as out-of-office replies. Lastly, a new MIME type for Rich Communication Suite (RCS) messages has been added.
  • Notebook: You can now set and retrieve recurrence properties for notebook entries.

Cascades UI framework

Building your app for the BlackBerry Classic webcast

You can watch the Bringing your app to Classic webcast to learn more about building your app for BlackBerry Classic.

BlackBerry Classic: Trackpad

Cascades allows you to customize the behavior of trackpad navigation in several ways: you can set which control gets focus initially, customize the navigation path, and even change the highlight style. If you require more direct control over the trackpad, you can also handle trackpad events directly. The BlackBerry Classic also introduces four navigation keys that you can override behavior for: the Back, End, Send (also known as the Call key), and Menu keys.

For more information, see Trackpad input.

BlackBerry Passport: Touch-sensitive keyboard

The keyboard on the BlackBerry Passport is touch sensitive, meaning that it can recognize touch events and gestures in addition to key presses. You can capture touch-sensitive keyboard events by using the TouchKeyboardHandler in Cascades.

For more information, see Touch-sensitive keyboard input.


Added the following classes that allow you to set visual effects on images and controls to change their appearance. Use these effects to brighten, darken, or change the color intensity of your controls and images.

Events and input handling

Updated the following classes to support default actions, input sources, long press and tap events, focus changes, and action bars on devices with trackpads and physical keys:


Added and updated the following function and classes to handle which controls should get focus when navigating using the trackpad or physical keys:

Back to Top

Core | Cascades

BlackBerry Platform Services Library

Added support for system keys, which are the Send, Menu, Back, and End keys.

Invoke (navigator_invoke.h)

Updated the description of navigator_invoke_timer_registration_send() to emphasize that while specific timers are automatically deregistered when they expire, you must explictly deregister recurrence timers.

Navigator (navigator.h)

Added the following event code for system key presses:


Added the enumerated type navigator_syskey_t that contains these values that map to the system keys:


For more information, see BlackBerry Platform Services Library.

Credential Manager Library

The Credential Manager Library provides an interface to use the Credential Manager service, which supports password-based and certificate-based credentials.

For more information, see Credential Manager Library.



This release adds the ability to switch audio tracks in supported file formats, and mm-renderer publishes track-specific metadata for audio, video, and subpicture tracks. The mm-renderer documentation includes the new section Parameters for mm-renderer and updates Playing media with information about metadata and how to switch tracks.

The Dictionary Object Library has been moved out of the Multimedia section and into its own section of the site.

For more information, see Multimedia.

Wi-Fi service

The new Wi-Fi service document demonstrates how to receive Wi-Fi events and how to use the Wi-Fi aggregator capability. For more information, see Wi-Fi service.

Multimedia Renderer Event API

Added the mmr_metadata_split() function.

For more information see, Multimedia Renderer Event API.


The OpenMAX AL APIs are now available. For more information, see OpenMAX AL.

Scoreloop Library

The Scoreloop Library is no longer supported. Apps should not use any Scoreloop libraries or dependencies.

Smart Card Library


Added the following C++ functions to support key generation and management:


Added the following functions:


Added the following functions that support key generation and management:

Support for BlackBerry Classic

Building your app for the BlackBerry Classic webcast

You can watch the Bringing your app to Classic webcast to learn more about building your app for BlackBerry Classic.

Navigation keys

You can override the behavior for the BlackBerry Classic navigation keys. For more information, see BlackBerry Classic navigation keys.


The Screen API exposes trackpad events as SCREEN_EVENT_JOYSTICK events that you can listen for and respond to in your apps. For more information, see Trackpad input.

Support for BlackBerry Passport

The keyboard on the BlackBerry Passport is touch sensitive, meaning that it can recognize touch events and gestures in addition to key presses. You can capture touch-sensitive keyboard events by using the SCREEN_EVENT_MTOUCH_EVENT session from Screen. For more information, see Touch-sensitive keyboard input.

VPN Extensions Library


Added the following function:

  • vpn_ext_register_service_no_deamon()

Back to Top

Changes in this release

The BlackBerry Advertising Service will reach its end of life on June 16, 2015. At that time, the servers will be disabled and the APIs will no longer work. The Advertising Service APIs (the Cascades Ad service and the Core Advertising Service Library) will no longer be supported and will not work.

Developers should remove API calls to the BlackBerryAdvertising Service before June 16, 2015. Developers should find another advertising SDK. Smaato supports the BlackBerry 10 Native SDK and is a possible solution. For more information, see Smaato.

Cascades | Core

Cascades platform APIs

Maps and map visualization

Added the animateToAltitude() and animateToHeading() slots to the MapView class. These slots animate a map to a new altitude or heading. Instead of jumping directly to the altitude or heading, the map gradually zooms or rotates from the current altitude or heading to the new altitude or heading.

Cascades UI framework

Foreign window

Added functions and signals that allow you to manage input events that should be forwarded to the bound screen window when the foreign window control is in focus. For more information, see ForeignWindowControl.


Added the selectionChangeStarted() and selectionChangeEnded() signals to the ListView class. The selectionChangeStarted() signal is emitted before item selection takes place. It is followed by one or more selectionChanged() signals and then a selectionChangeEnded() signal. The selectChangeEnded() signal is emitted when one or more items have been selected. You can use this signal to handle selection change efficiently. For example, extracting the list of selected items by calling selectionList(), should be carried out when the selectionChangeEnded() signal is emitted instead of every time the selectionChanged() signal is emitted.

Added the imageFocusedEffect property, setImageFocusedEffect() and resetImageFocusedEffect() functions, and imageFocusedEffectChanged() signal to the StandardListItem class. The imageFocusedEffect property represents the ImageFocusedEffect::Type that is applied on the image when the item is focused.


Added the function selectedContactAttributes() and the signal contactAttributesSelected() that allow you to find the list of contact attributes that were selected by the user. For more information, see ContactPicker.

Added the kind property to the DateTimePicker class. The possible values for this property are: PickerKind::Default, PickerKind::List, and PickerKind::Expandable. An expandable picker has a title and description, which can be set within the Picker. A List picker doesn’t have a header and is always expanded.

UI configuration

Updated the following classes:

  • UIconfig: Supports dynamic design units and scale factors that depend on the information density context
  • UIPalette: Supports a new primary dark color and secondary text colors


Added new functions to the WebSettings class to determine whether spatial navigation should be used to interact with a WebView when the user is using a trackpad. Spatial navigation is disabled by default because it is not supported for all web content. When spatial navigation is enabled, a highlight can be used to interact with elements on the webpage by using the trackpad. The spatialNavigationEnabledChanged() signal is emitted when spatial navigation is enabled or disabled.

Added new functions to the WebPage class that exit full screen mode and hide dialog webpages. Usually the user performs these actions by pressing buttons on the webpage. These functions allow you to programmatically perform these actions in your app.

Added the shareTextAction() function, which allows you to share the selected text using the invocation framework when triggered. For more information, see WebPage.


Near Field Communication

Updated the Near Field Communication documentation to include a description of NFC concepts and supported NFC functionality. The documentation also includes an overview of the NFC C API. For more information, see Near Field Communication.

Back to Top

Core | Cascades


Near Field Communication

Updated the Near Field Communication documentation to include an overview of the Cascades NFC API.

NFC Library


  • Updated the following functions to include the difference between feature sets:
    • nfc_tag_transceive()
    • nfc_hce_register_aid()


  • Updated the following functions:
    • nfc_se_register_aid()
    • nfc_se_reader_set_technology_types()


Updated OpenSSL to address the issues from the August 6, 2014 OpenSSL Security Advisory:

  • Information leak in pretty printing functions (CVE-2014-3508)
  • Crash with SRP ciphersuite in Server Hello message (CVE-2014-5139)
  • Race condition in ssl_parse_serverhello_tlsext (CVE-2014-3509)
  • Double Free when processing DTLS packets (CVE-2014-3505)
  • DTLS memory exhaustion (CVE-2014-3506)
  • DTLS memory leak from zero-length fragments (CVE-2014-3507)
  • OpenSSL DTLS anonymous EC(DH) denial of service (CVE-2014-3510)
  • OpenSSL TLS protocol downgrade attack (CVE-2014-3511)
  • SRP buffer overrun (CVE-2014-3512)

Back to Top

Fixed in this release

Cascades | Core

Cascades platform APIs

JI: 709268

A headless app triggered by a recurrent rule with a count limit was triggered one more time than the count limit.

JI: 701824

The headless app trigger for a recurring timer did not work as expected.

JI: 689088

Using the WiFiDirect class, if you called cancelConnectRequest(), requestStartSession(), or requestStopSession(), stored the return value in a variable in QML, and then displayed the store value, the variable was displayed as undefined.

JI: 581431

On some BlackBerry Z3 devices, the displayName() function in the DisplayInfo class may not have displayed the name properly.

JI: 449170

If you were using a GeoPolygon, inner boundaries didn't render.

JI: 150783

There was missing documentation on QtNfcSubset classes including some enumerations and constructors in QNdefRecord, QNdefMessage, QNdefNfcSmartPosterRecord, QNdefNfcTextRecord, and QNdefNfcUriRecord.

Cascades UI framework

JI: 705782

If you entered an existing chat on some devices, the text focus was not automatically set to the input field.

JI: 700238

On some devices, if you set the device language to any right-to-left language and entered text in a message, the text may not have displayed properly.

JI: 689059

If you launched an app in portrait mode and swiped down to view the application menu, then switched to landscape mode and swiped down again, the number of menu items may have been different.

JI: 659080

When you started the Pictures app for the first time, you may have seen black rectangles in the list of images.

JI: 580371

If you had a FlowListLayout or GridListLayout list with three or more columns and emitted an itemsChanged() signal, then the list may have jumped to the top.

Back to Top

Core | Cascades


JI: 591369

If the battery level was below 3300 mV, the flash still flashed.


JI: -

The SCREEN_PROPERTY_GESTURE_RECOGNITION property was included in the documentation but was not available for use.

JI: 492681

In the Camera Library offline documentation, the following functions and data type should not have been included:

  • camera_get_supported_video_vf_modes()
  • camera_get_video_vf_mode()
  • camera_set_video_vf_mode()
  • camera_video_vf_modes_t


JI: 702478

While recurrent timers supported a time granularity measured in seconds, the navigator APIs supported only a granularity measured in minutes.

JI: 633678

Sometimes an email sent from Microsoft Outlook might have been received with errors in the message.

JI: 615489

In some cases, your device might have reset unexpectedly when you tried to answer an incoming video chat call from a BlackBerry PlayBook tablet.

JI: 606281

If you tried to listen to radio station 108.0, you got an error.

JI: 547323

While watching a video file, if there is considerable jiggling of the wires, the volume increased and you couldn't turn it down.


JI: 403249

When using OpenAL to play sound on the device and an HDMI cable was plugged in, the sound did not transfer on to the connected device.

Back to Top

Known issues

Cascades | Core


JI: 807558

The extendDataLockTime slot does not extend the time before dataLockState switches to the DataLocked state.

JI: 807332

While a device is switching from LockPending to DataLocked, the nextDataLockTime property is unavailable.

JI: 556119

A headless app that needs to run on system start must be data lock aware or it is not started when the device is in the DataLocked state.

BBM Social Platform

JI: 389356
JI: 389093

When the Connect to BBM permission (Settings > Security and Privacy > Application Permissions) is toggled from enabled to disabled or from disabled to enabled, the registration and permission states are not updated.
Workaround: Restart the app if permissions have been modified.

Cascades platform APIs

JI: 749705

When using the BlackBerry 10 Device Simulator to emulate the BlackBerry Classic, if you query the resolution and physical dimension using the DisplayInfo class, incorrect results are returned.

JI: 721991

When connected to a secondary display, pixel size is locked to the framebuffer, so the pixelSizeChanged() signal is never emitted.

JI: 720787

If you query the pixel size using the DisplayInfo class with a disconnected secondary display port, the framebuffer size is returned instead of (0,0).

JI: 708274

If you connect a device using WifiDirectIntent::GroupOwner (or WifiDirectIntent::Client), then the mismatched network role WiFiDirectRole::Client (or WiFiDirectRole::GroupOwner) is returned.

JI: 677902

A BadRequest error message is returned by InvokeReply when registerTimer() is called with an incorrect target defined in the bar-descriptor.xml file.

JI: 676677

A BadRequest error message is returned by InvokeReply when deregisterTimer() is called with an unregistered timer ID.

JI: 632555

The captureDisplay() function does not display the Permission Required dialog box and returns PermissionDenied when using the simulator.

JI: 624014

The SystemProgressToast::autoUpdateEnabled property is not available in the bb.system 1.2 library when using the simulator.

JI: 614953

The AutoCapitalize value doesn't work for the inputField of a SystemPrompt dialog box.

JI: 591348

When you restart your device, a system-started headless app fails to fire notifications intermittently.

JI: 567242

If you perform a Box2Box transfer of a folder using InvokeManager, the folder is changed into a file and then transferred.

JI: 567047

The Push Service does not work on the simulator.

JI: 549616

The Smart Card API allows you to register Application Type and not just Headless and Service Type.

JI: 534927

When using an SKU to purchase an item, the purchase receipt shows an empty digital good ID.

JI: 481294

If you have a headless app that detects SMS and geofencing triggers, the app still gets invoked even if the permissions are disabled.

JI: 480352

Invoking a video chat such as BBM Video from a headless app brings the UI to the foreground.

JI: 468275

Opening a large number of cards can cause the device to become unresponsive.

JI: 449197

GeoPolylines and GeoPolygons don't render if they cross 0, 180, or -180 degrees longitude or latitude.

JI: 449189

Dotted and dashed edge styles don't render when you're using GeoDeviceLocation.

JI: 449188

Dotted and dashed edge styles don't render when you're using GeoPolygon.

JI: 389904

When reading a URI tag that contains "pin", the BBM app doesn't handle the content of the tag, but the Smart Tags app does and invokes the URI.

JI: 284877

An established TCP connection over the cellular network interface fails when Wi-Fi is enabled on a device that is initially connected to a mobile network with Wi-Fi disabled.

JI:   86080

On the BlackBerry 10 Device Simulator, if you connect the windowGroupInvisible() and processStateChanged() signals and then minimize the app, neither signal is emitted.

JI:   85749

InvokeRequest::setMetaData() doesn't work correctly if a QByteArray as part of the QVariantMap is passed in.

Cascades UI framework

JI: 694886

In QListDataModel and ArrayDataModel, the signals itemAdded() and itemRemoved() are no longer sent when an item is moved. The new signal itemMoved() is sent instead.

JI: 388259

When you have a WebView and call storage()->clear(), the WebView storage is not cleared.
Workaround: Use a render fence to set up WebView storage after the WebView has been rendered.

JI: 381511

When the keyboard is displayed in an app (for example, if a user taps a text field), the transition of the page content is not in sync with the appearance transition of the keyboard.

JI: 149613

Calling QmlDocument::create() in a non-Cascades app may cause the app to terminate unexpectedly.

Back to Top

Core | Cascades

API reference versions

JI: -

In the C Library, some of the "Since" sections may not reflect the correct API level. This will be resolved in a future release.

Camera Library

JI: 863101

The function camera_get_supported_vf_frametypes() defined in camera_api.h is not implemented in the library. A camera_get_supported_vf_frame_types() function is implemented, but doesn't have a definition in the header file. To use the camera_get_supported_vf_frame_types() function, add a local definition.


JI: -

We are hard at work creating an awesome UI experience for you! While we are doing this, some references to the BlackBerry 10 UI, including screenshots, may not reflect what you see in the current software.

JI: -

In previous releases, the most recent version of the BlackBerry Platform Services library (libbps) was bundled with the Native SDK. This version was newer than the version on the target OS. To ensure the correct BPS library version was used by applications at run-time, projects in the Native SDK 1.0 would:

  • Use BPS headers from the $QNX_TARGET/../target-override location for compilation,
  • Link the from the $QNX_TARGET/../target-override location to generate the application executable, and
  • Package the from the $QNX_TARGET/../target-override location in the BAR.

JI: -

As of the Native SDK 2.0.0 release, BPS no longer resides in the target-override location. The BlackBerry 10 OS and BlackBerry 10 Native SDK versions of this library are in sync. If you have applications targeting BlackBerry 10 that you no longer want to support on PlayBook 1.0.x, you should remove the asset from bar-descriptor.xml and target the BlackBerry 10 version of the Native SDK. To verify, select the QNX page in the project properties dialog box. Otherwise, packaging of the BAR file will fail because it will not be able to find the file to include in the BAR.

JI: 393737

The BlackBerry 10 Native SDK documentation may not appear in Dynamic Help in the Momentics IDE. To access help topics from Dynamic Help, right-click a topic and click Open in Help Contents. Alternatively, you can always access the documentation by clicking Help > Help Contents in the IDE or by visiting the Documentation website.


JI: 616187

When you open an email, the time and date information overlap the sender's name.

JI: 578240

Sending a URL that ends with a closing bracket ')' or is followed by punctuation is not parsed correctly.

JI: 450995

If you save an EAS contact to your contact list and change the name, and you send an email to that contact, the name might change to the global name in the BlackBerry Hub.

Headless apps

JI: 709026

If you are using the headless app template, the headless app can't be started in Run-Release mode, because this mode requires a signed .bar file with the _sys_headless_nostop permission. However, you can still test a headless app in Device-Debug mode and apply for signing keys with that special permission and get your app signed once you're at the publishing stage.

JI: 708357

If you are debugging your headless app in the work space, you can't set a breakpoint in the constructor or the main.cpp file of the service part of your headless app. You can reach other breakpoints in the service part of your headless app while debugging in the work space, or you can debug the constructor by deploying your app in the personal space.

JI: 526899

If you install a headless app in the personal and the work perimeters, the trigger does not work in the second location where you installed the app.


JI: 394200

When you perform a software update, you must accept the security warning about installing unsigned software and continue the installation.

Back to Top

Known limitations

Cascades | Core


If you have McAfee Process Validation Service (Mfevpts.exe) installed and you try to install an autoloader, when you run the executable, there is a delay of several minutes before you see the installation window.

BBM Social Platform

Apps installed in the work space cannot access the BBM Social Platform. To connect to BBM, your app must be installed in the personal space.

When you retrieve the version number of the BBM Social Platform library that is running on a contact's device, the value returned might be unreliable if the device is running BlackBerry 10 OS version 10.2 or later.

Cascades Exporter plug-in for Adobe Photoshop

Cascades Exporter is not supported with Adobe Photoshop CC 2014 and later.

When using Cascades Exporter with an installation of Adobe Photoshop that uses French as the default language, a "Problem null" dialog box might be displayed when you export a project, indicating that the export process fails.

Cascades platform APIs

Multiple static map images cannot be loaded simultaneously. If you generate a map image of a location using MapImageGenerator, you must wait until the image is loaded successfully before generating another image. If a second request is made before the first request completes, the first request canceled. You can listen for the finished() signal to determine whether the image is available.

When you set a URL property for a QML object, file paths are case-sensitive when they should be case-insensitive. For example, “FILE:app/native/assets/contacts.json” and “file:app/native/assets/contacts.json” should be treated the same, but are not. Also, a URL that’s defined in QML may result in a URL that has part of the path duplicated.

In QML, the connect keyword cannot be used to connect the touch() signal of a Control to a function.

The ArrayDataModel::indexOf() function sometimes returns 3 in cases where it should return -1.

Cascades UI framework

Calling QmlDocument::create() in a non-Cascades app may cause the app to terminate unexpectedly.

If an implicit or explicit animation occurs immediately after an orientation change of the device, the animation does not play but instead jumps to its final position. For example, this issue may occur if animations are started from the rotationCompleted() or orientationChanged() signals.

QRC-based resources

If you are using QRC to improve performance in your apps, the new asset selection tool may affect your apps. If asset selection is used, an index file is generated automatically. However, this index file does not include contents that are only included in the QRC binary file. Instead, it lists only the files that reside in the assets directory in your project.

Workaround: Place a copy of QRC-compiled assets in your assets directory. The tool will then include these assets in the index file. When the device loads the app, the appropriate files in the binary are still used and the app continues to benefit from the performance gain of QRC.

Viewers in the invocation framework

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

Back to Top

Core | Cascades

BlackBerry ID and Signing Authority linking

If you do not register your signing key and your BlackBerry PlayBook debug token with the same client ID, an error will be thrown when you try to link your BlackBerry ID account with a Signing Authority account. A fix will be available in a subsequent release.


Applications using FreeType must add the following include path: $QNX_TARGET/usr/include/freetype2


If you save an EAS contact to your contact list and change the name, and you send an email to that contact, the name might change to the global name in the BlackBerry Hub.


If an app plays a media stream that's encrypted, the app won't allow video playback if an HDMI display is connected, due to security restrictions. This limitation will be resolved in a subsequent release.

There is a slight delay between tracks played as part of a playlist (approximately 0.5 seconds), even when the playlist includes only one track that is repeating.


  • The OpenAL 1.1 Specification and Reference incorrectly states that the function alcCloseDevice() will fail if the device's contexts and buffers have not been destroyed. alcCloseDevice() actually destroys any contexts and buffers still associated with the device.
  • The function alcGetIntegerv() does not throw an error when retrieving ALC_MAJOR_VERSION and passing an invalid device pointer.
  • The function alcGetString(device, ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER) throws an error when invoked after the device has been closed. It should return the default device and ignore the device parameter.
  • The OpenAL 1.1 Specification and Reference incorrectly states in the description of the function alcGetString(), "Specifying NULL for deviceHandle when asking for ALC_EXTENSIONS will generate an ALC_INVALID_DEVICE error." In fact, no error is generated.
  • The OpenAL 1.1 Specification and Reference incorrectly states in the description of the function alBufferData() that, "An invalid size will result in an AL_INVALID_VALUE error." In fact, calling alBufferData() with an invalid size does not cause the INVALID_VALUE error.
  • When the function alcMakeContextCurrent() is called with an uninitialized ALCcontext pointer, it correctly returns ALC_FALSE, but does not generate an ALC_INVALID_CONTEXT error.
  • The OpenAL Programmer's Guide - OpenAL Versions 1.0 and 1.1 incorrectly lists AL_INVALID_VALUE as a possible error returned by the functions alGenBuffers() and alGenSources() when the array is not large enough to hold the number of items requested. In fact, no error is generated.
  • The function alSource3f() does not throw an AL_INVALID_VALUE error when invalid numbers are passed as parameters. Apps should perform their own validity checking.
  • The function alSourcef() throws an AL_INVALID_VALUE error for valid values when using AL_CONE_INNER_ANGLE and AL_CONE_OUTER_ANGLE.
  • No error is thrown when the function alutLoadWAVFile() is called without a current context.
  • The function alutGetError() does not return ALUT_ERROR_ALC_ERROR_ON_ENTRY when there was already an ALC error on entry to alutLoadMemoryFromFileImage().
  • In the OpenAL Programmers Guide, AL_DATA is incorrectly documented as a valid buffer property. An attempt to retrieve this property through alGetBufferi() and alGetBufferiv() will result in an AL_INVALID_ENUM error.
  • The deprecated function alutLoadWAVMemory() does not return the expected values.
  • The function alGetListenerfv() does not generate an error when called with an invalid value. Apps should perform their own validity checking.
  • The following attributes are set by the device and cannot be altered using the attribute list of the function alcCreateContext(): ALC_FREQUENCY, ALC_REFRESH, ALC_SYNC, ALC_MONO_SOURCES, ALC_STEREO_SOURCES, and ALC_MAX_AUXILIARY_SEN.
  • The OpenAL 1.1 Specification and Reference incorrectly states that the function alGetEnumValue() sets the error code AL_INVALID_VALUE if the specified enumeration cannot be found. In fact, this error is not set when an invalid enumeration value is specified.
  • The OpenAL Programmer's Guide - OpenAL Versions 1.0 and 1.1 incorrectly states that the functions alcSuspendContext() and alcProcessContext() produce the error ALC_INVALID_CONTEXT when called with a null or destroyed context. However, no error is generated.
  • The function alListener3f() does not generate an error when called with a NULL value for the AL_VELOCITY attribute. Apps should perform their own validity checking.
  • The function ALCGetProcAddress() does not return addresses for the specified context extension functions, even for valid functions. It always returns NULL.
  • The function alSourceQueueBuffers() queues invalid buffers. If you pass a NULL buffer to this function, it will queue the buffer and not raise an error, even though the buffer is not valid.


BlackBerry 10 uses OpenSSL 1.0.1, with the following deviations from the standard implementation:

  • TLSv1.1 and TLSv1.2 support is disabled by default.
  • The heartbeat TLS extension has been disabled. This extension is described by RFC 6520, which is located at
  • The list of default SSL/TLS/DTLS ciphersuites has been altered.
  • Applications using SSL/TLS/DTLS connections get a default set of ciphersuites unless they explicitly specify which ciphersuites they want to support using SSL_CTX_set_cipher_list() or SSL_set_cipher_list().
  • The default set of ciphersuites has been changed to "ALL:!aNULL:!eNULL:!SRP:!SSLv2" which eliminates the SRP ciphersuites from the standard default set of ciphersuites provided by OpenSSL 1.0.1.
  • SSL_CTX_new(), which is used to create a new SSL_CTX object for TLS/SSL/DTLS negotiations, has been altered to disable TLSv1.1 and TLSv1.2 support by automatically setting the option SSL_OP_NO_TLSv1_1 and SSL_OP_NO_TSLv1.2.
  • TLSv1.1 and TLSv1.2 will be disabled by default when using SSLv23_method(), SSLv23_server_method(), or SSLv23_client_method(). Applications that need TLSv1.1 support can clear the SSL_OP_NO_TLSv1_1 option by calling SSL_CTX_clear_options(ctx, SSL_OP_NO_TLSv1_1) or can use one of the following TLSv1.1-only methods: TLSv1_1_method(), TLSv1_1_server_method(), or TLSv1_1_client_method(). Applications that need TLSv1.2 support can clear the SSL_OP_NO_TLSv1_2 option by calling SSL_CTX_clear_options(ctx, SSL_OP_NO_TLSv1_2) or can use one of the following TLSv1.2-only methods: TLSv1_2_method(), TLSv1_2_server_method(), or TLSv1_2_client_method().

Payment Service

When you use the BlackBerry 10 Device Simulator to test your apps, your apps cannot communicate with the BlackBerry World servers to test certain Payment Service features. To test Payment Service features on the simulator, you should use Local Mode testing.

If you need to test your apps by interacting with the BlackBerry World servers, you need to run the app on a physical device and use a BlackBerry ID in sandbox mode. For more information about testing apps that use the Payment Service, see Testing in-app purchases.

Back to Top


Native SDK 10.3 Release Notes

Native SDK 10.2 Release Notes

Native SDK 10.1 Release Notes

Native SDK 10.0 Release Notes

Back to Top

Last modified: April 16, 2015

  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.