Releases: braze-inc/braze-swift-sdk
Releases · braze-inc/braze-swift-sdk
12.1.0
12.1.0
Added
- Adds optional
imageAltText
andlanguage
fields to UI classes and structs associated with Content Card and In-App Message campaigns for improved accessibility.- The
imageAltText
field contains the image accessibility alt text (if any) for the image or icon in a given campaign. The SDK's default UI will use this field to inform how VoiceOver narrates the image portion of a campaign - The optional
language
field is a BCP 47 tag. If it is present, VoiceOver will use the corresponding language narrator when reading the campaign. Otherwise, the user system default settings will be used. - These are the classes and structs with
imageAltText
andlanguage
:Braze.ContentCard.ClassicImage
Braze.ContentCard.ImageOnly
Braze.ContentCard.CaptionedImage
Braze.ContentCardRaw
(BRZContentCardRaw
in Objective-C)Braze.InAppMessage.Slideup
Braze.InAppMessage.Modal
Braze.InAppMessage.ModalImage
Braze.InAppMessage.Full
Braze.InAppMessage.FullImage
Braze.InAppMessageRaw
(BRZInAppMessageRaw
in Objective-C)Braze.ContentCard.Classic
has thelanguage
field only
- The
- Adds provisional support for Xcode 26 Beta via the
braze-inc/braze-swift-sdk-xcode-26-preview
repository.- Full support will be added to the main repository closer to the public release of Xcode 26.
- For any compatibility issues discovered while using the Xcode 26 Beta, submit a GitHub issue on the main repository.
12.0.3
12.0.3
Fixed
- Fixes the Banner rendering incompatibility with iOS 18.5+ while maintaining the correct URL redirect behavior.
- Banners can now successfully render on iOS 18.5+ without compromising click action functionality.
- See the changelog entries for versions 12.0.1 and 12.0.2 for further details.
12.0.2
12.0.1
12.0.1
Fixed
- Fixes an issue where setting
configuration.forwardUniversalLinks = true
would not properly forward universal links to the system APIs in some cases.- The SDK now verifies that the system APIs are implemented (either in your
UIApplicationDelegate
orSceneDelegate
) before forwarding the universal link. - When multiple implementations are found, the SDK favors the
SceneDelegate
implementation over theUIApplicationDelegate
implementation.
- The SDK now verifies that the system APIs are implemented (either in your
- Fixes an issue when configuring
Braze.Configuration.Push.Automation.authorizationOptions
with the.provisional
option.- Previously, the
.provisional
option was also applied for push primer in-app messages. This resulted in no push notification permission prompt being shown to the user. - With this change, push primer in-app messages will request push notification permissions using only the
.alert
,.badge
, and.sound
options, ensuring that the system prompt is presented to the user.
- Previously, the
- Fixes an incompatibility with iOS 18.5 where Banners would not render.
- Previously, the Banner view would be added to the view hierarchy with a height of 0 but never successfully load the HTML content.
- Banner views will no longer trigger superfluous
about:blank
URLs upon initial load.
12.0.0
12.0.0
Breaking
- The distributed static XCFrameworks now include their resources directly instead of relying on external resources bundles.
- When manually integrating the static XCFrameworks, you must select the Embed & Sign option for each XCFramework in the Frameworks, Libraries, and Embedded Content section of your target's General settings.
- No changes are required for Swift Package Manager or CocoaPods integrations.
Fixed
- Fixes an App Store validation issue where Braze's libraries privacy manifests would fail to be detected when integrating the SDK as static XCFrameworks.
- Fixes
BrazeKitCompat
ABKContentCard.expiresAt
to return the correct expiration date.- Previously,
ABKContentCard.expiresAt
would always return0
.
- Previously,
- Fixes an issue where the
Braze.FeatureFlags.subscribeToUpdates(_:)
update closure was being called immediately after callingchangeUser(userId:)
instead of waiting for the next feature flags sync result. - Fixes an issue where
Braze.ContentCards.subscribeToUpdates(_:)
would not call the update closure whenever a sync occurred without any changes in the Content Cards data.- Previously, the update closure would only be called when the sync resulted in a change.
- Fixes the
Braze.User.set(dateOfBirth:)
method to report dates using the Gregorian calendar instead of the device's current calendar setting.- Previously, the SDK would override input dates and formats if the device's calendar settings were non-Gregorian.
- With this change, you will still need to ensure that dates provided to
set(dateOfBirth:)
are generated with the Gregorian calendar, but the Braze SDK will no longer override their formats inadvertently.
- Enhances the
braze.wipeData()
function to send a final update to all registered channel subscribers, notifying them of the data wipe.- This update ensures that any UI components utilizing the channel's data are properly dismissed and cleaned up.
- For instance, if an in-app message is currently displaying as
braze.wipeData()
is called, the message will be removed from display.
- Fixes
braze.user.id
not resetting tonil
after callingbraze.wipeData()
.- Internally, the user identifier was properly reset, but the public
braze.user.id
property was not updated to reflect this change.
- Internally, the user identifier was properly reset, but the public
Added
- Adds the
BrazeInAppMessagePresenter.dismiss(reason:)
optional protocol method.- This method enables the SDK to inform the in-app message presenter when an in-app message should be dismissed due to an internal SDK state change.
- Currently, this method is triggered only by calling
braze.wipeData()
. BrazeInAppMessageUI
implements this optional method and dismisses the in-app message when triggered.
11.9.0
11.9.0
Added
- Adds
Braze.LiveActivities.pushToStartTokenUpdatesStream: AsyncStream<Braze.LiveActivities.PushToStartTokenUpdate>
, an asynchronous stream which publishes updates pertaining to the Live Activities push-to-start token lifecycle.- See
Braze.LiveActivities.PushToStartTokenUpdate
for all varieties of update events published by the stream.
- See
- Adds dSYM files to the dynamic and mergeable variants of the Braze SDK XCFrameworks.
- This addresses an App Store submission validation warning when using Xcode 16.0 or later.
Fixed
- The SDK Debugger tool will now capture logs even when
Braze.configuration.logger.level
is.disabled
and no SDK logging occurs locally.- This aligns the Braze Swift SDK Debugger Tool behavior with that of the Debugger Tool on the Braze Android SDK.
- Sets the default background of
BannerUIView
to be transparent. - Renames the
VisibilityTracker.displayLinkTick
method toVisibilityTracker.brazeDisplayLinkTick
in BrazeUI to avoid potential naming conflicts with private system methods.
11.8.0
11.8.0
Added
- Network requests made by the SDK to the Braze Live Activities
/push_token_tag
endpoint will now be retried in the case of a request failure. - Expands customizability options of custom endpoints passed when initializing a
Braze
instance.- You can now specify a base path to be used for SDK network requests (i.e. "example.com/mockServer").
http
schemes are now supported for use by custom endpoints (i.e. http://example.com). Previously, onlyhttps
schemes were supported.
Fixed
- Fixes an issue where in-app messages would not always be triggered when sending Braze requests to the tracking endpoint. This occurred when both of the following conditions are true:
- The
Braze.Configuration.Api.trackingPropertyAllowList
did not include the.everything
type. - All other
Braze.Configuration.TrackingProperty
types were manually listed in thetrackingPropertyAllowList
.
- The
- Improves the rendering behavior of Banner Cards embedded in a scroll view on hybrid development frameworks.
- Fixes the Banner Card view to prevent drag gestures from exposing the background of the HTML content.
- Fixes an issue on the Braze web view bridge where numeric values of
1
or0
would be incorrectly reported astrue
orfalse
, respectively.
11.7.0
11.6.1
11.6.1
Fixed
- Improves the reliability of collecting Live Activity push-to-start tokens on calling
registerPushToStart
:- Push-to-start tokens will now flush to the server immediately as soon as they are retrieved.
- Push-to-start tokens will now be read immediately from the
pushToStartToken
property as soon asregisterPushToStart
is called, in addition to the existing behavior where an observable is set up to monitor new tokens.
- Resolves issues with the SDK's internal state for devices that were previously affected after restoring from another device's iCloud or iTunes backup.
- Previously, these devices would incorrectly inherit the device ID from the original device.
- With this update, the SDK now generates a unique device ID for each restored device, ensuring proper identification and functionality.
- This update follows up on the
11.6.0
fix, which prevented the issue from occurring on future backups.
11.6.0
11.6.0
Fixed
- Fixes the behavior in the Braze-provided UI for Banner Cards where content would not automatically be cleared from the UI when changing to a user that was not eligible for that campaign.
- Changes the behavior of
Braze.Banners.subscribeToUpdates(_:)
to match behavior of the corresponding API on the Braze Android SDK.- Upon calling
Braze.Banners.subscribeToUpdates(_:)
, the update handler closure will only be called if a banners sync has succeeded during the current user session.- Previously, calling
Braze.Banners.subscribeToUpdates(_:)
would always result in the update handler being called one time immediately.
- Previously, calling
- Upon successfully completing a banners sync,
Braze.Banners.subscribeToUpdates(_:)
will call its registered update handler even if the sync result is identical to the last successful sync.
- Upon calling
- Changes the behavior of
Braze.Banners.bannersStream
to match behavior of the corresponding API on the Braze Android SDK.Braze.Banners.bannersStream
will now only emit an update immediately upon access if a banners sync has succeeded during the current user session.- Previously, accessing
Braze.Banners.bannersStream
would always emit one update immediately.
- Previously, accessing
- Upon successfully completing a banners sync,
Braze.Banners.bannersStream
will emit an update even if the sync result is identical to the last successful sync.
- JavaScript bridge methods expecting number arguments now also accept string representations of numbers.
- This change aligns the behavior of the Swift SDK with the behavior of the Web SDK.
Added
- Adds an optional method
removeBannerContent
to theBrazeBannerPlacement
protocol. - Locally persisted Braze SDK data will no longer transfer during OS backups. This resolves an issue introduced in
6.2.0
.