iossdkswiftuimobileproduct

In-App Feedback for iOS, in Two Lines of SwiftUI

The SeggWat iOS SDK drops a native SwiftUI feedback button into any app — bug reports, screenshots, star and NPS ratings — with zero dependencies and no web view. It submits to the same project as your web widgets.

Hauke Jung
|June 15, 2026|
3 min read

SeggWat started on the web. A script tag, a button in the corner, feedback in your dashboard. But a lot of products aren't a website — they're an app, and the moment a user wants to report a bug is the moment they're holding their phone, not sitting at a browser.

The usual way to collect feedback inside an iOS app is grim: a heavy SDK that ships a WKWebView rendering someone else's web form, plus an analytics tracker you never asked for. It doesn't feel native, it bloats your binary, and now you've got a third-party data processor in your privacy policy.

So I built the opposite. The SeggWat iOS SDK is native SwiftUI, has zero dependencies, and drops in like this:

swift
SeggWat.configure(projectKey: "your-project-uuid")

ContentView()
    .seggwatFeedbackButton()   // floating feedback button, done.

That's the whole integration.

Real SwiftUI, not a web view in a trench coat

The button is a real View. The form is a real View. There's no embedded browser, no JavaScript bridge, no tracker. It's pure SwiftUI with zero external dependencies — nothing to audit, nothing to break on the next iOS release — and it supports iOS 16 and up.

Add it to Xcode with Swift Package Manager and you're done. One line in File → Add Package Dependencies…, two lines in your app.

The same project as your web feedback

This is the part that matters if you ship on more than one surface. Feedback from the iOS SDK lands in the same SeggWat project as feedback from your web widget. Same inbox, same triage, same MCP server, same CLI, same iOS triage app. A bug reported from your iPhone app sits right next to one reported from your marketing site, instead of in a separate tool you forget to check.

You own that data. It goes to your project — EU-hosted, or self-hosted on the open platform — not into a black box.

Bugs come with screenshots

Flip on screenshotsEnabled and the form gains an Add Screenshot button. It captures the current screen and opens a fullscreen annotation editor built on PencilKit — pen, arrow, rectangle, and text tools, plus a blackout tool to redact anything sensitive before it leaves the device. Undo, redo, color presets, the lot. The annotated image rides along with the submission.

It's the same annotate-before-you-send flow as the web widget, done natively.

Ratings and NPS, one method

Feedback isn't the only signal. One call covers every rating type:

swift
try await SeggWat.shared.submitRating(.helpful(true), screenName: "/settings")
try await SeggWat.shared.submitRating(.star(value: 4), screenName: "/product")
try await SeggWat.shared.submitRating(.nps(9), screenName: "/checkout")

Helpful, star (1–5 or a custom max), and NPS (0–10) all aggregate into the same dashboard stats as your web ratings — so a single NPS number spans every place your users live.

Try it

The SDK is MIT-licensed and on GitHub. Add the package, drop in SeggWat.configure(projectKey:) and .seggwatFeedbackButton(), and you're collecting native feedback in the time it takes to read this post.

Native SwiftUI, zero dependencies, screenshot annotation, star and NPS ratings, English/German/Swedish out of the box, EU-hosted. Same feedback, now on every screen your users touch.

Related Posts

Blog