Simple and reusable voice input (speech-to-text) for iOS using Speech.framework
- 🎙 Voice → Text (real-time)
- 🔁 Toggle recording (start / stop)
- ⏱ Auto stop after 5 seconds
- 🔐 Built-in permissions handling
- 📦 Easy to integrate in any project
In Xcode:
File → Add Packages...
https://github.com/ArturRybchuk/VoiceInputKit.git
---
## 🔌 Usage
### 1. Import
```swift
import VoiceInputKit
private let voiceManager = VoiceInputManager()searchController.searchBar.showsBookmarkButton = truefunc searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) {
voiceManager.requestPermissions { [weak self] granted in
DispatchQueue.main.async {
guard let self = self else { return }
if !granted {
print("Permissions not granted")
return
}
self.voiceManager.toggleRecording(
onText: { text in
self.searchController.searchBar.text = text
},
onFinish: {
print("Recording finished")
}
)
}
}
}Add this to your Info.plist:
<key>NSSpeechRecognitionUsageDescription</key>
<string>We use speech recognition for voice search</string>
<key>NSMicrophoneUsageDescription</key>
<string>We need microphone access for voice input</string>private lazy var speechIndicatorView: UIView = {
let view = UIView()
view.backgroundColor = UIColor.systemBlue
view.layer.cornerRadius = 10
view.alpha = 0
let micIcon = UIImageView(image: UIImage(systemName: "mic"))
micIcon.tintColor = .white
let label = UILabel()
label.text = "EN"
label.textColor = .white
label.font = UIFont.systemFont(ofSize: 12)
let stack = UIStackView(arrangedSubviews: [micIcon, label])
stack.spacing = 4
stack.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(stack)
NSLayoutConstraint.activate([
stack.centerXAnchor.constraint(equalTo: view.centerXAnchor),
stack.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
return view
}()- Uses
Speech.framework(not system keyboard dictation) - Works only on iOS
- Requires user permissions
- Auto stops after 5 seconds (customizable)
- Search bars
- Chat input
- Forms
- Voice commands
- iOS 13+
- Swift 5+
MIT License