github braze-inc/braze-swift-sdk 17.0.0

5 hours ago

17.0.0

Breaking
  • Braze.init and changeUser(userId:) no longer block the calling thread.
  • The following properties now block the calling thread until the SDK has settled, ensuring they reflect the latest user state immediately after changeUser or Braze.init:
    • braze.user.id
    • braze.deviceId
    • braze.contentCards.cards
    • braze.contentCards.unviewedCards
    • braze.contentCards.lastUpdate
    • braze.featureFlags.featureFlags
    • braze.featureFlags.featureFlag(id:)
    • For UI and other latency-sensitive code paths, prefer the asynchronous getters (getCachedContentCards(_:), getUnviewedCards(_:), getLastUpdate(_:), getAllFeatureFlags(_:)).
  • braze.user.id now returns nil after calling wipeData().
    • Previously, braze.user.id continued to return the last user ID after wipeData().
    • This matches the Swift SDK's behavior with that of the Android SDK.
  • changeUser now notifies Braze.ContentCards.subscribeToUpdates(_:) subscribers after a user switch, matching the existing Android SDK behavior.
    • Previously, subscribers were not notified until the next Content Cards sync.
  • Removes the deprecated push-to-start token update API on Braze.LiveActivities.
    • Removes the deprecated Braze.LiveActivities.PushToStartTokenUpdate enum and the pushToStartTokenUpdatesStream property.
    • Use subscribeToStateUpdates(_:) instead, which delivers the push-to-start token lifecycle events (UpdateEvent.ActivityType.pushToStartTokenRead, .pushToStartTokenFlushed, .pushToStartOptedOut, .pushToStartOptOutFlushed) as part of the complete Live Activities lifecycle in a single subscription.
Added
  • Adds non-blocking asynchronous accessors for user and device identifiers:
    • Braze.User.getId(_:) and Braze.User.getId() async — deliver on the main thread.
    • Braze.getDeviceId(_:) and Braze.getDeviceId() async — deliver on the main thread.
    • ObjC bridges: getIdWithCompletion: and getDeviceIdWithCompletion:.
    • Prefer these over the synchronous properties on the main thread or in @MainActor contexts.
  • Adds an sdkDisabled error on Braze.ContentCards.requestRefresh(_:), Braze.FeatureFlags.requestRefresh(_:), and Braze.Banners.requestBannersRefresh(_:). When the SDK is disabled, these now invoke their completion handler with .sdkDisabled instead of leaving it uncalled.

Don't miss a new braze-swift-sdk release

NewReleases is sending notifications on new releases.