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()andhide()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.