fix: rebrand iOS keyboard app to Voxlen #4762
3 changed files+33−26
Modifiedios/VoxKeyboard/VoxApp/VoxApp.swift+25−18View fileUnifiedSplit
@@ -1,7 +1,7 @@
11import SwiftUI
22
33@main
4struct MarcoReidVoiceApp: App {
4struct VoxlenApp: App {
55 private var settingsManager = SettingsManager()
66
77 var body: some Scene {
@@ -32,16 +32,16 @@ struct ContentView: View {
3232 HStack {
3333 Image(systemName: "mic.fill")
3434 .font(.system(size: 32))
35 .foregroundColor(.blue)
35 .foregroundColor(Color(red: 0.45, green: 0.27, blue: 0.82))
3636 .frame(width: 56, height: 56)
37 .background(Color.blue.opacity(0.1))
37 .background(Color(red: 0.45, green: 0.27, blue: 0.82).opacity(0.1))
3838 .cornerRadius(12)
3939
4040 VStack(alignment: .leading) {
41 Text("Marco Reid Voice Keyboard")
41 Text("Voxlen")
4242 .font(.title2)
4343 .fontWeight(.bold)
44 Text("AI-Powered Grammar Correction")
44 Text("AI Voice Dictation for Professionals")
4545 .font(.caption)
4646 .foregroundColor(.secondary)
4747 }
@@ -73,7 +73,7 @@ struct ContentView: View {
7373 Text("Keyboard Not Enabled")
7474 .font(.subheadline)
7575 .fontWeight(.semibold)
76 Text("Go to Settings > General > Keyboard > Keyboards > Add New Keyboard > Marco Reid Voice")
76 Text("Go to Settings > General > Keyboard > Keyboards > Add New Keyboard > Voxlen")
7777 .font(.caption)
7878 .foregroundColor(.secondary)
7979 }
@@ -124,7 +124,7 @@ struct ContentView: View {
124124 // MARK: - Voice Dictation
125125 Section {
126126 Picker("STT Engine", selection: $settings.sttEngine) {
127 Text("Deepgram Nova-2").tag(STTEngine.deepgram)
127 Text("Deepgram Nova-3").tag(STTEngine.deepgram)
128128 Text("Apple Speech").tag(STTEngine.apple)
129129 }
130130
@@ -158,7 +158,7 @@ struct ContentView: View {
158158 } header: {
159159 Label("Voice Dictation", systemImage: "waveform")
160160 } footer: {
161 Text("Deepgram Nova-2 provides superior accuracy. Get your API key at console.deepgram.com")
161 Text("Deepgram Nova-3 provides best-in-class accuracy. Get your API key at console.deepgram.com")
162162 }
163163
164164 // MARK: - AI Provider
@@ -185,10 +185,10 @@ struct ContentView: View {
185185
186186 // MARK: - What's New
187187 Section {
188 WhatsNewRow(icon: "waveform.badge.mic", text: "Deepgram Nova-2 voice engine — 95%+ accuracy")
188 WhatsNewRow(icon: "waveform.badge.mic", text: "Deepgram Nova-3 — industry-leading accuracy")
189 WhatsNewRow(icon: "doc.text", text: "Legal & accounting smart formatting")
189190 WhatsNewRow(icon: "globe", text: "20+ language support")
190 WhatsNewRow(icon: "hand.tap.fill", text: "Haptic feedback on every key")
191 WhatsNewRow(icon: "ipad.landscape", text: "iPad optimized layout")
191 WhatsNewRow(icon: "ipad.landscape", text: "iPad optimised layout")
192192 } header: {
193193 Label("What's New", systemImage: "star.fill")
194194 }
@@ -201,17 +201,24 @@ struct ContentView: View {
201201 Text("2.0.0")
202202 .foregroundColor(.secondary)
203203 }
204 Link(destination: URL(string: "https://marcoreid.com/privacy")!) {
204 Link(destination: URL(string: "https://voxlen.ai/privacy")!) {
205205 HStack {
206206 Image(systemName: "hand.raised.fill")
207 .foregroundColor(.blue)
207 .foregroundColor(.purple)
208208 Text("Privacy Policy")
209209 }
210210 }
211 Link(destination: URL(string: "https://marcoreid.com/support")!) {
211 Link(destination: URL(string: "https://voxlen.ai/terms")!) {
212 HStack {
213 Image(systemName: "doc.text.fill")
214 .foregroundColor(.purple)
215 Text("Terms of Service")
216 }
217 }
218 Link(destination: URL(string: "https://voxlen.ai/support")!) {
212219 HStack {
213220 Image(systemName: "questionmark.circle.fill")
214 .foregroundColor(.blue)
221 .foregroundColor(.purple)
215222 Text("Support")
216223 }
217224 }
@@ -219,7 +226,7 @@ struct ContentView: View {
219226 Label("About", systemImage: "info.circle")
220227 }
221228 }
222 .navigationTitle("Marco Reid Voice")
229 .navigationTitle("Voxlen")
223230 }
224231 }
225232
@@ -241,7 +248,7 @@ struct WhatsNewRow: View {
241248 var body: some View {
242249 HStack(spacing: 12) {
243250 Image(systemName: icon)
244 .foregroundColor(.blue)
251 .foregroundColor(Color(red: 0.45, green: 0.27, blue: 0.82))
245252 .frame(width: 24)
246253 Text(text)
247254 .font(.subheadline)
@@ -266,7 +273,7 @@ enum STTEngine: String, CaseIterable {
266273// MARK: - Settings Manager
267274
268275class SettingsManager: ObservableObject {
269 private let defaults = UserDefaults(suiteName: "group.com.marcoreid.voice")!
276 private let defaults = UserDefaults(suiteName: "group.ai.voxlen")!
270277
271278 var isKeyboardEnabled: Bool = false
272279 var autoCorrectEnabled: Bool {
Modifiedios/VoxKeyboard/VoxKeyboardExtension/Info.plist+2−2View fileUnifiedSplit
@@ -3,9 +3,9 @@
33<plist version="1.0">
44<dict>
55 <key>NSSpeechRecognitionUsageDescription</key>
6 <string>Marco Reid Voice uses speech recognition to transcribe your voice into text in any app.</string>
6 <string>Voxlen uses speech recognition to transcribe your voice into text in any app.</string>
77 <key>NSMicrophoneUsageDescription</key>
8 <string>Marco Reid Voice needs microphone access for real-time voice dictation.</string>
8 <string>Voxlen needs microphone access for real-time voice dictation.</string>
99 <key>NSExtension</key>
1010 <dict>
1111 <key>NSExtensionAttributes</key>
Modifiedios/VoxKeyboard/VoxKeyboardExtension/KeyboardViewController.swift+6−6View fileUnifiedSplit
@@ -11,7 +11,7 @@ class KeyboardViewController: UIInputViewController, URLSessionWebSocketDelegate
1111 private var partialLabel: UILabel!
1212 private var polishButton: UIButton!
1313 private var micButton: UIButton!
14 private let defaults = UserDefaults(suiteName: "group.com.marcoreid.voice")
14 private let defaults = UserDefaults(suiteName: "group.ai.voxlen")
1515
1616 // MARK: - State
1717
@@ -90,7 +90,7 @@ class KeyboardViewController: UIInputViewController, URLSessionWebSocketDelegate
9090 grammarBar.addSubview(separator)
9191
9292 grammarLabel = UILabel()
93 grammarLabel.text = "Marco Reid Voice"
93 grammarLabel.text = "Voxlen"
9494 grammarLabel.font = .systemFont(ofSize: 12, weight: .medium)
9595 grammarLabel.textColor = .secondaryLabel
9696 grammarLabel.translatesAutoresizingMaskIntoConstraints = false
@@ -534,11 +534,11 @@ class KeyboardViewController: UIInputViewController, URLSessionWebSocketDelegate
534534 self.textDocumentProxy.deleteBackward()
535535 }
536536 self.textDocumentProxy.insertText(corrected + " ")
537 self.grammarLabel.text = "Marco Reid Voice"
537 self.grammarLabel.text = "Voxlen"
538538 }
539539 } catch {
540540 await MainActor.run {
541 self.grammarLabel.text = "Marco Reid Voice"
541 self.grammarLabel.text = "Voxlen"
542542 }
543543 }
544544 }
@@ -610,7 +610,7 @@ class KeyboardViewController: UIInputViewController, URLSessionWebSocketDelegate
610610 micButton.transform = .identity
611611 micButton.tintColor = brandColor
612612 micButton.setImage(UIImage(systemName: "mic.fill"), for: .normal)
613 grammarLabel.text = "Marco Reid Voice"
613 grammarLabel.text = "Voxlen"
614614 }
615615 }
616616
@@ -653,7 +653,7 @@ class KeyboardViewController: UIInputViewController, URLSessionWebSocketDelegate
653653 polishButton.isEnabled = true
654654
655655 DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
656 self?.grammarLabel.text = "Marco Reid Voice"
656 self?.grammarLabel.text = "Voxlen"
657657 }
658658 }
659659 } catch {
660660
c comment · e edit title · m merge · a approve · r request changes · ? shortcuts