Releases: braze-inc/braze-swift-sdk
Releases · braze-inc/braze-swift-sdk
13.0.0
13.0.0
Breaking
- Extends the functionality of
BrazeSDKAuthDelegate.braze(_:sdkAuthenticationFailedWithError:)
to be triggered for "Optional" authentication errors.- The delegate method
BrazeSDKAuthDelegate.braze(_:sdkAuthenticationFailedWithError:)
will now be triggered for both "Required" and "Optional" authentication errors. - If you want to only handle "Required" SDK authentication errors, add a check ensuring that
BrazeSDKAuthError.optional
isfalse
inside your implementation of this delegate method.
- The delegate method
- Fixes the usage of
Braze.Configuration.sdkAuthentication
to take effect when enabled.- Previously, the value of this configuration was not consumed by the SDK and the token was always attached to requests if it was present.
- Now, the SDK will only attach the SDK authentication token to outgoing network requests when this configuration is enabled.
- The setters for all properties of
Braze.FeatureFlag
and all properties ofBraze.Banner
have been madeprivate
. The properties of these classes are now read-only. - Removes the
Braze.Banner.id
property, which was deprecated in version11.4.0
.- Instead, use
Braze.Banner.trackingId
to read a banner's campaign tracking ID.
- Instead, use
Added
- Adds the boolean field
optional
toBrazeSDKAuthError
to indicate if it is an optional authentication error.
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.