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.MatchLineupViewis now backend-driven — passbroadcastIdand it handles everything.// Before (manual match object) MatchLineupView(match: match) // Now (backend-driven) MatchLineupView(broadcastId: "real-madrid-vs-mancity-2026-03-11") -
Apple Pay —
VPaymentSheetcomponent 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 — LineupvideoTimestampis 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
AnalyticsManagernow compiles on macOS — added#if os(iOS) || os(tvOS)guardCachedAsyncImage— addedUIImageguard to prevent nil crashVButtonandVToastNotification— fixed#Previewcrash in macOS SPM builds
Tests
105 unit tests added across 5 files. All pass.
| File | Tests |
|---|---|
VioConfigurationTests.swift | 22 |
CampaignModelsTests.swift | 30 |
LineupModelsTests.swift | 12 |
PriceFormattingTests.swift | 25 |
VioSessionContextTests.swift | 14 |
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 byexternalId(thecontentIdpassed 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.textOnPrimaryis calculated by the SDK using WCAG contrast ratio.BroadcastContext— ReplacedMatchContext. IncludesbroadcastId,broadcastName,channelId,metadata.MatchContextremains as a typealias for backward compatibility.- Memory fixes —
NSCachelimits (50 items / 50 MB),Timercleanup ononDisappear,NotificationCentertoken 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
MatchContextis deprecated. UseBroadcastContextinstead.setMatchContext(_:)is deprecated. UsesetBroadcastContext(_:).discoverCampaigns(matchId:)is deprecated. UsediscoverCampaigns(broadcastId:).
Bug Fixes
contentIdnot passed to contest WebSocket connection → contests never connected WS- Race condition: WS snapshot received before
currentBroadcastContextwas set → reconnect fix shouldShowComponentfiltered components without broadcastContext → carousel disappearedactiveComponents.removeAll()insetBroadcastContextcaused infinite loading_commentfield inproductMappings(JSON) brokeJSONDecoder→ removed