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 beta 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 beta

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

You can install Momentics IDE 2.1.1 beta 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 beta 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 beta.

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 beta to a different location than your current IDE and continue to work in both versions.

To download and install Momentics IDE 2.1.1 beta and the 10.3.1 beta version of the BlackBerry 10 Native SDK using the installer:

  1. Download Momentics IDE 2.1.1 beta from the Downloads page.
  2. Run the installation file.
  3. Complete the installation by following the on-screen instructions.
  4. In Windows and Linux, in your Momentics IDE installation folder (for example, C:\bbndk), open the qde.ini file in a text editor.

    In Mac OS, right-click the Momentics app and select Show Package Contents. Navigate to Contents > MacOS and open the qde.ini file in a text editor.

  5. Append the following line to the qde.ini file:

    -DINSTALL_DESCRIPTOR_LOCATION=http://downloads.blackberry.com/upr/developers/

    update/bbndk/install_descriptor_10_3_1_beta.xml

    Make sure the text is added on one line in the qde.ini file.

  6. 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.
  7. In the API Levels dialog box, click Beta and select the 10.3.1 beta API level.
  8. Click Install.
  9. When the API level finishes installing, click OK.

Using the Momentics IDE


If you're upgrading using the Momentics IDE, you must update the IDE and SDK.

To update the IDE and SDK, in the Momentics IDE, complete the following:

  1. In Windows and Linux, in your Momentics IDE installation folder (for example, C:\bbndk), open the qde.ini file in a text editor.

    In Mac OS, right-click the Momentics app and select Show Package Contents. Navigate to Contents > MacOS and open the qde.ini file in a text editor.

  2. Append the following line to the qde.ini file:

    -DINSTALL_DESCRIPTOR_LOCATION=http://downloads.blackberry.com/upr/developers/

    update/bbndk/install_descriptor_10_3_1_beta.xml

    Make sure the text is added on one line in the qde.ini file.

  3. 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.
  4. In the API Levels dialog box, click Beta and select the 10.3.1 beta API level.
  5. Click Install.
  6. When the API level finishes installing, click OK.

For more information about API levels

For Cascades, see API levels in Build, test, and deploy your app.
For core, see API levels in Using the Momentics IDE.

Targeting multiple API levels

If you're using the 10.3.1 beta 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, click Gold or Beta and select the API level that you want.
  3. Click Install.
  4. 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

Highlights

 

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.

PIM

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 UI framework


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.

Effects

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:

Navigation

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

Cascades platform APIs


Hardware information

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:

Permissions

Added the following features to permissions:

  • 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.

For more information, see Available permissions.

Personal information management (PIM)

Added the following features to the PIM APIs:

  • 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.

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:

  • NAVIGATOR_SYSKEY_PRESS

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

  • NAVIGATOR_SYSKEY_SEND
  • NAVIGATOR_SYSKEY_END
  • NAVIGATOR_SYSKEY_BACK

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.

Documentation


Multimedia

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.

OpenMAX AL


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


SmartCardCryptoProvider.hpp

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

sc_crypto_system.h

Added the following functions:

sc_smart_card.h

Added the following functions that support key generation and management:

Support for BlackBerry Classic


Trackpad

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.

Navigation keys

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

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


vpn_ext_api.h

Added the following function:

  • vpn_ext_register_service_no_deamon()

Back to Top


Changes in this release

Cascades | Core

Documentation


Near Field Communication

Near Field Communication has been updated to include a description of NFC concepts and supported NFC functionality. It also includes an overview of the NFC C API. For more information, see Near Field Communication.

Cascades UI framework

Contact pickers

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.

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.

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

Web

The WebSettings class provides new functions 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.

The WebPage class provides two new functions 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.

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

Back to Top


Core | Cascades

Documentation


Near Field Communication

The Near Field Communication documentation has been updated to include an overview of the Cascades NFC API.

NFC Library


nfc.h

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

nfc_se_access.h

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

OpenSSL


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: 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.

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

Camera


JI: 591369

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

Documentation


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

General


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.

Back to Top


Known issues

Cascades | Core

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: 689088

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

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: 505518

If you connect a device using the WiFiDirectIntent::GroupOwner, a signal is emitted by WiFiDirect with the parameter intent = WiFiDirectIntent::Any instead of intent = WiFiDirectIntent::GroupOwner.

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: 150783

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

JI: 150357

The ArrayDataModel::move() function does not work as expected.

JI: 149929

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.

JI: 146568

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

JI: 144760

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

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.

JI:   85463

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

JI:   84881

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.

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: 381185

When calling clear() on an empty ArrayDataModel, the itemsChanged() signal is emitted.

JI: 381402

StandardListItem renders text from right-to-left languages left justified.

JI: 150377

When creating CustomControl objects, the Container that is set as the root is being wrapped by a phantom Control.

JI: 149804

Using a DropDown control and trying to remove the option at index 0 while the option at index 1 is selected may cause the app to terminate unexpectedly.

JI: 149613

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

JI: 149509

The setKey() function in the Shortcut class can erroneously accept invalid strings (for example, strings that don't correspond to an acceptable shortcut).

JI: 148647

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.

JI: 148249

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.

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.

Documentation


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 libbps.so from the $QNX_TARGET/../target-override location to generate the application executable, and
  • Package the libbps.so 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 libbps.so.1 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 libbps.so 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.

General


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.

Installation


JI: 394200

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

OpenAL


JI: 403249

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

Back to Top


Known limitations

Cascades | Core

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.

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.

FreeType


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

Multimedia


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.

OpenAL


  • 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.

OpenSSL


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 http://www.rfc-editor.org/rfc/rfc6520.txt.
  • 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


Core

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: October 06, 2014

  1. 1. Choose your focus

    This is the focus controller. Use this controller to choose your primary development approach (Cascades or Core).

    By selecting a focus, you get to decide what content should be front and center on the site.

  2. 2. 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.

  3. 3. 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 check boxes to display the samples relevant to your focus.

  4. 4. Educate yourself

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

    The documentation for your preferred focus always appears at the top of the left-hand navigation, but you can still access the rest of the documentation at the bottom.

  5. 5. 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.