Back to Provenance

3567

.changelog/3567.md

3.3.13.4 KB
Original Source

Added

  • PVUSBManager — new SPM module for USB/HID peripheral discovery using IOHIDManager, GCController, and ExternalAccessory; includes KnownDeviceProfiles VID:PID database for 20+ gaming peripherals.
  • DriverKit Extension ScaffoldProvenanceCompanionDriverKit 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.
  • DriverExtensionManager@Observable manager handling OSSystemExtensionRequest lifecycle (activate/deactivate/status) for the embedded dext.
  • StoreKit 2 IAPDriverStoreManager + DriverProduct for purchasing driver packs (DS3, GameCube, steering wheel, legacy HID, memory card, all-access bundle) with Transaction.currentEntitlements-based verification.
  • DriverStoreView — full-screen sheet with product cards, restore purchases, and "works system-wide" banner explaining cross-app driver reuse.
  • Enhanced PeripheralsTabView — live connected-device list with transport badges, VID:PID display, DriverKit status row with activation button, and supported devices browser.

Fixed

  • USBPeripheralManager deduplicationconnectedDevices.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.
  • DriverExtensionManager deactivation statedidFinishWithResult always transitioned to .active even for deactivation requests. A pendingDeactivation flag now correctly transitions to .notInstalled after a successful deactivation.
  • USBPeripheralManager deinit isolationdeinit now uses MainActor.assumeIsolated to safely call stopScanning() from the @MainActor-isolated context; removed unnecessary NSObject superclass.
  • tvOS multi-platform compilation — wrapped 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.
  • tvOS file storage — added 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.

Changed

  • ProvenanceCompanion entitlements — added com.apple.developer.system-extension.install and com.apple.developer.in-app-payments to both development and App Store entitlement files.
  • ProvenanceCompanion localization — all UI strings are now backed by a 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.
  • SwiftLint — added 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.