iOS Release Notes
- The Support library generates tokens for sandbox domains with user authentication disabled. These tokens are now more tolerant of clock synchronization differences between client endpoints and the BlackBerry Infrastructure.
BBMEMediaManagerclass has been renamed to
BBMEMediaDelegateprotocol has been renamed to
BBMECallclass has been renamed to
Headers for the above classes include
typedefaliases with the old names for backwards compatibility. You will need to update your application if it imports the specific
BBMEnterpriseframework headers for these classes using the old names.
- Voice and video call functionality from the RichChat example application has been moved to the Support library. You can use and extend this functionality to easily add voice or video call support to your application.
The minimum supported iOS version is now iOS 11.0. Thus, 32-bit
architectures are no longer included in the
BBMEnterprise.frameworkbundles because iOS 11 supports only 64-bit devices. Any references to
i386must be removed from your application's supported architectures. Note that the SDK still includes separate development and release frameworks. The framework in the
sdk-releasefolder only includes only the
arm64architecture while framework in the
sdkfolder includes both
x86_64architectures for both device and simulator support.
globalSyncingvalue indicates when the SDK is performing reconnect synchronization with the BlackBerry Infrastructure. Your application should ensure that the SDK remains active while the
privateDatavalue of a chat to share chat metadata that needs to be known by all the local user's endpoints.
- The iOS example applications and Support library now support sandbox domains that have user authentication disabled. See the Download & Configure page for instructions on how to set up such a domain.
- Most example applications no longer require you to install CocoaPods.
- The iOS example applications now support using Google People for User Management.
All exported string constants for global states now support the
==comparison operator in lieu of
Chatflag has been removed. All chats are always in a protected state.
BBMChatStartMessageconstructor no longer includes the subject parameter. The subject can optionally be set using the subject property.
- Various bug fixes and performance improvements.
- All example applications can be configured to use the BlackBerry Key Management Service. For more information see: BBMSyncPasscodeChangeMessage, BBMSyncStartMessage, BBMSyncPasscodeChangeResultMessage, BBMUserKeysChangedMessage.
- Chat Message Destroy allows deleting a message or a whole chat by using the new message BBMChatMessageDestroyMessage.
- Synchronized custom data on a Chat allows sharing metadata that changes infrequently with other chat participants by using the new data field in BBMChat.
- Typing Notifications allow informing other users about different kinds of typing actions by using the message BBMChatTypingMessage.
The example applications are now configured via the
ConfigSettings.plistfile. There are guides for Configuring iOS Examples to use Azure Active Directory or Configuring iOS Examples to use Google Sign-In and Google People.
- All examples have been updated for xCode 9 and Swift 4.
API Changes and Deprecations
- BBMEnterpriseService sendAuthToken:forUserName:setupStateBlock has been deprecated. Use sendAuthToken:userIdentifier:setupStateBlock instead.
The property incomingExternalCallCallback
BBMEMediaManagerhas been deprecated. Now CXCallObserver should be implemented directly in the application to be notified of incoming and outgoing calls.
- BBMChat has new data property to share metadata that changes infrequently with other chat participants.
- A new global value globalSyncPasscodeState has been added to track passcode sync state when the setupState is 'SyncRequired'.
- BBMChatMessageDestroyMessage has been added to BBMMessages.h to allow destroying a chat message.
- BBMChatStartMessage has a new data property to share metadata that changes infrequently with other chat participants.
- BBMChatTypingMessage has a new messageId property to indicate what message the action is directed to. A new tag property is added to specify what kind of typing action the user is performing.
- BBMIdentitiesGetMessage has been added to BBMMessages.h to allow getting a list of identities.
- BBMSyncPasscodeChangeMessage has been added to BBMMessages.h to allow changing the passcode when BlackBerry Key Management Service is used.
- BBMSyncStartMessage has a new action property to indicate whether the passcode is being used to try to unprotect existing keys or to protect new ones.
- BBMChatStartFailedMessage has a new chatId that contains the id of the chat if the reason is 'AlreadyExists'.
- BBMEndpointDeregisteredMessage has been added to indicate that an endpoint has been deregistered.
- BBMIdentitiesMessage has been added to allow the application to receive a response after requesting the list of identities.
- BBMSyncPasscodeChangeResultMessage has been added to allow the application to receive a response after requesting a sync passcode change.
- BBMUserKeysChangedMessage has been added to allow the application to be notified about any key changes when using BlackBerry Key Management Service.
Various bug fixes and documentation improvements.
Transfer A generalized peer-to-peer data transfer API
has been added to
BBMEMediaManager. The Data Transfer API allows the establishment of multiple secure channels to transfer arbitrary data directly between peers.
- Support Library: UI Widgets The Support Library now includes several reusable UI widgets as well as other related code and utilities. Refer to the RichChat application for an example of how to integrate this code into your application.
- Support Library: Analytics The Support Library now includes BBMAnalyticsReporter which can be used to gather and report usage and other information about your application.
- The Support library now supports Azure Active Directory as your Identity Provider, Azure Active Directory for User Management, and Azure Cosmos DB for Cloud Key Storage. Azure support has also been added to Rich Chat, Quick Start, and other example applications.
- The BBM Enterprise SDK now encrypts all private keys in each example. For more information see Cloud Key Storage
API Changes and Deprecations
- BBMChat has new kBBMChat_StateRestore state defined in BBMChatState enum.
- BBMChat has new numUnread property that tells the number of unread messages in a chat.
- BBMChatCriteria now allows searching by mailboxId.
- BBMChatMessage has new localData field to append data to chat message locally.
- BBMChatMessage has new ref and refBy fields that allow referencing other messages. See BBMChatMessage_Ref and BBMChatMessage_RefBy for more details.
- BBMChatMessageSendMessage has a new ref field to create message references.
- BBMChatMessageCriteria now has a ref field that allows searching for referenced messages.
- File transfer progress is now available via BBMChatMessageCriteria.
- BBMChatParticipantCriteria now allows searching by userUri and state.
- BBMDSGeneratedModel has a new chatMessageFileProgress property to access file transfer progress. The new field stat gives analytics information. A new global value globalChatMessageFileAutoDownload has been added to allow control over when attachment downloads should happen. A new global globalRegistrationToken has been added.
- Removed BBMGetMessageStatusResultMessage and BBMGetMessageStatusResultMessage_StatusDetails from BBMIncomingMessages.h
- Message delivery times can be fetched by sending a BBMChatParticipantTimesGetMessage and a BBMChatParticipantTimesMessage will be received with the results.
- The messages BBMDeleteMessageMessage, BBMGetMessageStatusMessage, BBMMessageStatusMessage, BBMRecallMessageMessage, BBMStopConversationMessage, BBMStopConversationMessage_Conversations and BBMTypingNotificationMessage have been removed from BBMMessages.h
- BBMStatsCommittedMessage can be used to reset the new stat list added to BBMDSGeneratedModel. See the new class BBMStat for more details.
- globalHasNewMessage has been deprecated and will be removed in a future release.
New Example Applications
- Data Transfer The DataTransfer example shows how to use peer-to-peer data connections to send files, data or streams of data.
- Chat Poll The Chat Poll example demonstrates the usage of message references to associate and group messages within a chat.
- Multiple Points of Presence The BBM Enterprise SDK now allows applications to have multiple instances running and connected at the same time for the same user. Each endpoint will receive messages and voice and video calls.
- Chats now support having administrators and InvitePolicies. Chat administrators can remove participants or delete a chat from all users devices. The invite policy can be set to allow invites only by the administrator.
The R4 BBM Enterprise SDK is packaged as a dynamic framework. Rather than
statically linking the framework, you must now add it to the "Embedded
Binaries" section of your main application target. Two versions of the SDK
framework are provided. The folder
sdkincludes arm64, armv7 and i386 architectures and is suitable for development (including the iOS simulator). The folder
sdk-releaseincludes only arm64 and armv7 and is suitable for submission to the App Store.
- It is no longer necessary to compile BBMLog.m and BBMLog.h in your client. These must be removed. They are now part of the BBM Enterprise SDK.
- It is no longer necessary to include the ca.pem file in your target. It is included in the BBM Enterprise SDK framework. This file must be removed from your build targets.
- You can now set the log level via
[[[BBMEnterpriseSerivice service] setLogLevel:level]to a "verbose" setting. The verbose setting is available only when using the sandbox environment as it will log security sensitive data such as raw outbound messages. Verbose logging will provide additional information in all logs to help troubleshoot issues.
- Runtime Exceptions will now be thrown for API misuse. You should not catch and handle these exceptions. These indicate a logic error that must be corrected. The new exceptions include warnings related to tracking Observable properties on background threads, attempting to add message listeners before the BBMEnterpriseService has been started, or attempting to set unsafe log levels when using the production service.
- The R4 BBM Enterprise SDK now supports Swift. See the SoftPhone and QuickStartSwift example application for tips on integrating with your Swift application.
Supported iOS Versions
- The iOS Deployment Target for the BBM Enterprise SDK has been changed from 8.1 to 9.0. Clients will need to update their own deployment target to 9.0 or later in order to continue using the BBM Enterprise SDK.
- All internal BBM Enterprise SDK logs are now saved to bbmsdk.txt inside of <sandbox>/Library/bbm/logs. A maximum of 4 archived log files (bbmsdk.0.txt, bbmsdk.1.txt, etc) up to 1mb in size will be persisted.
- BBMEnterpriseService setLoggingMode: allows you to configure logging to echo to either the console, file or both
- BBMLog.m and BBMLog.h are no longer part of the BBM Enterprise SDK package and can be removed from your build target(s).
- ObservableMonitor and ObservableTracker will now throw an ObservableTrackerMisuse Exception if they are used incorrectly in a multithreaded scenario. See the ObservableTracker and ObservableMonitor documentation for correct usage.
- BBMEnterpriseService addListener:forMessageNames: and addListenter:forMessageTypes: will now throw a BBMEnterpriseServiceMisuseException if listeners are added before the service is started.
API Changes and Deprecations
- The BBMConnection class and the connection property on BBMEnterprise service are no longer available. The "model" property and "readWriteLock" methods previous found on BBMConnection are now properties of BBMEnterpriseService.
- Incoming BBMDS messages can now be intercepted directly using BBMDSIncomingMessageListener via BBMEnterpriseService.
- Incoming BBMDS messages are now Objective C classes rather than the raw BBMDS JSON. See BBMIncomingMessages.h
- BBMPlatformService and BBMServiceLayer have been deprecated. All functionality found in these classes is now available via methods in BBMEnterpriseService.
- The displayName property has been removed from the BBMUser class. Previously this value was always empty. This change also resulted in the removal of BBMProfileChangeMessage and displayName being removed from BBMChatInviteMessage, BBMChatStartMessage, BBMSearchMessage, and BBMSearchResultsMessage.
- The ChatMessage and Participant maps now support composite keys. You request elements from these maps using the BBMChatMessageKey and BBMParticipantKey objects rather than manually constructing concatenated strings. See BBMLiveMapKeys.h
- Generated classes that previously had a "flags" property will now also have an "is<Property>FlagSet" method for each possible flag.
- All values in the globals map can now be queried
directly from the model rather than valueForKey:. For
[[[BBMEnterpriseSerivice service] model] globalLocalUri]
- User lookup can now be done via userWithRegId: from the
BBMuser *theUser = [[[BBMEnterpriseSerivice service] model] userWithRegId:regId]
- BBMSecureCallStatus enum values have been renamed to better reflect their meaning
BBMEMediaManagerno longer automatically hangs up BBME calls when there is another incoming phone call. The property incomingExternalCallCallback has been added to allow custom handling of incoming phone call events.
BBMEMediaManagernow supports limited interaction with iOS CallKit. The native iOS call UI may be used to answer incoming calls over the lock screen or when your application is inactive.
- kCallInvitePushKey and kNewMessagePushKey have been renamed to kBBMCallInvitePushKey and kBBMNewMessagePushKey respectively.
- BBMChat isOneToOne has been migrated to BBMChat isOneToOneFlagSet and retains the same usage definition.
- BBMDeleteMessageMessage is deprecated and replaced with BBMChatMessageDeleteMessage. BBMChatMessageDeleteMessage is identical to BBMDeleteMessageMessage but replaces the conversationUri with a chatId.
- BBMStopConversationMessage is deprecated and replaced with BBMChatHideMessage and BBMChatLeaveMessage. BBMChatHideMessage and BBMChatLeaveMessage replace the BBMStopConversationMessage with the "Hide" and "Leave" actions respectively.
- BBMMessageStatusMessage is deprecated and replaced with BBMChatMessageReadMessage. BBMChatMessageReadMessage simplifies BBMMessageStatusMessage by removing the status parameter.
- BBMRecallMessageMessage is deprecated and replaced with BBMChatMessageRecallMessage. BBMChatMessageRecallMessage is identical to BBMRecallMessageMessage but replaces the conversationUri with a chatId.
- BBMGetMessageStatusMessage is deprecated and replaced with BBMChatMessageStateGetMessage. BBMChatMessageStateGetMessage is identical to BBMGetMessageStatusMessage but replaces the conversationUri with a chatId.
- BBMGetMessageStatusResultMessage is deprecated and replaced with BBMChatMessageStateMessage.
- BBMTypingNotification is deprecated and replaced with BBMChatTypingMessage. BBMChatTypingMessage is identical to BBMTypingNotification but replaces the conversationUri with a chatId. It is no longer required to send a message to indicate that a user has stopped typing, this will be handled internally.
is supported by
BBMMediaManagerThis allows direct integration with the iOS Phone UI so that UILocalNotification is no longer needed to indicate an incoming call. A reference implementation is provided in the SoftPhone example.
BBMMediaManagernow provides and incomingExternalCallCallback to allow you to customize the handling of incoming cell calls.
BBMCalltelemetryData is deprecated. This will always return an empty string.
- Common example application code has been moved to the Support library. This library contains several helper classes and methods that can be used directly in your applications.
- Key management simplified via BBMKeyManager. BBMKeyManager is part of the Support library and will automatically synchronize keys when required via a supplied BBMKeyStorageProvider.
New Example Applications
- The Quick Start example application has been added to demonstrate the basics of starting and configuring the BBM Enterprise service and authenticating a user.
- The Simple Chat example application has been added to demonstrate how to implement basic messaging functionality with the BBM Enterprise SDK.
- The Location Sharing example application has been added to demonstrate how you can use the BBM Enterprise SDK with custom message types to share non-messaging type data between a group of users.
- The SoftPhone example application has been added to demonstrate how to implement Voice and Video functionality into your application and to show how to integrate the BBM Enterprise SDK with a Swift based application.
- Improvements, corrections and additions to the API documentation
The first release of BBM Enterprise SDK for iOS