Отключение iOS BLE сразу после подключения помогает только перезапуск устройства

Мое приложение использует BLE (Bluetooth 4) для подключения к физическому периферийному устройству. Мои пользователи и я неоднократно сталкивались с ошибкой, из-за которой приложение в какой-то момент перестает подключаться к периферийному устройству - вы можете увидеть указание на то, что периферийное устройство BLE обнаружено и подключение установлено, но через несколько секунд после этого подключение разрывается,

Все возвращается на круги своя только после перезапуска iDevice.

Я проделал очень большую работу по его проверке и тщательно исследовал эту проблему, пока не пришел к выводу, что это должно быть ошибкой в ​​iOS (протестировано с 7.1, но, вероятно, также и на 8.0).

Мои тесты и выводы:

  • Происходит с каждым BLE, поддерживающим iDevice.
  • Происходит как с моим собственным периферийным устройством BLE, так и с другими продуктами BLE сторонних производителей, которые, как известно, отлично работают в обычных случаях.
  • Иногда он может хорошо работать даже для 50 запусков, но в конечном итоге он потерпит неудачу.
  • Сброс настроек сети и заводских настроек не помог.
  • Протестировано и встречается с различными приложениями: ##
    • Мое собственное приложение.
    • Очистите новый проект XCode, который сканирует только периферийные устройства и пытается подключиться к первому и единственному обнаруженному периферийному устройству.
    • Пример приложения Apple BLE: термометр здоровья (с соответствующими изменениями, поскольку у меня нет этого конкретного периферийного устройства).
    • Сторонние приложения, включая общий LightBlue.
    • Важное примечание: каждый из описанных выше вариантов некоторое время работал идеально (несколько запусков), в какой-то момент внезапно останавливался, а затем снова работал после перезапуска устройства.
  • Процедура подключения, по-видимому, дает сбой при попытке обнаружить сервисы периферийного устройства - то есть он обнаруживается и подключается нормально, но при запуске обнаружения сервисов он перестает отвечать (didDiscoverServices не вызывается).
  • Я, конечно, перепробовал много подходов, найденных в сети, но без удачи.

Кто-нибудь может пролить свет на эту проблему?

  • Это известная проблема?
  • Это было исправлено в недавнем обновлении iOS?
  • Это будет исправлено?

Вы можете себе представить, какое негативное влияние такая проблема оказывает на опыт моих пользователей, так как подключение BLE имеет важное значение для продукта.

Буду признателен за ваши советы и предложения о том, как ее решить.

Спасибо!

Обновить:

Apple ответила на мой запрос технической поддержки:

Итог (ы):

  • Они сказали, что исправили некоторые ошибки, связанные с BLE в iOS 8, и призвали нас проверить, происходит ли это в iOS 8.
  • Они сказали, чтобы начать с этого, и если нет, попробуйте диагностировать проблему с помощью служебного приложения, которое они предоставляют.

Пока что для меня это не произошло с iOS 8, но с другой стороны, я вижу сообщения о других проблемах Bluetooth, которые не обязательно связаны, но кто знает.

Полный ответ:

Я отвечаю на ваш вывод, что вы и ваши клиенты обнаруживаете, что после некоторого использования iOS BLE не может поддерживать соединение. Вы указываете, что проблема была идентифицирована с iOS 7.1. Возникли проблемы с iOS BLE, о которых сообщалось и которые были исправлены в iOS 8.0. Чтобы наилучшим образом определить, была ли решена ваша проблема, конечно, самым простым способом было бы установить iOS 8 и посмотреть, можно ли воспроизвести проблему. Тем не менее, когда вы сообщаете, что вы можете повторить проблему на вашем устройстве с iOS 7.1, первым делом необходимо получить профиль Bluetooth Server, установить его на ваше устройство, повторить проблему, а затем получить журнал сервера BLE при возникновении проблемы. В профиле BLE-сервер будет сообщать дополнительные подробности регистрации, которые могут помочь сообщить о проблемах, с которыми сталкивается сервер. Мы можем видеть, является ли проблема той, о которой сообщалось ранее. Нужно учесть, что для решения всех новых проблем с отчетами об ошибках Core Bluetooth-инжиниринг требует, чтобы все проблемы были исправлены с помощью текущей версии iOS - 8.0. Для клиентов с iOS 7.x больше не будет обновлений iOS 7 - все исправления программного обеспечения и исправления ошибок будут с iOS 8. По этой причине, будут исследованы только проблемы, о которых сообщается с iOS 8. Вы можете получить профиль сервера BLE с веб-страницы отчета об ошибках Apple Developer https://developer.apple.com/bug-reporting/ios/bluetooth/. Инструкции по установке профиля и записи журнала представлены на веб-странице. Если вы захватываете журнал с iOS 7.x, вы можете отправить его мне для просмотра. Тем не менее, это будет в некотором роде академическим упражнением - чтобы узнать, решает ли iOS проблему или продолжает ли она возникать, нам нужно будет выяснить, возникает ли эта проблема под iOS 8. Что-то следует иметь в виду, как только вы обновите устройство до iOS 8, вы не сможете восстановить его до предыдущей версии. Я рад пересмотреть ваши результаты. Однако, если проблема сохраняется в iOS 8, лучше всего отправить отчет об ошибке, чтобы привлечь внимание инженеров Core Bluetooth к этому вопросу. Вы можете отправить отчет об ошибке на веб-странице отчета об ошибках Apple Developer. - http://bugreport.apple.com/

1 ответ

Решение

Похоже, проблема решена с помощью недавнего обновления iOS (8.0 или 8.1).

Другие вопросы по тегам