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
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.
Configure once, then present a feedback sheet with one line or a view modifier. No UI to build.
Live speech-to-text via SFSpeechRecognizer — no webview, no round-trip, works while offline where supported.
Submissions land in the exact same VoiceCommit dashboard, AI analysis, notifications, and GitHub pipeline as the web widget.
App version, build, OS, device model and locale are attached to every submission and fed to the AI analysis.
If mic or speech permission is denied — or the device lacks speech support — users type their feedback instead.
Authentication is a simple allowed-domain match, just like the web widget. Nothing secret to ship in your binary.
From zero to a working feedback sheet in a few minutes.
In Xcode, File → Add Package Dependencies…, or in your Package.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")Use your widget id and a domain from the widget's allowed-domains list.
import VoiceCommitWidget
@main
struct MyApp: App {
init() {
VoiceCommitWidget.configure(widgetId: "YOUR_WIDGET_ID", domain: "yourapp.app")
}
// ...
}Attach it to any button. Pass optional context to sharpen AI triage.
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]
)
}
}yourapp.app) to the widget's allowed domains in the dashboard, and add NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription to your app's Info.plist. Full details are in the SDK README.Create a widget, register your app's domain, and drop the sheet in. Your mobile feedback shows up right next to your web feedback.