At this stage the library supports:
- BLE
- WiFi
- Migration
Install the library using the command line:
flutter pub get flutter_accessorysetupFor the full details refer apple docs
You should add the keys to the Info.plist of the iOS app to make it work.
⚠️ If you miss the required key the app will crash when you show the picker.⚠️ - ALWAYS: (Bluetooth or WiFi, or both)
<key>NSAccessorySetupKitSupports</key> <array> <string>Bluetooth</string> <string>WiFi</string> </array>
- When you use the
ASDiscoveryDescriptorwithbluetoothServiceUUID⚠️ The UUID string must be upper-cased here.⚠️
<key>NSAccessorySetupBluetoothServices</key> <array> <string>149E9E42-33AD-41AD-8665-70D153533EC1</string> </array>
- When you use the
ASDiscoveryDescriptorwithbluetoothNameSubstring⚠️ Does not work in the iOS 18 Developer beta 2.⚠️
<key>NSAccessorySetupBluetoothNames</key> <array> <string>DeviceName</string> </array>
- There is an option with manufacturer ID that is not covered here.
Use the
FlutterAccessorySetupclass. See the full code example in the Example app
final _accessorySetup =FlutterAccessorySetup();
voidactivate() {
_accessorySetup.eventStream.listen((event) {
debugPrint('Got event: ${event.eventType}');
// handle session events here
}));
await _accessorySetup.activate();
try {
_accessorySetup.showPickerForDevice(
'My Ble', Assets.images.ble.path, '4013ABDE-11C0-49E7-9939-4B4567C26ADA'
);
} onPlatformException {
debugPrint('Failed to show the picker');
}
}
voiddeactivate() {
accessorySetup.dispose();
super.deactivate();
}You app does not need Bluetooth permissions when you use the picker to work with bluetooth devices.
It is very easy for user to select the device from a picker.
⚠️ If you want to have multiple devices of the same type displayed in the picker, each device should advertise a unique name. The picker will show only one device per unique name. If your device exposes 0x1800 service, the device name in that service should be unique too⚠️ When the user closes the Picker by tapping the cross button, the
showPickerclosure emits an error (ASErrorDomain, code 700). Be prepared.⚠️ When the person picks a BLE accessory, the picker sends an event of typeASAccessoryEventType.accessoryChanged. The picker is supposed to sends an event of typeASAccessoryEventType.accessoryAdded, but I can't reproduce it at all.⚠️ If the device has been connected previously, it will be in the
session.accessoriesarray right after the session is activated.⚠️ This device will not be discoverable by the Setup Picker until the user disconnects it from the settings.⚠️ If the device has been connected by another app already, the picker will show the device as it was decorated by another app -> meaning the image and name will be from that app, not that you provide. To change the decoration the user should add the device to your app.
When the user selects the device using the picker:
- The device will be displayed in the
Accessoriesof the mobile App settings atSettings/Apps/YourApp. - The device will be displayed in the
My Devicessection atSettings/Bluetooth. - The device's info screen will display the image and name you provided to the
ASPickerDisplayItemduring the discovery process (the same that the user saw in the picker).
- The device will be displayed in the
When the user deletes the app, the device will be disconnected automatically. It won't be displayed in the
My Devicessection of theSettings/Bluetoothscreen anymore.
