"It was a swipe up to switch between Korean and English."
SwiftUI Cannot Open the Microphone Here
A watch capture view with a SwiftUI text field labelled "Speak" opened the keyboard on a real watch. It was not a setting and not the watch remembering the last mode. SwiftUI's dictation controls are declared unavailable on watchOS, so a text field gets whatever input screen the system prefers and the app has no say. There is no Speech framework on the watch either, so an app cannot run its own recognizer in a language it chooses. The route that works is WatchKit's presentTextInputController(withSuggestions:allowedInputMode:completion:), reached through WKApplication.shared().visibleInterfaceController. Checked against the installed SDK for this lesson: the SwiftUI type carries @available(watchOS, unavailable), and the watchOS SDK has no Speech framework.
nil and [] Are Different Calls
The suggestions argument decides the screen. Passing nil means there is no list, so watchOS skips the input screen and opens the microphone immediately. Passing [] means a list that happens to be empty, so watchOS shows the input screen with its keyboard, scribble and microphone choices. The difference is invisible at the call site, and it is the difference between a five-second capture and a detour. The Simulator cannot arbitrate it: the watch Simulator falls back to the keyboard either way, so a screenshot of a keyboard there proves nothing.
The Second Door Three Apps Shipped and Removed
A bilingual wearer spoke Korean into dictation that opened in English and got nonsense. Looking for the language switch, a session read the SDK header, found the variant that lets the user switch input language, concluded the only in-app way to switch was the empty-list screen with its globe, and shipped two buttons: a fast one, and an "Other language" one. Two more apps copied the pair. On the owner's wrist the second button did nothing useful, and he found the real answer himself: a swipe up on the ordinary dictation screen shows language selection. The button was removed from all three apps, and the shared dictation module now has one entry point.
Two rules came out of it. A claim that something is the only way to reach a feature is a claim about the whole platform, and getting one way to work cannot establish it: somebody has to try the ordinary way. And a Simulator screenshot of your own button proves your view rendered; it proves nothing about the system sheet the button opens. One correction from re-checking for this lesson: the language-choosing variant was once recorded as unavailable in Swift, but with the current SDK it imports and compiles. It still never goes straight to dictation, so the family's answer stays one door and the swipe.
Two Details That Bite
visibleInterfaceController is nil until a view is on screen, which is exactly where a cold launch from the Action Button can land, so "dictation unavailable" is a moment, not a state: test it on every attempt instead of latching it for the session. And the completion is built in a nonisolated factory, for the same reason as the audio tap: a closure written inside a main-actor method inherits that isolation, and the framework may call it elsewhere.