I have the new iOS 26 SpeechTranscriber working in my application. The issue I am facing is how to determine if the device I am running on supports SpeechTranscriber. I was able to create code that tests if the device supports transcription but it takes a bit of time to run and thus the results are not available when the app launches. What I am looking for is a list of what iOS 26 devices it doesn't run on. I think its safe to assume any new devices will support it so if we can just have a list of what devices that can run iOS 26 and not able to do transcription it would be much faster for the app. I have determined it doesn't work on a SE 2nd Gen, it works on iPhone 12, SE 3rd Gen, iPhone 14 Pro, 15 Pro. As the SpeechTranscriber doesn't work in the simulator I can't determine that way. I have checked the docs and it doesn't list the devices it doesn't work on.
SpeechTranscriber supported Devices
This class below is my first attempt at determining if a device supports speech transcription. Any feedback on devices it works or doesn't work on would be appreciated!
import Foundation import UIKit
final class SpeechTranscriberSupportChecker {
static let shared = SpeechTranscriberSupportChecker()
private var cachedSupportsSpeechTranscriber: Bool?
private init() {}
func supportsSpeechTranscriber() -> Bool {
if let cached = cachedSupportsSpeechTranscriber {
return cached
}
let result: Bool
if !isRealDevice() {
result = false
} else if !isRunningOS26orLater() {
result = false
} else {
result = !isOnUnsupportedHardware()
}
cachedSupportsSpeechTranscriber = result
return result
}
// MARK: - Checks
private func isRealDevice() -> Bool {
#if targetEnvironment(simulator)
return false
#else
return true
#endif
}
private func isRunningOS26orLater() -> Bool {
let major = ProcessInfo.processInfo.operatingSystemVersion.majorVersion
return major >= 26
}
/// Devices that CAN run iOS/iPadOS 26 but DO NOT support Speech Transcriber
private func isOnUnsupportedHardware() -> Bool {
let model = deviceModelIdentifier()
let unsupportedModels: Set<String> = [
// MARK: - iPhone (A13 – Not Supported)
"iPhone12,1", // iPhone 11
"iPhone12,3", // iPhone 11 Pro
"iPhone12,5", // iPhone 11 Pro Max
"iPhone12,8", // iPhone SE 2nd Gen
// MARK: - iPad (A12/A13/A14 Devices)
"iPad11,6", "iPad11,7", // iPad 8th Gen (A12)
"iPad12,1", "iPad12,2", // iPad 9th Gen (A13)
"iPad11,3", "iPad11,4", // iPad Air 3rd Gen (A12)
"iPad11,1", "iPad11,2" // iPad mini 5th Gen (A12)
]
return unsupportedModels.contains(model)
}
private func deviceModelIdentifier() -> String {
var systemInfo = utsname()
uname(&systemInfo)
return withUnsafeBytes(of: systemInfo.machine) { rawPtr in
rawPtr.compactMap { c in
c != 0 ? String(UnicodeScalar(UInt8(c))) : nil
}.joined()
}
}
}
// To use: //if SpeechTranscriberSupportChecker.shared.supportsSpeechTranscriber() { // print("Speech Transcriber supported.") //} else { // print("Speech Transcriber NOT supported.") //}