.changelog/3567.md
IOHIDManager, GCController, and ExternalAccessory; includes KnownDeviceProfiles VID:PID database for 20+ gaming peripherals.ProvenanceCompanionDriverKit source files and entitlements for a HIDDriverKit user-space driver targeting DS3, GameCube adapters, and steering wheels; requires manual Xcode target creation and Apple DriverKit entitlement approval.@Observable manager handling OSSystemExtensionRequest lifecycle (activate/deactivate/status) for the embedded dext.DriverStoreManager + DriverProduct for purchasing driver packs (DS3, GameCube, steering wheel, legacy HID, memory card, all-access bundle) with Transaction.currentEntitlements-based verification.connectedDevices.contains() was using synthesized Equatable (which includes the random id: UUID), so the same physical device could be added multiple times. Deduplication now matches on vendorID + productID + transport.didFinishWithResult always transitioned to .active even for deactivation requests. A pendingDeactivation flag now correctly transitions to .notInstalled after a successful deactivation.deinit isolation — deinit now uses MainActor.assumeIsolated to safely call stopScanning() from the @MainActor-isolated context; removed unnecessary NSObject superclass.DriverExtensionManager (which imports SystemExtensions, unavailable on tvOS) and all DriverKit UI in #if !os(tvOS) guards; .navigationBarTitleDisplayMode calls in DriverStoreView and PeripheralsTabView are now also guarded since the modifier is unavailable on tvOS.USBPeripheralManager.storageDirectory using .cachesDirectory on all platforms; tvOS does not have a writable Documents directory so any future persistent state written by the manager will use Caches by default.com.apple.developer.system-extension.install and com.apple.developer.in-app-payments to both development and App Store entitlement files.Localizable.xcstrings String Catalog (Xcode 15+ format). PeripheralCategory exposes localizationKey for host-app lookups; DriverProductID.displayName and .localizedDescription use String(localized:). PeripheralsTabView, DriverStoreView, and SettingsTabView updated to use localized keys throughout.unlocalized_text_init custom rule that warns when Text() is called with a non-literal argument in ProvenanceCompanion source files.Scripts/audit_localization.sh — extended to cover ProvenanceCompanion, added .xcstrings String Catalog key-count reporting (section 3b), and included String(localized:) usage in gap analysis.