У меня есть приложение для определения дальности маяка, которое раньше отлично работало как на переднем плане, так и на заднем плане в течение длительных периодов времени (дней). Недавно он внезапно перестал показывать какие-либо маяки даже на переднем плане. Как правило, он будет работать нормально в течение 18–20 минут, затем остановится и покажет, что мои маяки ранжируются со значением 0 RSSI (просмотр с использованием отладочных сообщений в окне журнала xcode), даже если маяки находятся всего в нескольких футах и ранее регистрировали значения RSSI. из -60. Через несколько секунд он будет продолжать запускать событие didRangeBeacons каждую секунду, но с пустым массивом маяков.
Я видел еще одну ветку здесь о том, что в iOS 12.1 есть ошибка, из-за которой диапазон останавливается в фоновом режиме, и что во второй бета-версии 12.2 есть исправление, поэтому я обновил iPad, который я использую для тестирования, с 12.1 до 12.2 бета-4, но все еще проблема.
Когда устройство переходит в это состояние, я могу остановить приложение и снова запустить его, и оно снова будет работать примерно 20 минут:
ИЛИ
Я могу переключиться на экран настроек на iPad, пока мое приложение все еще работает и просматривает мои сообщения в xCode. Как только я открываю экран настроек, я вижу, что отладочные сообщения сразу же снова начинают показывать маяки. Я могу вернуться к своему приложению, и оно будет продолжать работать около 20 минут, а затем снова произойдет сбой.
У меня есть CLLocationManager pausesLocationUpdatesAutomatically, установленный в false.
Это почти звучит так, как будто Bluetooth отключается, но это очень сбивает с толку.
ОБНОВИТЬ:
Я видел, что приложение будет продолжать работать часами в фоновом режиме, если экран выключен/заблокирован. Он перестает работать только в том случае, если экран включен на переднем или заднем плане.
Я попытался сбросить тестовый iPad, а также сбросить настройки сети и разрешения на местоположение без каких-либо изменений в наблюдаемой производительности.
Это похоже на ту же ситуацию, которая произошла, когда Apple впервые выпустила iOS 10 и сломала ранжирование маяка.
ОБНОВЛЕНИЕ 2:
Проверка следующих событий CLLocationManager, и ни одно из них не запускается при остановке диапазона:
сделалFailWithError
ранжированиеBeaconsDidFailForRegion
locationManagerDidPauseLocationUpdates
сделалExitRegion
сделалChangeAuthorizationStatus
Кроме того, запуск файла gpx в цикле для имитации изменения местоположения не устраняет наблюдаемую ошибку.





Обнаружил, что эта проблема связана с аппаратным обеспечением. При тестировании на iPad Mini есть проблема, а при тестировании на iPhone XS — нет (оба используют OS 12.2).
И, как ни странно, использование iBeacon от другого производителя (но с идентичными настройками рекламы) также решило бы проблему. В этом случае использование iPad или телефона будет работать.