I have a custom keyboard (UIInputViewController, Full Access). For a dictation feature it opens its containing app to record audio (the keyboard can't use the microphone) and then needs to return the user to the host app they were typing in. That requires knowing the host app.
Through iOS 26.3 this worked, because the host bundle id was exposed on the keyboard's input-session connection. On iOS 26.4 / 26.5 it is now nil, and every route I have tried is blocked:
- UIInputViewController _hostApplicationBundleIdentifier -> nil
- _hostProcessIdentifier and the host audit token are available, but:
- RBSProcessHandle handleForAuditToken: / handleForIdentifier: -> "Client not entitled"
- SecTaskCopySigningIdentifier / SecTaskCopyValueForEntitlement -> nil (sandbox)
- proc_pidpath -> EPERM
- UIKeyboardImpl _remoteAppId / _remoteLocalizedAppName -> nil
- The keyboard arbiter client-change event fires in SpringBoard, not in the extension process
However, at least one shipping keyboard still does this on iOS 26.5. I verified in device logs that Yandex Keyboard launches its container app with a URL containing the correct, current host bundle id, and it is live: it reported net.whatsapp.WhatsApp, then net.whatsapp.WhatsAppSMB when the host was WhatsApp Business. So the capability clearly still exists for some apps.
Questions:
- Is there a supported API on iOS 26.4+ for a keyboard extension to identify its host app?
- If it requires an entitlement, can developers request it, and how?
- If there is no public path, is the intended approach the system "back to previous app" breadcrumb (manual) plus a containing-app round trip?
I have also filed Feedback (FB#######).
Thanks.