accessorysetupkit

Configure Bluetooth and Wi-Fi accessory discovery with AccessorySetupKit pickers.

Updated Aug 23, 2026
One-click install
npx skills add https://github.com/KumarAdi8/AgentKit --skill accessorysetupkit
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: accessorysetupkit
Source: https://github.com/KumarAdi8/AgentKit/tree/main/skills/accessorysetupkit
Command: npx skills add https://github.com/KumarAdi8/AgentKit --skill accessorysetupkit

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

AccessorySetupKit removes the need for broad Bluetooth or Wi‑Fi permission prompts by providing a system picker that grants per-accessory access and simplifies secure discovery and authorization of nearby accessories. This prevents unnecessary permission dialogs, reduces privacy exposure, and centralizes the discovery-to-authorization flow so apps can reliably obtain identifiers for post-setup communication.

Core Features & Use Cases

  • Privacy-preserving discovery: Present a system-managed picker that grants per-device access without requesting global Bluetooth/Wi‑Fi permissions.
  • Descriptor-based matching: Define ASDiscoveryDescriptor rules (service UUIDs, name substrings, company identifiers, SSID/prefixes) to precisely target accessory models.
  • Lifecycle and event handling: Activate ASAccessorySession, handle events (.activated, .accessoryAdded, .pickerDidDismiss, .migrationComplete), and coordinate picker presentation tied to explicit user actions.
  • Bluetooth and Wi‑Fi workflows: Migrate CoreBluetooth-authorized peripherals with ASMigrationDisplayItem and connect post-setup via CoreBluetooth (using bluetoothIdentifier) or NetworkExtension (using ssid).
  • Robust error handling & review checklist: Validate Info.plist keys, avoid initializing CBCentralManager prematurely, enforce descriptor/Info.plist parity, and follow the provided review checklist to prevent crashes.
  • Example use case: Add a "Add Accessory" button that activates a session, shows a picker for specific service UUIDs, and connects to the selected accessory using its bluetoothIdentifier.

Quick Start

Activate an ASAccessorySession, create an ASPickerDisplayItem with an ASDiscoveryDescriptor that matches your device, and present the picker in response to a user action to discover and authorize the accessory.

Frequently Asked Questions about accessorysetupkit

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I connect Bluetooth and Wi-Fi accessories in iOS 18 without requesting broad privacy permissions?

AccessorySetupKit uses a system-managed picker to grant per-device access for Bluetooth and Wi-Fi accessories, preventing broad permission prompts and reducing privacy exposure during discovery and authorization. This removes the need for global Bluetooth or Wi-Fi permissions.

What is descriptor-based discovery for Bluetooth and Wi-Fi accessories?

Descriptor-based discovery uses ASDiscoveryDescriptor rules to match specific accessory models by service UUIDs, name substrings, company identifiers, or SSID prefixes. This precisely targets devices during the system picker presentation without exposing unrelated nearby accessories.

Can I migrate CoreBluetooth-authorized peripherals to the new accessory picker workflow?

Yes, you can migrate CoreBluetooth-authorized peripherals using ASMigrationDisplayItem and handle the .migrationComplete event within an active ASAccessorySession. This allows existing connected devices to transition to the privacy-preserving access model.

How do I connect to an accessory after the system picker dismisss?

After the picker dismisss, connect to the selected accessory using CoreBluetooth via its bluetoothIdentifier, or join the accessory's Wi-Fi network using NEHotspotConfiguration with its SSID. Handle the .pickerDidDismiss event to trigger these post-setup connections.

Why does my accessory setup crash when presenting the system picker?

Crashes often occur from initializing CBCentralManager prematurely, mismatched descriptor and Info.plist entitlement keys, or failing to validate Info.plist configurations. Enforce descriptor and Info.plist parity and follow the review checklist to prevent these setup failures.