Feature

iOS SDK Phase 4: Native UIKit Overlay, SKIE Integration, and Demo App

TL;DR Snapshot

Phase 4 of the Stream Probe iOS SDK ships SKIE integration for clean Swift interoperability, a native UIKit overlay window and panel renderer, and public show/hide presenter APIs. A complete iOS demo app is included, along with a fix for AutoLayout constraint conflicts that caused jerky panel collapse animations.

Share this update

Stream Probe introduces native Swift/UIKit overlay support in this update, completing Phase 4 of the iOS SDK rollout via Kotlin Multiplatform and SKIE.

TL;DR

The iOS side of Stream Probe now has a fully functional UIKit overlay window and panel renderer, exposed through a clean Swift API powered by SKIE. A complete demo app ships alongside it to show how the integration works end to end.

What's New

  • SKIE integration: Kotlin Multiplatform iOS build now uses SKIE for improved Swift interoperability, so the SDK feels idiomatic from the Swift side rather than exposing raw Kotlin generics
  • Public overlay types and presenter APIs: show() and hide() methods on the overlay presenter are now part of the public SDK surface, making it straightforward to trigger the debug overlay from your app code
  • Native UIKit overlay window: Implemented a dedicated UIWindow-based overlay that renders above your app's existing window hierarchy without interfering with touches on the main UI
  • Panel renderer in Swift: The debug panel is rendered natively in UIKit, matching the visual structure of the Android overlay
  • iOS demo app: A complete Swift demo app is included to demonstrate SDK setup, overlay triggering, and panel display in a real UIKit project
  • AutoLayout constraint fix: Resolved conflicting constraints during panel collapse by adjusting constraint priorities and switching to constant-based animations instead of adding/removing constraints

How to Use

Basic setup in your Swift app:

import StreamProbeSDK

// In your app or scene delegate
let probe = StreamProbe()
probe.presenter.show()

The overlay window attaches automatically once show() is called. Call hide() to dismiss it. Check the iOS demo app in the repo for a full working example.

FAQ

What is SKIE and why does it matter here?

SKIE is a Kotlin Multiplatform plugin that generates idiomatic Swift wrappers around your Kotlin code. Without it, Swift callers deal with Kotlin-flavored generics and optionals. With it, the Stream Probe SDK exposes clean Swift types that feel like they were written natively.

Does the UIKit overlay work with SwiftUI apps?

The overlay uses a UIWindow at the UIWindowScene level, so it sits above SwiftUI's rendering layer. You can call show() and hide() from anywhere, including a SwiftUI lifecycle app.

What caused the AutoLayout constraint conflict during panel collapse?

When the panel collapsed, two constraints competed at the same priority, causing unsatisfiable layout warnings and a jerky animation. The fix adjusts priorities so only one constraint wins at a time, and animates the constant property instead of swapping constraints.

Is the iOS demo app production-ready code?

The demo app is meant to show integration patterns, not serve as a copy-paste template. It covers the main use cases: initializing the SDK, showing the overlay, and dismissing it.