Feature

Phase 4: Native Swift/UIKit Overlay, SKIE Interop, and iOS Demo App

TL;DR Snapshot

Phase 4 of the Stream Probe iOS SDK ships a native UIKit overlay window and panel renderer, wired up through SKIE for clean Kotlin-to-Swift interoperability. A new public presenter API gives Swift apps straightforward show/hide control over the overlay. An iOS demo app in the repo shows the full setup in a working Xcode project.

Share this update

Stream Probe introduces Phase 4 of its iOS SDK in this update, shipping a native UIKit overlay window, a public show/hide presenter API, and a complete iOS demo app.

TL;DR

Phase 4 brings the overlay experience to iOS with a proper UIKit implementation. SKIE handles Kotlin-to-Swift interop so the API feels native, and a new demo app gives you a working reference from day one.

What's New

  • SKIE integration: Kotlin Multiplatform types now surface cleanly in Swift without manual bridging. Calling the overlay API from Swift code feels like a first-class SDK.
  • Public overlay types: Core overlay models are now exposed in the public API surface, so you can build custom integrations without reaching into internals.
  • Show/hide presenter API: A dedicated show() and hide() method pair on the presenter lets you control overlay visibility from any Swift context.
  • Native UIKit overlay window: The overlay renders in a floating UIWindow layered above your app content. No web views, no cross-platform renderer hacks.
  • Panel renderer: A Swift/UIKit panel renderer handles layout and display of the debug stats inside the overlay window.
  • AutoLayout fix: Resolved a constraint conflict that fired during panel collapse animations. Priority adjustments on the collapsing constraints killed the ambiguity warnings.
  • iOS demo app: A new demo app ships alongside the SDK to show the overlay in action on a real iOS target.

How to Use

Once the SDK is linked, showing the overlay from Swift looks like this:

// Initialize the presenter (wired through SKIE-generated API)
let presenter = StreamProbeOverlayPresenter()

// Show the overlay
presenter.show()

// Hide it when done
presenter.hide()

Check the iOS demo app in the repo for a full working example including player setup and overlay lifecycle.

FAQ

Does this replace the existing Android overlay?

No. The Android overlay is unchanged. Phase 4 adds a parallel iOS implementation using UIKit, sharing business logic through the KMP core.

Why SKIE instead of manual Kotlin/Swift bridging?

SKIE generates idiomatic Swift APIs from your Kotlin Multiplatform code automatically. It cuts out the hand-written wrappers and keeps the Swift call sites clean.

Is the overlay window safe to use alongside other UIWindow-based overlays?

Yes. The overlay uses a dedicated UIWindow with a controlled window level, so it shouldn't conflict with standard app windows or system overlays.

Where can I find the demo app?

It's in the Stream Probe GitHub repo under the iOS demo target. Clone the repo and open the Xcode project to run it on a simulator or device.

Phase 4: Native Swift/UIKit Overlay, SKIE Interop, and iOS Demo App · Stream Probe Changelog · PushToPost