# Accessory Setup Kit

> AccessorySetupKit for privacy-preserving discovery and setup of Bluetooth, Wi-Fi, or Wi-Fi Aware accessories. Use for discovery sessions, picker-based authorization, migration, accessory renaming or removal, custom filtering, and required Info.plist declarations.

- Skill: `nonameplum/accessory-setup-kit` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add nonameplum/accessory-setup-kit`
- Raw SKILL.md: https://api.skillmd.com/api/skills/nonameplum/accessory-setup-kit/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Product & Planning
- Author: nonameplum (https://skillmd.com/u/nonameplum)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/nonameplum/accessory-setup-kit

---


# AccessorySetupKit

## What to open

- Use `accessory-setup-kit/accessorysetupkit.md` for all API details and key names.
- Use `accessory-setup-kit/AccessorySetupKitEverythingBLEDevelopersNeedToKnow.md` for BLE-specific behavior notes and real-world details.
- Search within it for: "Discovering and configuring accessories", `ASAccessorySession`, `ASDiscoveryDescriptor`, `ASPickerDisplayItem`, `ASMigrationDisplayItem`, `ASPickerDisplaySettings`, and `ASAccessoryEventType`.

## Workflow

- Identify whether the accessory uses Bluetooth, Wi-Fi, or Wi-Fi Aware and set up matching discovery properties.
- Declare required Info.plist keys for AccessorySetupKit and any Bluetooth identifiers.
- Create and activate `ASAccessorySession`, then handle events on the provided queue.
- Present a picker with `ASPickerDisplayItem` items that match the accessories you support.
- Handle `.accessoryAdded` to connect to the selected device; handle `.accessoryRemoved` and `.accessoryChanged` as needed.

## Picker guidance

- A display item must include a descriptor with a Bluetooth identifier or Wi-Fi SSID/SSID prefix.
- For Bluetooth filters, provide at least a service UUID or company identifier, and optionally a name substring or manufacturer/service data mask pair.
- To do custom filtering, enable `filterDiscoveryResults` and handle `.accessoryDiscovered` by creating `ASDiscoveredDisplayItem` entries, then call `updatePicker(showing:completionHandler:)`.
- If custom filtering needs unlimited time, set `discoveryTimeout = .unbounded` and finish discovery with `finishPickerDiscovery(completionHandler:)`.

## Migration and post-setup

- Use `ASMigrationDisplayItem` to migrate previously-configured accessories into AccessorySetupKit.
- Use setup and rename options on picker items when the user should rename or finish setup in-app.

## Reminders

- Keep discovery descriptors specific to avoid broad Bluetooth access.
- For Wi-Fi Aware, set Wi-Fi Aware properties on `ASDiscoveryDescriptor` before discovery.
- Use the session event stream to keep app state in sync with user actions.

