The problem I initially asked about is resolved but only for macOS 14 and higher, whereas I needed macOS 13 support.
If anyone else has this issue, the key was making the call in the tab view controller before switching to the sub tab view. The announcement is made and "Text to read first" is read and the "Feature Name" is read but only on macOS 14+.
I tried various UI elements for the the NSAccessibility.post() call, the sub tab view controller, the main tab view controller, the view containing both, the text field itself, and finally the main window, none resulted in the correct behavior.
if #available(macOS 14.0, *) {
AccessibilityNotification.ScreenChanged(self).post()
AccessibilityNotification.Announcement(textField.stringValue).post()
}
else {
// Fallback on earlier versions
NSAccessibility.post(element: NSApp.mainWindow as Any,
notification: .announcementRequested,
userInfo: [.announcement: textField.stringValue, .priority: NSAccessibilityPriorityLevel.high])
NSAccessibility.post(element: textField as Any, notification: .titleChanged)
}