Skip to content

Releases: Muskupecli/KeyboardHostBundleID

1.0.1

Choose a tag to compare

@Muskupecli Muskupecli released this 25 May 10:21

Fix CocoaPods build failure: KBHostArbiterHookObjC module not found when installed via CocoaPods (both trunk and :git). The ObjC import is now guarded with #if SWIFT_PACKAGE so it only applies under SPM; CocoaPods consumers see the ObjC class via the pod's umbrella header.

Fixes #1, #2.

v1.0.0 — iOS 26.4+ host Bundle ID

Choose a tag to compare

@Muskupecli Muskupecli released this 19 Apr 06:07

First public release of KeyboardHostBundleID.

A drop-in library that lets an iOS keyboard extension (UIInputViewController) resolve the host app's Bundle ID on iOS 16 – iOS 26.4+.

Why this exists

The long-standing _hostPID + PKService + xpc_connection_copy_bundle_id chain breaks on iOS 26.4. This library ships a working replacement based on swizzling _UIKeyboardArbiterClientInputDestination and reading _sourceBundleIdentifier from the arbiter's destination-changed callback — installed via ObjC +load so it runs before UIKit's first dispatch.

What's in this release

  • KBHostArbiterHook (ObjC, iOS 26.4+): the arbiter swizzle.
  • LegacyHostResolver (Swift, iOS 16 – 26.3): the classic PKService / XPC path, for silent fallback.
  • KeyboardHost.resolve(from:): single unified entry point with automatic version dispatch.
  • Swift Package Manager + CocoaPods support.
  • Bilingual README (EN / 简体中文).
  • XcodeGen-based demo app + keyboard extension.

Install

Swift Package Manager

https://github.com/editorss/KeyboardHostBundleID.git

CocoaPods

pod 'KeyboardHostBundleID', '~> 1.0'

Usage

import KeyboardHostBundleID

class KeyboardVC: UIInputViewController {
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if let host = KeyboardHost.resolve(from: self) {
            print("Host:", host)
        }
    }
}

See README for details and the Example/ directory for a complete working demo.