Hello everyone:
Description
Environment
- iOS: 26.5
- Xcode: 26.3
- App version: 1.0 / 2.0
Scenario background
App communicates with unpaired Bluetooth peripherals.
- App v1.0: Use only
CBCentralManagerfor scanning and connecting peripherals(D2, D3…). No AccessorySetupKit involved. - App v2.0: Hybrid approach:
ASAccessorySession+CBCentralManager.
CBCentralManager is initialized after ASAccessorySession becomes active.
Info.plist configuration
<key>NSAccessorySetupKitSupports</key>
<array>
<string>Bluetooth</string>
</array>
<key>NSAccessorySetupBluetoothServices</key>
<array>
<string>xxxx</string>
</array>
<key>NSAccessorySetupBluetoothNames</key>
<array>
<string>MyDevice</string>
</array>
Observed test behavior For users upgrading from v1.0 to v2.0:
ASAccessorySession.accessoriesreturns empty.- Old
CBCentralManagerinstance(C1) works fine: can scan and connect peripherals D1, D2, D3. - Calling
showPicker()while C1 is alive throws error:
Error Domain=ASErrorDomain Code=550
- Destroy C1 before invoking
showPicker(). After user authorizes new accessory D1 via picker, create a brand‑newCBCentralManagerinstance(C2). - Regression: C2 can only scan & communicate with authorized D1. Peripherals D2, D3 can no longer be discovered.
Questions
- In v1.0 we stored
CBPeripheral.identifierfor unpaired devices D2, D3. How to implement seamless migration after upgrading to v2.0? - After user authorizes D1 in v2.0, is there a callback trigger when D2 / D3 come into proximity? Can we auto‑launch
showPicker()on that trigger? - AccessorySetupKit workflow feels restrictive. Is multi‑device one‑tap authorization planned for peripherals like D2, D3 which may not be nearby at authorization time?