New · iOS & macOS SDK

Voice feedback, now native on iOS

Everything customers love about the VoiceCommit widget — voice-to-issue feedback with AI triage — as a native Swift Package for your iOS and macOS apps. Real on-device transcription, no webview, one line to present.

Swift Package Manager · iOS 16+ / macOS 13+ · SwiftUI

Why a native SDK?

You can't just embed the web widget in an app.

WKWebView can't capture voice. iOS's web view doesn't support the Web Speech API, so a wrapped web widget can't transcribe speech. The native SDK uses SFSpeechRecognizer directly.

Same backend, zero new infrastructure. It posts to the same VoiceCommit endpoints, so feedback flows into the dashboard, AI analysis, notifications, and GitHub exactly like your website feedback.

Feels like part of the app. A native SwiftUI sheet with light/dark support — not a jarring web overlay.

What you get

Drop-in SwiftUI

Configure once, then present a feedback sheet with one line or a view modifier. No UI to build.

On-device transcription

Live speech-to-text via SFSpeechRecognizer — no webview, no round-trip, works while offline where supported.

Same AI dashboard

Submissions land in the exact same VoiceCommit dashboard, AI analysis, notifications, and GitHub pipeline as the web widget.

Automatic context

App version, build, OS, device model and locale are attached to every submission and fed to the AI analysis.

Graceful fallback

If mic or speech permission is denied — or the device lacks speech support — users type their feedback instead.

No API key

Authentication is a simple allowed-domain match, just like the web widget. Nothing secret to ship in your binary.

Add it in three steps

From zero to a working feedback sheet in a few minutes.

1. Add the package

In Xcode, File → Add Package Dependencies…, or in your Package.swift:

swift
.package(url: "https://github.com/bennewton999/voicecommit-widget-ios.git", from: "1.0.0")

// then, in your target:
.product(name: "VoiceCommitWidget", package: "voicecommit-widget-ios")

2. Configure once at launch

Use your widget id and a domain from the widget's allowed-domains list.

swift
import VoiceCommitWidget

@main
struct MyApp: App {
    init() {
        VoiceCommitWidget.configure(widgetId: "YOUR_WIDGET_ID", domain: "yourapp.app")
    }
    // ...
}

3. Present the sheet

Attach it to any button. Pass optional context to sharpen AI triage.

swift
struct SettingsView: View {
    @State private var showFeedback = false

    var body: some View {
        Button("Send feedback") { showFeedback = true }
            .voiceCommitFeedbackSheet(
                isPresented: $showFeedback,
                context: ["screen": "settings", "userId": user.id]
            )
    }
}

Ship voice feedback in your app this week

Create a widget, register your app's domain, and drop the sheet in. Your mobile feedback shows up right next to your web feedback.