Skip to content

Changelog#

11.2.0 - 21.01.2026#

New Features#

  • Added startedAware Story ordering mode that groups Stories by progress: unread → in progress → completed. This feature is gated behind the pageReadStatus functional feature flag

Improvements#

  • Skipped Story analytics event is no longer fired when the user is on the last page of a story, as navigating from the last page is not considered a "skip". See Analytics for details
  • Improved experience of resuming Stories that were previously opened or fully viewed

Bug fixes#

  • Fixed LIVE chip overlapping story title and incorrect corner radius on circular tiles when using large Dynamic Type with automatic row height
  • Fixed Clips bottom banner ads rendering cut off after rotating the device
  • Fixed Story resume selection to use array indices and filtered empty Stories to prevent crashes in Story opens and deeplinks
  • Fixed an issue where the Search results page could be overlapped by Search suggestions when tapping outside of the text field

11.1.0 - 26/12/2025#

Breaking Changes#

  • Updated StorytellerTileType to include categories: [StorytellerCategoryDetail] for both .clip and .story cases in StorytellerListViewDelegate.onTileTapped(type:). For more information, see onTileTapped

New Features#

  • Added support for Non Skippable Ads. For more information, see Non Skippable Ads
  • Added setCustomAttributes(_:) method to StorytellerUser for setting multiple custom attributes at once by overwriting current ones
  • Implemented support for the customLiveChipText parameter for Story Tiles, allowing configuration directly via the CMS
  • Added support for showing Banner Ads at the bottom of the Clips Player. See Ads for more information
  • When the Player volume is 0, it will now be treated as muted. The isMuted property in analytics events will be set to true
  • Like and Share values on the Clips Player can now be hidden, controlled through the CMS

Bug fixes#

  • Fixed an issue where rapid swiping through clips could cause new clips to be inserted before the currently viewed clip
  • Fixed UI issues in the WebView on iOS 26
  • Fixed an issue where calling Storyteller.shared.openCollection with a destination parameter was being ignored
  • Fixed an issue where the Stories Rows and Grids themes were not applied to the Instructions screen
  • Fixed an issue where the Poll Answer View did not occupy the full available width
  • Fixed a case where the Story Player close animation would target the center of the screen instead of the proper Story Tile
  • Fixed an issue where a native video ad might use an incorrect duration from the GAM module
  • Fixed an issue where the Clips Player close animation targeted the tile instead of the center of the screen when an Ad was displayed
  • Fixed an issue where Ad Banners were not accessible when VoiceOver mode was active
  • Constrained round tile live chip custom images to not overflow the tile's bounds and resize to fit
  • Fixed several tvOS focus issues while navigating through the lists and after dismissing the Player
  • Fixed an issue where currentCategory could be missing in analytics for Stories lists configured with the following category
  • Fixed an issue where embedded clips could have no sound or fail to resume playback after dismissing a player presented on top
  • Fixed issues with the Followable Category button where it could remain in a pressed state after a cancelled swipe and the icon was not respecting the theme color

11.0.5 - 24/11/2025#

Bug fixes#

  • Fixed an issue where analytics could report a story’s category instead of the configured list category for the currentCategory property

11.0.4 - 12/11/2025#

Improvements#

  • Added StorytellerClipCollectionConfiguration.openReason to track the reason a Clip Collection was opened for analytics purposes, such as when opened via external deeplinks

11.0.3 - 11/11/2025#

Bug fixes#

  • Resolved an issue where the UIView wrapper for StorytellerCard was incorrectly adding extra safe area padding

Improvements#

  • Moved Mute button from the Clips navigation header to the action buttons section
  • Added support for a compact Clips primary action button size, configurable in the CMS

11.0.2 - 29/10/2025#

Bug fixes#

  • Fixed an issue where reloading the Following tab with no clips could throw an error
  • Fixed an issue where recalculatedSize could have incorrect values in Grids and Cards views
  • Fixed incorrect progress bar positioning in the Clips player when opened from a list

Improvements#

11.0.1 - 06/10/2025#

Bug fixes#

  • Added support for trackingURL as an optional parameter in GAM adapter, enabling ad rendering functionality regardless of its presence
  • Fixed a memory leak issue affecting Cards when Storyteller was reinitialized multiple times

Improvements#

  • Removed StorytellerClipCollectionConfiguration.openReason as it is being already passed into the Storyteller.open functions
  • Improved component layouts for better display with larger accessibility font sizes

11.0.0 - 03/10/2025#

Breaking Changes#

  • Removed deprecated code from the public API
  • Removed the default value for isScrollable in SwiftUI grids. You must now explicitly pass isScrollable when initializing StorytellerStoriesGrid and StorytellerClipsGrid.
  • Updated StorytellerListViewDelegate.onTileTapped method to provide richer context via the StorytellerTileType enum. See onTileTapped for more information
  • Changed Storyteller class from using static methods to a shared instance pattern. All API calls must now use Storyteller.shared instead of calling methods directly on the class (e.g., Storyteller.shared.initialize() instead of Storyteller.initialize())
  • eventTrackingOptions can now only be set during SDK initialization by passing a StorytellerEventTrackingOptions object to the initialize method. Runtime modifications are no longer supported. The property remains publicly readable via Storyteller.shared.eventTrackingOptions. To change tracking options, you must reinitialize the SDK. See Privacy and Tracking for more information

New Features#

  • The Story player can now display closed captions
  • Introduced a new Following Model where Storyteller is handling all following logic, without the need for storing and syncing followed categories app-side
  • Added support for custom context data in analytics events. Context allows integrators to provide additional analytics attribution data for Storyteller rows, grids and cards. For details, see Context
  • Added automatic user attribute management for followed categories. See Followed Categories for more information
  • Added support for setting default mute state when opening Clip and Story players, and ability to persist mute state between app launches. Both settings are configurable in the CMS
  • Added theme.lists.enablePlayerOpen property to control whether the SDK automatically opens the player when a tile is tapped. See Theme for more information
  • Card collections can now be sorted by viewed/tapped ordering, which means a new Card will be shown every time a Card from the collection has been viewed or tapped.

Improvements#

  • Added support for up to 2 lines of text in quiz and poll answers to accommodate longer content
  • Added isCategoryFollowed(_:) and getFollowedCategories() methods to StorytellerUser
  • Added support for muting videos in video poll Stories
  • Row views now automatically adjust their height when iOS Dynamic Type text size changes, improving accessibility
  • Added support to show a button for Cards. See Cards for more information
  • Revisiting accessibility in the Clips Player
  • When no limit is provided, non-scrollable grids default to rendering at most 30 items
  • Improved ads analytics tracking with proper predecessor IDs for Stories and Clips
  • Added actionLinkId event property. See Action Link ID for details

Bug fixes#

  • Resolved an issue where poll deeplinks with an answer were not handled
  • Fixed an issue where rotating the device on the Search page caused the Stories player layout to break
  • Fixed an issue where sometimes Pull to Refresh was not working after reloading embedded Clips
  • Fixed an issue where Story ad video sound would sometimes continue playing after switching to a different Story page
  • Fixed an issue were Polls with video background were showing the buttons before the video was actually loaded
  • Fixed Poll Image Answer Containers not tappable outside of the buttons, which prevented navigating to the next/previous page
  • Fixed a rare bug where Clip captions could sometimes overlap with the "For You"/"Following" switcher
  • Fixed an issue where pageActionText appeared in StorytellerUserActivityData even when the Page action did not exist
  • Fixed an issue where applying a search filter could result in a blank search results screen
  • Fixed an issue where the Story player, when opened from lists in horizontal orientation on iOS, could behave incorrectly during playback
  • Fixed a rare issue where new Story Pages wouldn’t appear until host application relaunch
  • Fixed an issue where Muted Ad and Unmuted Ad analytics events were sent when enableAdTracking was disabled. See Privacy and Tracking
  • Fixed an issue where Opened Clip event was not sent when dismissing a Clip Category at the top level
  • Fixed an UI issue where certain Functional Behavior Toggles could render incorrect Clip button states
  • Recovering Cards playback if a Media Services Reset event occurs

10.13.4 - 24/09/2025#

Bug fixes#

  • Fixed several Pull to Refresh issues in Clips

Improvements#

  • Added StorytellerCardView.recalculatedSize to expose the updated card size after layout calculations
  • A displayLimit of 0 or negative value is now treated as unlimited (equivalent to passing nil)

10.13.3 - 18/08/2025#

Bug fixes#

  • Fixed an issue where the Search suggestions view was missing horizontal padding
  • Fixed an issue where PTR could sometimes trigger on the 2nd clip during fast swiping
  • Fixed an issue where excludeFromAnalytics would not be properly set on analytics events

10.13.2 - 12/08/2025#

Improvements#

  • Made guest User ID persistent across login/logout sessions to maintain consistent user experience and viewed history
  • Improved Card text gradient display for better readability when text is overlaid on content

Bug fixes#

  • Fixed Search Results screen UI layout issues on iOS 15

10.13.1 - 07/08/2025#

Bug fixes#

  • Fixed an issue where Card Video wouldn't properly update when URL changes

10.13.0 - 05/08/2025#

New Features#

  • Introduced the Independent Functional Behavior Toggles for better privacy control. For details, see the Privacy and Tracking documentation
  • Updated the Between Pages Ad strategy to insert ads based on viewed page count
  • Introduced an initial index for the betweenStoriesAndPages, betweenPages and betweenClips ads strategies, that will be the index after which the first ad will appear. Can be configured in the CMS.
  • Introduced two new analytics events for enabling and disabling Story captions
  • Added a mute toggle button to the Stories and Clips players for improved audio control, which can be enabled in the CMS
  • Introduced new analytics events for mute actions: Muted Story, Unmuted Story, Muted Clip, Unmuted Clip, Muted Ad and Unmuted Ad
  • Added isMuted property to all Story, Clip and Ad analytics events to track the current mute state
  • Introduced a new field in ad-related events, called Ad Strategy
  • Added nextClip parameter to the clips case in StorytellerAdRequestInfo to provide information about the next Clip in the sequence for improved Ad targeting
  • Added support for Followable Category limits, allowing restrictions on the number of categories users can follow
  • Introduced three new analytics events for Followable Category limits: Followable Category Limit Shown, Followable Category Limit Action Button Tapped, and Followable Category Limit Dismissed
  • Added support for Eyebrows - additional contextual text that appears next to the main title of rectangular tiles, Stories and Clips inside the Players.
  • Added the onTileTapped method to StorytellerListViewDelegate to notify the delegate when a tile is tapped before the player is presented
  • Added the adIndex parameter to the clips case in StorytellerAdRequestInfo and to all ad-related analytics events to track the position of ads within a collection
  • Pausing adjacent stories when playing a new one while fast swiping

Improvements#

  • Trimmed input values for the GAM module
  • Clip Category images in the Player now download and display sooner

Bug fixes#

  • Fixed an issue where the currently displayed Story could occasionally restart and freeze on iPad devices
  • Fixed an issue where the web view navigation buttons did not correctly reflect their enabled or disabled states
  • Fixed an issue where the followable categories might report incorrect following status
  • Fixed a rare issue where the Clips or Stories Player could become unresponsive after rapidly dismissing the share sheet
  • Fixed an issue where an incorrect real time update setting could cause infinite data reload calls
  • Fixed an issue where GAM video ads in Stories would be silent if the device's mute switch was on, even after the user had unmuted Stories via the Volume buttons
  • Fixed an issue where audio from adjacent video Stories would continue playing when fast swiping between them
  • Fixed an issue where video ads continued playing when a controller was presented on top
  • Fixed a rare crash when reloading Stories after an ad was inserted
  • Fixed an issue where SkippedAd and FinishedAd events were not being sent when swiping away from ads in the Clips player
  • Fixed an issue with Search content overlapping on iOS 15 in some cases when using custom fonts
  • Fixed playback issues in scenarios where other content is presented on top of our players, e.g. Search or a Web View
  • Fixed an issue where search analytics events were using incorrect action properties when opened from clips
  • Fixed an issue where Clips could freeze when fast swiping between them

10.12.2 - 10/07/2025#

Bug fixes#

  • Fixed a bug where passing a nil User ID when initializing Storyteller would cause the user to reset on each app launch, along with its viewed history
  • Fixed an issue where lists weren't respecting the tiles.title.show configured in the CMS and were always showing tile titles

10.12.1 - 01/07/2025#

Note - Due to a bug discovered post-release, we do not recommend upgrading to this version. Please use 10.12.2 or above which contains the fix.

Bug fixes#

  • Fixed an issue where Storyteller Card onDataLoadComplete callback wouldn't be called when Card data was unchanged

10.12.0 - 26/06/2025#

Note - Due to a bug discovered post-release, we do not recommend upgrading to this version. Please use 10.12.2 or above which contains the fix.

Improvements#

  • Introduced enableRemoteViewingStore option in tracking preferences. For details, see the Privacy and Tracking documentation

Bug fixes#

  • Fixed an issue where poll answers were not displayed in Video Stories
  • Fixed an issue where the theme text casing was not applied to the Story CTA button and the CTA on the empty 'Following' screen in Clips

10.11.1 - 20/06/2025#

Note - Due to a bug discovered post-release, we do not recommend upgrading to this version. Please use 10.12.2 or above which contains the fix.

Bug fixes#

  • Fixed an issue where Video Cards wouldn't sometimes properly load or playback would stall

10.11.0 - 16/06/2025#

Note - Due to a bug discovered post-release, we do not recommend upgrading to this version. Please use 10.12.2 or above which contains the fix.

Bug fixes#

  • Fixed an issue where Embedded Clips with "For You" / "Following" enabled wouldn't resume playback after being reloaded in the background
  • Fixed an issue where the Clip Player wouldn't resume playback after being foregrounded with an alert displayed
  • Fixed some cases when the Clip and Story Player buttons can be pressed multiple times

Improvements#

  • Introduced enableFullVideoAnalytics option in tracking preferences. For details, see the Privacy and Tracking documentation
  • Added support for Cards in StorytellerHome
  • Improved privacy and security by hashing all user IDs in the SDK
  • Added Cards support to StorytellerHome
  • Implemented SHA256 hashing when storing user ID's, for improved privacy and security

Deprecations#

  • Deprecated Storyteller.currentUserId property. It now always returns an empty string and will be removed in a future release.
  • Deprecated isAnonymousUser property on StorytellerUserActivityData. It now always returns nil and will be removed in a future release.
  • Deprecated id property on StorytellerAdRequestInfo. It's now always an empty string and will be removed in a future release.

Breaking Changes#

  • Removed deprecated public APIs

10.10.0 - 26/05/2025#

New Features#

  • Introduced a new StoryInstructionsScreenViewed analytics event
  • Added support for Clip secondary actions
  • Added support for Cards, flexible components for promoting your content
  • Added support to set titles in the CMS for Collections with "For You" / "Following" enabled
  • Added ability to specify openReason when opening Stories and Clips

Improvements#

  • Improved clips loading priority for ForYou/Following mode
  • Added support for first class Sheet actions from the Empty Following screen and from Followable Category actions
  • Updated openedReason analytics property to have value instanceMethod when opening a Story or a Page through Storyteller.openStory(id:) and Storyteller.openPage() methods
  • Added Storyteller.getStoriesCount(for:) method that returns the total number of Stories for provided Category IDs.
  • Added Storyteller.getClipsCount(for:) method that returns the total number of Clips in the Collection.
  • Removed SharePlay option from the Share sheet when sharing stories or clips
  • Ensured the Clips Player Captions button state updates correctly after caption settings are modified in other instances of the Clips Player
  • Added right swipe to dimiss gesture support to the Clips Player

Bug fixes#

  • Fixed an issue where clips would not automatically resume playback when returning to the player after executing an inApp clip action
  • Fixed an issue where buttons stayed disabled after swiping past the last or first page inside the Clips player
  • Fixed an issue where the Player wouldn't properly revert audio settings when getting dismissed
  • Fixed an issue where the nearby Clips Player could start playing unexpectedly when "For You" or "Following" is enabled and the device is rotated
  • Fixed playback and layout issues on the Story and Clips Player that occasionally occurred during device rotation
  • Fixed a bug around clips category navigation and paging where duplicate clips would be appended while navigating through categories

Deprecations#

  • Deprecated Storyteller.isPlayerVisible in favour of Storyteller.isPresentingContent property. Storyteller.isPlayerVisible returns the same value as Storyteller.isPresentingContent and will be removed in a future version.
  • Deprecated Theme.EngagementUnits.Poll.showVoteCount property in favour of a value that can be set in the CMS. Starting from this version, this Theme property has no effect. Default value for the CMS property is true.
  • Deprecated Theme.Tiles.Title.show property in favour of a value that can be set in the CMS. Starting from this version, this Theme property has no effect. Default value for the CMS property is true.
  • Deprecated StorytellerClipsOpenReason enum. Use StorytellerOpenReason instead

10.9.2 - 01/04/2025#

Bug fixes#

  • Fixed analytics tracking for Followable Category follow and unfollow actions

10.9.1 - 26/03/2025#

Bug fixes#

  • Fixed a crash that occurred when fetching ads in apps built with Swift 6 mode

10.9.0 - 24/03/2025#

New Features#

  • Added progress bar to the Clips player
  • Added support for first class Sheets, enabling web content to overlay on top of the current Story or Clip Player

Improvements#

  • Introduced enableAdTracking option in tracking preferences. For details, see the Privacy and Tracking documentation
  • Implemented theme support for StorytellerClipsViewController. For details, refer to the Embedded Clips documentation
  • Added continuous play mode for Clips on tvOS, where the player auto-advances to the next clip once the current one finishes
  • Introduced two Player lifecycle methods to the StorytellerDelegate

Bug fixes#

  • Fixed VoiceOver reading order of elements in the Clips Player
  • Fixed an invalid app state that could occur when backgrounding the app during interactive push transition from the Clips Player to the Followable Category screen
  • Fixed an issue where Ads would occasionally disappear when switching between "For You" and "Following" tabs in the Clips Player
  • Resolved audio problems with GAM video Ads when the iPhone mute switch was enabled
  • Fixed truncation of Story timestamps for Stories with longer titles

10.8.4 - 18/03/25#

Bug fixes#

  • Fixed some crashes occuring in low network conditions

10.8.3 - 11/03/25#

Improvements#

  • Added support for deeplink URL's to Clips and Stories using external ID's

10.8.2 - 25/02/25#

Bug fixes#

  • Fixed an issue where duplicate OpenedClip events would be sent in some rare cases when switching from For You to the Following tab in the Clips Player
  • Fixed an issue where Filter Settings were not sent in the DismissedSearch event
  • Fixed an issue where Clip Ads events didn't populate categories property
  • Fixed an issue where SkippedStory didn't trigger when skipping the last page of a Story
  • Fixed an issue where OpenedClip event's openedReason property would be swipe instead of categoryBackTap property when dismissing a Category inside the Clips Player
  • Fixed an issue where NextClip and PreviousClip events would have properties of the Clip user navigated to, instead of the Clip it was navigated from
  • Fixed an issue where transitioning to and from page ads would erroniously record an OpenedStory event

10.8.1 - 18/02/25#

Bug fixes#

  • Fixed a bug where the wrong AVPlayer would get recorded in some Clips analytics events

10.8.0 - 14/02/25#

New Features#

  • Added Clips Paging functionality to Clips Player to improve performance and user experience
  • Added support for Swift 6

Improvements#

  • Tapping on For You or Following tab when it's already selected will reload that tab's Clips
  • Improved the animation when applying Filters on the Search screen
  • Added clipIndex property to all Ad analytics events and captionsEnabled to all Clips analytics events
  • Added ability to set the Search.heading property in the Theme, refer to the Theme documentation
  • Added default implementation for topLevelBackTapped in the StorytellerClipsViewController to pop it from the nearest navigation controller
  • Added support for Live badge to the Clips Player
  • Replaced the configuration property with the configure method on the Storyteller List Views. configuration property can still be used, but will be deprecated in the next major version
  • Improved Captions button styling on tvOS

Bug fixes#

  • Fixed various Clips Player issues that could occur when fast swiping, doing Pull to Refresh or going into the background
  • Fixed the positioning of the action button when the Following tab is empty
  • Fixed an issue where Sharing a quiz link would not open the first Page of the quiz
  • Fixed an issue where Captions sometimes wouldn't be visible if Clip is opened through Category or Search screens
  • Fixed an issue where Search Filters would be applied without tapping the Apply Filters button
  • Fixed an issue where Ads title and Ad label could be misaligned
  • Fixed an issue where status bar on the Search screen wouldn't properly update its styling in light mode
  • Fixed an issue where skippedStory event would be fired when final Page of the Story completes
  • Fixed an issue where Search button in Clips Player could be out of the video frame on iPad in landscape mode
  • Fixed a tvOS issue where Clip title would be too close to the buttons when the Clip title was long
  • Fixed an issue where clipActionType would be none instead of nil for Clips with no action button
  • Fixed an issue where Pull to Refresh wouldn't work in some rare cases inside the Clips Player
  • Fixed an issue where openClip wouldn't be sent when going back from a Category in the Clips Player
  • Fixed an issue where Ads wouldn't disappear when scrolling backwards in the Clips Player
  • Fixed an issue with Search suggestion styling on the Search screen
  • Fixed an issue where the Followable category button wouldn't be clickable in rare scenarios
  • Fixed an issue where the score parameter would be missing when sharing a quiz link

10.7.7 - 10/02/25#

Bug fixes#

  • Fixed an issue where clips would display an infinite loading spinner when using AirPlay

10.7.6 - 28/01/25#

Bug fixes#

  • Fixed a bug where the Clips Player would resume playback while presenting a modal screen after returning from background

10.7.5 - 23/01/25#

Bug fixes#

  • Resolved an issue where clip ads were inserted into the wrong position
  • Corrected round tile labels for accessibility with large text
  • Removed the CC button from live clips

New Features#

  • Introduced two new analytics events for enabling and disabling captions

10.7.4 - 24/12/24#

Bug fixes#

  • Fixed a bug where Pull to Refresh didn't work inside Embedded Clips when the SDK is used from React Native

10.7.3 - 17/12/24#

Improvements#

  • Added support to show a fixed number of tiles in list rows, via a property called visibleTiles. For details, refer to the StorytellerListViews documentation
  • Adding theme properties to allow integrators to customize appearance of list tiles, badges and the headings of the Instructions screen. For details, refer to the Theme documentation

Bug fixes#

  • Fixed a rare crash that could occur while refreshing visible cells
  • Fixed a layout issue in non scrollable grids for round tiles with visible titles

10.7.2 - 02/12/24#

Improvements#

  • Updating the way custom Followable Category screens are pushed

10.7.1 - 27/11/24#

Bug fixes#

  • Fixed an issue where the custom Followable Category screen was not being pushed using the integrator's navigation stack

10.7.0 - 19/11/24#

New Features#

  • Added mechanism to allow integrators to provide a custom Followable Category screen. For details, refer to the Followed Categories documentation
  • Added support for presenting a screen modally on top of the Stories/Clips Player when following an action

Improvements#

  • Updated the captions button, allowing users to toggle captions directly from the Clips Player and bypassing the menu
  • Adjusted default font sizes for Stories, Clips, and Singletons for StorytellerHome. For details, refer to the Theme documentation
  • Allowing Clips from lists to support For You and Following tabs
  • Enhanced reorder animations for lists and improved the closing animations for the Clips and Stories Player
  • Removing native Clip Ads after they've been viewed

Bug fixes#

  • Fixed an issue where Stories could not be muted
  • Resolved an issue where analytics events were not being triggered consistently when switching between For You and Following tabs
  • Addressed an issue causing the Clips Player to unintentionally display in landscape mode
  • Fixed missing category image when opening a live Clip directly
  • Fixed an issue where the Ad Story could play while the About this Ad screen was displayed
  • Fixed the like button on Clips occasionally showing an incorrect state after navigating to a Clip category
  • Fixed several issues where the Clips Player could enter an invalid state after quickly swiping between For You and Following tabs

10.6.5 - 08/01/25#

Improvements#

  • Updated containerTitle analytics property to use collection title for clips instead of collection id

10.6.4 - 01/11/24#

Improvements#

  • Following a category inside For You feed will now update the Following feed

10.6.3 - 31/10/24#

Bug fixes#

  • Fixed an issue where Lists and Grids wouldn't properly reload in certain cases

10.6.2 - 25/10/24#

New Features#

  • Added the isLive and collectionClipCount properties to StorytellerUserActivityData

Improvements#

  • Updated StorytellerGAMModuleConfiguration to accept adUnit as a closure, allowing different Ad Units to be used when fetching Ads

Bug fixes#

  • Fixed a crash that occurred during reload animation when swiping quickly through stories
  • Fixed a Player crash when swiping quickly through stories

10.6.1 - 15/10/24#

Bug fixes#

  • Fixed cells resizing while scrolling for collections with custom content inset behavior

10.6.0 - 04/10/24#

New Features#

  • Added For You / Following feature to our embedded clips
  • Added auto reloading support to our lists

Improvements#

  • Some of our theme parameters can be configured from CMS
  • Updated our theme parameters documentation
  • Forced audio into loudspeaker for stories in certain cases

Bug fixes#

  • Fixed standard banner ads not displaying on iPad
  • Fixed a crash due to reorder animation issues

10.5.3 - 16/09/24#

New Features#

  • Added support for custom URL schemes, allowing direct opening of a Story or Clip

10.5.2 - 11/09/24#

Bug fixes#

  • Fixed a crash on tvOS when opening the clips player

10.5.1 - 09/09/24#

Bug fixes#

  • Fixed an issue where followable category images would render incorrectly
  • Fixed an issue where story playback would sometimes be stuck after viewing a Standard Ad
  • Fixed an issue where StorytellerClipsView would erroneously reload after appearing
  • Fixed an issue where Story or Clip action button wouldn't work in some cases when clicked inside Followable Category UI
  • Fixed a crash with non-scrollable grids on iOS 18
  • Fixed a crash when showing a Standard Banner Ad
  • Fixed a crash in the image downloading pipeline
  • Fixed a crash for StorytellerListView's reorder animation
  • Fixed a crash when switching between stories

10.5.0 - 26/08/24#

New Features#

  • Supporting GAM Native Ad Templates. See Storyteller Ads for more information
  • Introducing the Storyteller GAM Module. It is used to simplify fetching ads from Google Ads Manager and injecting them inside our Story/Clips Player.
  • This is facilitated by adding a modules array of type StorytellerModule on the Storyteller class which fulfills some of the StorytellerDelegate duties

Improvements#

  • Improved loading experience when videos are buffering
  • Updated duration of Player open and close animations
  • Updated configure method on StorytellerClipsViewController to not do any checks on whether to reload the collection or not. It will always reload the collection when called, regardless of the previous value of the StorytellerClipCollectionConfiguration passed in.

Bug fixes#

  • Improved text layout in specific scenarios within the Clips Player
  • Fixed an issue where the grid top inset would not be applied correctly on the first load in full-screen mode
  • Fixed an issue where the cell pop animation would be interrupted and cancelled in some scenarios when closing the Player
  • Fixed an issue where playback would be stuck in certain scenarios when coming back into foreground
  • Fixed a crash that would happen in some cases when reusing Storyteller lists when animations were turned on
  • Fixed an analytics bug where FinishedAd would be sent twice when dismissing the Player

10.4.1 - 16/08/24#

Bug fixes#

  • Fix missing metadata for analytics events

10.4.0 - 09/08/24#

New Features#

  • Row animations are now enabled by default

Improvements#

  • Improved the animation transition when opening the clips player
  • General accessibility improvements across the SDK
  • Incorporated support for Dynamic Type to adjust text size based on user settings
  • Updated analytics fields tied to action button interactions
  • Preloading of clip category icons to optimize the asset loading times

Bug fixes#

  • Corrected the poll results label text
  • Fixed a crash occurring when tapping on the more button on the clips player on the iPad

10.3.1 - 17/07/24#

Bug fixes#

  • Fixing an issue where the live chip badge was not properly centered, but shifted to the left

10.3.0 - 15/07/24#

New Features#

  • Lists can now reload in an animated fashion, controlled by the animateTilesOnReorder flag in the Theme.
  • Storyteller Home can now have a fixed UI Style set
  • Adding the ability to customize the Clips Player Like button, as well as hiding it entirely. For details, refer to the Theme doc.

Improvements#

  • Standardizing Clips and Stories Player present/dismiss transitions
  • Improving the Accessibility experience of the Player
  • Made clarifications around how the User ID is used within the SDK
  • Organized the docs for the Open Player methods
  • Improving the layout and pull-to-refresh behaviour inside Storyteller Home
  • Improving the pull-to-refresh behaviour inside Embedded Clips

Bug fixes#

  • Fixing a case where the instructions screen failed to present when opening a deeplink to a Story Category
  • Fixing some Story Player elements not respecting the Theme

10.2.1 - 27/06/24#

Improvements#

  • when an empty String is passed for StorytellerUserInput in Storyteller.initialize(...) the default user will be used

10.2.0 19/06/2024#

Breaking Changes#

  • The following methods on Storyteller have gotten their async version. The old ones are deprecated and will be removed in a future release:
  • dismissPlayer(animated:, dismissReason:)
  • initialize(apiKey:, userInput:)
  • openDeepLink(url:)
  • openStory(id:)
  • openStory(externalId:)
  • openPage(id:)
  • openCategory(category:)
  • openCollection(configuration:)
  • openClipByExternalId(collectionId:, externalId:)
  • openSearch()

  • set(collectionId:initialClipId:openedReason) method on StorytellerClipsViewController has been deprecated in favor of the new method configure(with:) where the configuration parameter is of type StorytellerClipCollectionConfiguration. See EmbeddedClips for more details.

  • removed liveChipImage in favor of the new LiveChip struct where image, textColor, backgroundColor and backgroundGradient can be set. image precedes backgroundGradient and backgroundGradient precedes backgroundColor. See Themes for more details.

Improvements#

  • updated the order of some analytics events
  • added the chip.show property to set whether the chip for rectangular tiles is visible. See Themes for more details.
  • added ability to set the open reason when configuring the clip collection, used only for analytics purposes. If not set, default logic will be used.
  • added the canGoBack property to StorytellerClipsViewController. See EmbeddedClips for more details.
  • added ability to set chip text color based on read / unread status
  • improvements to image loading sequence
  • added ability to set live chip properties for rectangular tiles
  • added ability to open collection with a specific category by using Destination property of the StorytellerClipCollectionConfiguration

Bug Fixes#

  • fixed an issue where the correct font wasn't used for the like count label in Clips Player
  • fixed issues with captions' appearance for longer texts
  • fixed an issue where the Embedded Clip sound would play in the background in rare scenarios
  • fixed a rare crash with analytics
  • fixed an issue with the action button having the wrong color under certain conditions

10.1.2 13/06/24#

Bug Fixes#

  • fixed a crash due to a race condition when downloading assets

10.1.1 16/05/24#

Bug Fixes#

  • resolved an issue with the live badge appearance on round cells when using gradients

10.1.0 15/05/24#

New Features#

  • introduction of First Party Ads
  • added support for Gradient Borders on Circular Tiles

Improvements#

  • updated video buffering strategy for enhanced analytics accuracy
  • optimized cell thumbnail fetching to prevent dublicate network calls in rare scenarios

Bug Fixes#

  • resolved missing dismiss reason on tvOS clip close analytics event
  • resolved missing currentCategory in analytics events
  • hidden more button for Clip ads

10.0.1 07/05/24#

Bug fixes#

  • fixing color of Follow button to respect the Theme
  • fixing a crash that appears in some edge cases

10.0.0 18/04/24#

New Features#

Breaking Changes#

  • all methods inside the Storyteller class are now static
  • removed deprecated individual properties on our list views, in favour of the new configuration objects
  • the Storyteller and list delegates are now weak. It is up to the integrating apps to reference them strongly

Improvements#

  • overall improvements to the player performance and user experience
  • using system images where possible throughout the SDK, thus reducing its size

Bug fixes#

  • analytics fixes
  • theming fixes

9.13.1 02/04/24#

Improvements#

  • fixed the order of some analytics events

9.13.0 29/03/24#

Bug fixes#

  • fixing clip playback issues while presenting search

New Features#

  • adding a new eventTrackingOptions property to Storyteller, allowing more fine-grained control of user privacy options.
  • introducing StorytellerHome, an organized collection of our list views.

9.12.1 26/03/24#

Improvements#

  • Updated Privacy Manifest file for Required Reasons API requirements
  • Added set(collectionId: String, initialClipId: String?) method in StorytellerClipsViewController. This method allows loading a specific clip within a clip collection directly.
  • Deprecated collectionId property in StorytellerClipsViewController and it will be removed in the future. Use set(collectionId: String, initialClipId: String?) instead.

9.12.0 20/03/24#

Bug fixes#

  • fixing various gesture related issues for stories on iOS and tvOS
  • layout round cells properly when the title is hidden
  • analytics fixes
  • describing data usage in privacy manifests required by Apple for SDK's

9.11.0 12/03/24#

Improvements#

  • addressed missing analytics fields and resolved issues with certain events

9.10.0 28/02/24#

Improvements#

  • analytics improvements: added missing fields, fixed some events

Bug fixes#

  • various bug fixes for embedded clips (clips used via StorytellerClipsViewController)
  • fixed rare pausing issues on Polls

9.9.1 13/02/24#

Bug fixes#

  • fixed the data shipped with .shareSucces analytics event

9.9.0 30/01/24#

New Features#

  • added support for Viewed Clips

Breaking Changes#

  • changed Theme property storyTiles into tiles. Please see Themes for more details.

Bug fixes#

  • UI fixes related to the Search feature
  • fixed issues with pausing the Story player

9.8.1 09/01/24#

Bug fixes#

  • fixed some memory leaks related to Stories
  • bugfix for clipping topInset margin on scrollable grids

9.8.0 - 13/12/23#

New Features#

  • added Pull To Refresh mechanism for StorytellerClipsViewController
  • added isScrollable parameter for StorytellerGridViews in SwiftUI
  • added StorytellerClipsViewControllerDelegate to StorytellerClipsViewController to handle data load and finished loading events
  • added reloading to first clip in collection on reloadData call for StorytellerClipsViewController

Improvements#

  • Improved accessibility for our lists and players

Bug fixes#

  • fixed updating read status across multiple rows on player dismissal

9.7.6 - 22/11/23#

Bug fixes#

  • fixed calling reloadData for StorytellerClipsView.

9.7.5 - 21/11/23#

Bug fixes#

  • fixed playing audio after failed StorytellerClipsViewController playback.

9.7.4 - 09/11/23#

Bug fixes#

  • fixed respecting theme.player.showShareButton for Clips.

9.7.3 - 27/10/23#

Bug fixes#

  • fixed some memory leaks related to Clips.

9.7.2 - 13/10/23#

Bug fixes#

  • bug fixes for answer auto-selection in quizzes

9.7.1 - 10/10/23#

Bug fixes#

  • Various bug fixes for embedded clips (clips used via StorytellerClipsViewController)

9.7.0 - 02/10/23#

New Features#

  • added openCategory method, please see Additional Methods for more details
  • added openStory(externalId:) and openClipByExternalId methods, please see Additional Methods for more details
  • added storyDisplayTitle parameter to analytic events, please see Analytics for more details
  • added fixed order rows mode for Stories which can be set up via the CMS
  • added pinned stories support for Stories which can be set up via the CMS

9.6.0 - 19/09/23#

New Features#

  • added preloading of 3 next clips

Improvements#

  • updated top and bottom shade gradient on clips
  • more/less button displayed below categories list
  • added sorting stories by ids fallback
  • fixed story progress bar blink

9.5.0 - 31/08/23#

New Features#

  • added support for Page Ads which appear between Pages

Breaking Changes#

  • changed signature of ad delegate from getAdsForList to getAd, please see Ads for more details
  • changed classes inside StorytellerAdRequestInfo, StoryInfo and ClipInfo are now single class ItemInfo, please see Ads for more details

Improvements#

  • added adPlacement to analytics, please see Analytics for more details

9.4.0 - 16/08/23#

New features:

  • added support for Clips Category Navigation to the Clips Player

9.3.0 - 20/07/23#

New features:

  • Replacing public ad entities prefixes from Client to Storyteller.
  • Added configuration property to setup ListViews. Read more here.
  • Use the default webView's user-agent for tracking pixel requests.
  • Added SwiftUI support. Read more here.

Bug fixes:

  • Fixed live badge color on clip player.
  • Fixed other apps audio not resuming when mute switch is turned off.
  • Fixed reloading thumbnails on non scrollable grids.

9.2.1 - 05/07/23#

New features:

  • setting custom User-Agent for Tracking Pixels

9.2.0 - 08/06/23#

New features:

Bug fixes:

  • Fixed some Grids layout issues.
  • Theme fixes for the list tiles.
  • Tracking pixel fixes.

Improvements:

  • Resuming other apps' music when closing our Stories or Clips player.
  • Updating the Category object for Ads.
  • Introducing the new StorytellerActionType for Ads.
  • Clips playback, analytics and overall improvements.

9.1.7 - 31/05/23#

Bug fixes:

  • Fixed a scroll jump when our non-scrolling grids are incorporated inside a Collection View
  • Fixed a layout issue when round cells are used in grids

9.1.6 - 25/05/23#

Bug fixes:

  • Fixed reusing same ad injected on getAdsForList callback

9.1.5 - 22/05/23#

Bug fixes:

  • Fixed not calling getAdsForList for first clip
  • Fixed applying theme.player.liveChipImage

Improvements:

  • User customAttributes accept only string type values

9.1.4 - 17/05/23#

Bug fixes:

  • Fixed UI issue on the Clip player's action button

Improvements:

  • Added ad badge which indicates ad on Clips

9.1.3 - 11/05/23#

Bug fixes:

  • Fixed bug where clip ads can get stuck when swiping fast.

Improvements:

  • Added adType to StorytellerUserActivityData returned on StorytellerDelegate's onUserActivityOccured.
  • Changed interface of StorytellerAdRequestInfo.clips.

9.1.2 - 08/05/23#

Bug fixes:

  • Fixed an occasional crash when opening a story from a deep link.

9.1.1 - 03/05/23#

Improvements:

  • Hiding the Quiz Summary share button when sharing is disabled from the Theme.

9.1.0 - 02/05/23#

New features:

  • We support live streaming Clips now.
  • Exposing the grid's dynamic size via the recalculatedSize property.

Bug Fixes:

  • Fixed some memory leaks related to Clips.

9.0.5 - 26/04/23#

Bug Fixes:

  • Fixed a bug when stories sometimes weren't showing up in the lists.

9.0.4 - 19/04/23#

Bug Fixes:

  • Fixed a rare bug that could crash the App during a network call

9.0.3 - 18/04/23#

Bug Fixes:

  • Fix rendering of grids when wrapped in SwiftUI views.

Improvements:

  • Stories and Clips playback improvements.
  • Adding support for creating the List Views in xibs/storyboards.
  • Preserve the categories' order of Story rows & grids.

9.0.2 - 12/04/23#

Bug Fixes:

  • Fixed a crash when the SDK was built in Release mode.
  • Corrected the way top padding works for grids.

Improvements:

  • Clips memory management improvements.

9.0.1 - 07/04/23#

Bug Fixes:

  • Fixed an issue with the action button on a Story's page.
  • Fixed a problem with the Clip ads.
  • Fixed issue where tapping back in Quiz selected an answer.
  • Fixed issue with score positioning in Quiz.
  • Fixed an issue where some analytic events were not firing for stories.

9.0.0 - 06/04/23#

New features:

  • We introduced a better class hierarchy for the StorytellerListView Classes.
 StorytellerListView
 ├── StorytellerRowView
 │   ├── StorytellerStoriesRowView
 │   └── StorytellerClipsRowView
 └── StorytellerGridView
     ├── StorytellerStoriesGridView
     └── StorytellerClipsGridView
  • The Grid views now have scrollable and non-scrollable variants.
  • Clips can now contain Ads.
  • Added top and bottom insets for Grids, can be set on StorytellerTheme.
  • Introducing custom user attributes via Storyteller.user.

Bug Fixes:

  • Fixed an issue when Grid cells weren't updating the read status of stories properly after being watched.

Improvements:

  • Improved the inner workings of Grids regarding layout.
  • Removed deprecated methods.
  • Stories Lists no longer support collectionId and Clips Lists no longer support categories.
  • Reacting properly to setting overrideUserInterfaceStyle on UIView.
  • Improving gesture handling of the Stories player.

8.4.4 - 8/09/23#

Improvements:

  • adjust to properly work on iOS17

8.4.3 - 27/03/23#

Improvements:

  • Introduced different thumbnail sizes for better story and clip previews

8.4.2 - 16/03/23#

Bug Fixes:

  • Fixed Ads sometimes getting stuck when swiping between stories

Improvements:

  • Optimized Clips performance for large collections

8.4.1 - 15/02/23#

Bug Fixes:

  • All clip events coming out from onUserActivityOccurred delegate callback contain proper data in StorytellerUserActivityData.categoryDetails
  • Fixed theme.lists.backgroundColor not setup correctly for Dark Mode

8.4.0 - 13/01/23#

Bug Fixes:

  • Fixed storyPageCount, storyIndex and storyPlaybackMode not being returned on certain Story events
  • Added missing Clip event data for Opened Clip, Finished Clip and Completed Loop events
  • Fixed story title alignment in some device rotation scenarios

8.3.1 - 20/12/22#

Bug Fixes:

  • added Clip Collection and Clip Category event data for all Clip analytics events

Improvements:

  • added Current Category to the event data for Story and Ad analytics events

8.3.0 - 09/12/22#

Bug Fixes:

  • fixed default value for answeredMessageTextColor

Improvements:

  • added additional properties to ad events to help identify individual ads
  • modified the getAdsForList callback to provide more ad information
  • exposed information about category types on analytic events
  • improvements to the way a Page's read status is implemented
  • adjusted the timestamp property so timescales are updated for each new Page
  • improvements to the loading time of videos in Stories

8.2.4 - 30/11/22#

Improvements:

  • removed unused onComplete parameter from Storyteller.dismissPlayer
  • implemented lists.backgroundColor theme property to change the background color of chips

8.2.3 - 25/11/22#

Improvements:

  • Enforced setting empty UserID to clear local storage

8.2.2 - 10/11/22#

Improvements:

  • Made Clips scrolling experience smoother

Bug Fixes:

  • Fixed bug with reloadData requests being sent before initialization has finished
  • Fixed bug with StorytellerHome sometimes having incorrect grid sizes
  • Fixed bug with share button on iPads
  • Fixed Action buttons not working in certain cases

8.2.1 - 01/11/22#

Bug Fixes:

  • Fixed bug that prevents Action buttons being used after opening the app from a shared link
  • Fixed getAdViewHandler returning nil on StoryViewModel
  • Fixed rare crash when opening player

Improvements:

  • Analytics parameters are now sent in the same order and empty values have been removed
  • Shortened Story Poll's remaining time to 2 seconds after an answer has been selected

8.2.0 - 11/10/22#

New Features:

  • Added support for Clips and Collections

Bug Fixes:

  • Fixed issue that caused DismissedAd activity to not run in certain cases
  • Fixed bug that caused dismissedStory to miss dismissedReason parameters in certain cases
  • Fixed bug that could cause Storyteller to freeze when saving asset to device
  • Fixed bug where tapping to go back on the first Page of the first Story did not start the Page from the start
  • Fixed bug that could cause Story player window to turn white after share activity
  • Fixed setting Categories for a Story row in the demo app
  • Fixed loading icon remaining on screen in certain cases
  • Fixed Story player window becoming white after hiding share activity

Improvements:

  • Made the selected answer on Polls semitransparent
  • Implemented better logging solution in Xcode console
  • Reduced content length parameter usage
  • Implemented AdActionButtonTapped event
  • Refresh button improvements

Deprecations and Changes:

  • Renaming StorytellerUserActivity.NewEventType case from .swipedUpOnPage to .pageActionButtonTapped
  • Renaming StorytellerUserActivity.EventType.SwipeUp to .ActionButtonTapped

8.1.14 - 17/10/22#

New Features:

  • Added the ability to open a Clip or Collection directly using the openCollection method

8.1.13 - 21/09/22#

Bug Fixes:

  • Fixed TriviaQuizScore being set as a String instead of an Int
  • Fixed missing text in sharing screen

Deprecations and Changes:

  • Removed openFeed from Storyteller

8.1.12- 01/09/22#

Bug Fixes:

  • Keeps scroll position of a row when you refresh
  • Fixed Live Story UI and placement bugs

8.1.11 - 25/08/22#

Bug Fixes:

  • Removed crash possibility when running public sample code
  • Removed the white line on Live Stories row
  • Fixed progress bar disappearing on Stories and ending playback on rare occasions
  • Fixed bug that could make images in emails not visible when sharing Stories
  • Fixed rare bug that could cause Story playback to stall

8.1.10 - 24/08/22#

Bug Fixes:

  • Fixed bug that could cause a blinking black screen when swiping quickly through Stories
  • Fixed bug with the functionality of the Action buttons

8.1.9 - 23/08/22#

Bug Fixes:

  • Fixed Story sharing bugs

New Features:

  • Added support for iPad multitasking mode

Improvements:

  • UI improvements for light and dark mode
  • Made the order of query parameters on requests deterministic

8.1.8 - 12/08/22#

Bug Fixes:

  • fixed issue where the app could get stuck between Stories, showing half of each side of two Stories and a black gap between them
  • fixed issue of watched Stories not moving to the end of the list
  • fixed issue of grids jumping to the bottom of feeds
  • fixed issue with New Chips flickering when going in and out of More Stories grid

UI Changes:

  • fixed issue with light mode placeholders being used in dark mode for round Story Tiles
  • Story Row container refinements for circular rows, rectangular rows, and Story grids
  • fixed tiles in grids being the wrong aspect ratio
  • fixed issue of Top Stories row appearing as placeholders

8.1.7 - 10/08/22#

Bug Fixes:

  • fixed issue with grids only showing the loading state for 2 tiles

New Features:

  • added the contentLength parameter to analytic events - see Analytics for more information

8.1.6 - 10/08/22#

Bug Fixes:

  • fixed issue where swiping back to an Ad could make the Ad turn black
  • fixed issue with Ad playing from the point the user stopped watching it at last time the user swipes to it

New Features:

  • enable/disableTracking code

Deprecations and Changes:

  • now request ads from the integrating app every few Stories instead of all at once
  • replace dismissClipView and dismissStoryView with dismissPlayer in Storyteller object

8.1.5 - 05/08/22#

Bug Fixes:

  • fixed issue with placeholders not appearing for Story Rows

8.1.3 - 02/08/22#

Bug Fixes:

  • fixed issue with playback flailing due to lack of available encoders

8.1.2 - 02/08/22#

UI Changes:

  • added theme properties for circular tile border width
  • adjust theme.storyTiles.liveChip.readImage and theme.storyTiles.liveChip.unreadImage to:

  • theme.storyTiles.circularTile.liveChip.readImage

  • theme.storyTiles.circularTile.liveChip.unreadImage
  • theme.storyTiles.rectangularTile.liveChip.readImage
  • theme.storyTiles.rectangularTile.liveChip.unreadImage

8.1.1 - 29/07/22#

Bug Fixes:

  • fixes issues related to firing Event Tracking events correctly to provide proper analytics

  • OpenedStory was triggered by automaticPlayback as the openedReason and once with storyListTap - it is now only triggered by storyListTap

  • SkippedPage and CompletedPage were triggered when skipping a page - it is now only triggered by SkippedPage
  • CompletedStory was triggered when a user finished watching an Ad - no Story events are triggered in this instance
  • PausedAdPage was triggered when skipping an Ad - this is now only triggered when the user pauses the Ad
  • ViewedAdPageComplete was triggered when skipping an Ad - this is now only triggered when the viewer has viewed the whole Ad
  • fixed issue to ensure triviaQuizQuestionAnswered fires when the users answers a Trivia Quiz or if they time out on a question
  • fixed issue with triviaQuizScore not returning upon triviaQuizCompleted
  • fixed issue with skippedAd not firing

  • when closing a Story, issue fixed where the user could return to the wrong position in the list view in the row/grid

  • when sharing a Story Page, fixed an issue where the timer didn't stop to allow the user time to share and return to viewing
  • fixed issue with image answers not appearing on Polls
  • fixed issue with rows with multiple Categories assigned showing Stories swiping into each other and disappearing from the list view
  • fixed issue where Story video preview freezes when swiping back and forth between Stories
  • fixed issue where repeatedly refreshing briefly duplicates rows
  • fixed issue where Story Tiles were incorrectly scaled when displayed across two rows

UI Changes:

  • displaying instructions screen correctly on iPad
  • fixed an issue where switching between light and dark mode didn't update the theme on circular Story Tiles
  • max length of Story Grid set to 4 Stories in the loading state
  • fixed issue where webview header wasn't changing colour when switching from light to dark mode

8.1.0 - 13/07/22#

Bug Fixes:

  • add empty placeholders when grid view is initialised

8.0.2 - 11/07/22#

UI Changes:

  • when displaying the score of a Trivia Quiz to users, the font size has been made bigger, bolder, and the colour has been changed to white
  • corrected spacing between titles and rows/grids across all devices (set to 12px below and above each title)
  • adjusted left margin to be consistent for titles/rows/grids across all devices

Deprecations and Changes:

  • removed topInset and bottomInset for grids
  • ignore startInset and end`Inset for rows inside Home

8.0.1 - 24/06/22#

UI Changes:

  • font sizes, cases, and weights corrected
  • adding action buttons instead of swipe ups for Stories
  • support storyTiles.title.show in Story Grids/Rows

New Features:

Deprecations and Changes:

  • removed showPercentBarBackground from theme