Skip to Content
Swift SDKChangelog

Changelog

v0.2.0-beta — 2026-03-12

New Features

  • Lineup Timeline — Match lineup delivered via WebSocket event lineup_show. Backend triggers it automatically 10 minutes before kickoff. MatchLineupView is now backend-driven — pass broadcastId and it handles everything.

    // Before (manual match object) MatchLineupView(match: match) // Now (backend-driven) MatchLineupView(broadcastId: "real-madrid-vs-mancity-2026-03-11")
  • Apple PayVPaymentSheet component added. Handles the full Apple Pay sheet, Stripe tokenization, and order submission. Merchant ID: merchant.live.vio. Supports iOS and tvOS (TV→iPhone handoff).

    import VioUI VPaymentSheet( cart: cartManager.cart, onSuccess: { order in /* handle */ }, onCancel: { } )
  • videoTimestamp — dynamic — Lineup videoTimestamp is now calculated by the backend based on broadcast start time. No SDK change needed.

  • Sponsor Moments — “Shoppable Ads” are now called Sponsor Moments in all public-facing surfaces. API and Dashboard internals still use sponsor_slots. Slot types: product, lead, poll_cta, contest_cta, link.

Bug Fixes

  • AnalyticsManager now compiles on macOS — added #if os(iOS) || os(tvOS) guard
  • CachedAsyncImage — added UIImage guard to prevent nil crash
  • VButton and VToastNotification — fixed #Preview crash in macOS SPM builds

Tests

105 unit tests added across 5 files. All pass.

FileTests
VioConfigurationTests.swift22
CampaignModelsTests.swift30
LineupModelsTests.swift12
PriceFormattingTests.swift25
VioSessionContextTests.swift14

v0.1.0-beta — 2026-03-04

Initial alpha release. Core engagement features for live sports streaming.

New Features

  • WebSocket-driven engagement — Polls and contests delivered via WebSocket in real-time. loadEngagement() via HTTP is no longer used.
  • setBroadcastContext() — Single call to connect to a broadcast. Auto-discovers the campaign, opens WebSocket, and starts receiving events.
  • autoDiscover: true — Campaign discovery by externalId (the contentId passed by the streaming platform). No hardcoded campaign IDs in app code.
  • SponsorAssets — Centralized sponsor identity. Logo URL, avatar URL, and primary color come from the backend. textOnPrimary is calculated by the SDK using WCAG contrast ratio.
  • BroadcastContext — Replaced MatchContext. Includes broadcastId, broadcastName, channelId, metadata. MatchContext remains as a typealias for backward compatibility.
  • Memory fixesNSCache limits (50 items / 50 MB), Timer cleanup on onDisappear, NotificationCenter token management.
  • VioColors.primary — All sponsor primary colors use this token. No more hardcoded hex values.
  • Dashboard-driven configuration — Polls, contests, sponsor slots, and product placements are configured entirely in the Vio Dashboard. No SDK changes needed to update campaign content.

Breaking Changes

  • MatchContext is deprecated. Use BroadcastContext instead.
  • setMatchContext(_:) is deprecated. Use setBroadcastContext(_:).
  • discoverCampaigns(matchId:) is deprecated. Use discoverCampaigns(broadcastId:).

Bug Fixes

  • contentId not passed to contest WebSocket connection → contests never connected WS
  • Race condition: WS snapshot received before currentBroadcastContext was set → reconnect fix
  • shouldShowComponent filtered components without broadcastContext → carousel disappeared
  • activeComponents.removeAll() in setBroadcastContext caused infinite loading
  • _comment field in productMappings (JSON) broke JSONDecoder → removed
Last updated on