Измерение и приборостроение
Создание приложения для отслеживания фитнеса с интеграцией данных датчиков в Ios
Table of Contents
Почему данные датчиков важны в фитнес-приложениях
Современные устройства iOS упаковывают массив датчиков, которые могут обнаруживать движение, местоположение и даже частоту сердечных сокращений. Интеграция этих датчиков в приложение для отслеживания фитнеса превращает необработанные аппаратные данные в значимые показатели, такие как количество шагов, пройденное расстояние, сожженные калории и карты маршрутов. Нажав на фреймворки Core Motion и Core Location , разработчики могут создавать приложения, которые чувствуют себя интеллектуальными и отзывчивыми, давая пользователям точную обратную связь о своих тренировках. Кроме того, данные датчиков позволяют использовать расширенные функции, такие как классификация активности (ходьба, бег, езда на велосипеде) и обратная связь в реальном времени во время упражнений, которые необходимы для привлечения фитнес-приложений.
Ключевые датчики, доступные на устройствах iOS
Прежде чем погрузиться в код, важно понять, какие датчики находятся в вашем распоряжении:
- Акселерометр — измеряет силы ускорения, используемые для обнаружения шагов и ориентации.
- Гироскоп — измеряет вращение, помогает с классификацией активности и обнаружением падения.
- GPS — обеспечивает точное местоположение, скорость и отслеживание маршрута.
- Магнитометр — обеспечивает направление компаса, полезное для навигационных функций.
- Барометр — измеряет изменения высоты, используется для подсчета пола и увеличения высоты.
- Датчики сердечного ритма — доступны через Apple Watch или сторонние устройства Bluetooth, интегрированные через HealthKit или Core Bluetooth.
Каждый датчик требует определенных рамок: Core Motion для акселерометра, гироскопа и магнитометра; Core Location для GPS и барометра; HealthKit для частоты сердечных сокращений и других данных о здоровье.
Создайте свою среду развития
Начните с установки Xcode (доступного в Mac App Store) и создания нового проекта iOS. Выберите шаблон App и убедитесь, что у вас есть учетная запись Apple Developer для тестирования на реальных устройствах.Данные датчика часто требуют реального оборудования; тренажеры имеют ограниченную поддержку датчиков (например, отсутствие высоты GPS, отсутствие реального шума акселерометра).
В вашем проекте Xcode включите необходимые возможности в разделе Подпись и усилие; Возможности :
- Услуги по размещению — для GPS и мониторинга региона.
- HealthKit — если вы планируете читать/писать данные о здоровье.
- Режимы фона — проверьте «Обновления местоположения» и «Аудио, AirPlay и Picture in Picture», если требуется аудиообратная связь.
Добавить соответствующие права и клавиши Info.plist. Например, добавить и с удобными для пользователя объяснениями.
Запрос разрешений правильным способом
Пользователи все больше осознают конфиденциальность. Всегда запрашивайте разрешения в точке, где функция действительно нужна, а не при запуске. Для разрешений на местоположение используйте CLLocationManager:
import CoreLocation
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()
Для данных о движении используйте CMMotionManager. Обратите внимание, что данные о движении не требуют явного разрешения пользователя (это считается внутренним устройством), но вы все равно должны объяснить, почему вам это нужно в вашей политике конфиденциальности. Для данных HealthKit вы должны иметь действительный HKHealthStore и позвонить . Предоставьте четкие, краткие строки в Info.plist, чтобы построить доверие.
Внедрение сбора данных датчиков
Сбор данных является основой вашего фитнес-приложения. Ниже мы рассмотрим сбор движений и местоположения.
Данные акселерометра и гироскопа с основным движением
Используйте CMMotionManager для запуска обновлений. Выберите интервал обновления, который уравновешивает точность и время автономной работы. Для подсчета шагов типично 1/50 секунды (20 мс), но для обновлений пользовательского интерфейса достаточно 1/10 секунды.
import CoreMotion
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
motionManager.startAccelerometerUpdates(to: .main) { (data, error) in
guard let accelData = data else { return }
// Use accelData.acceleration.x, .y, .z
}
Для гироскопа и магнитометра существуют аналогичные методы: и .Если вам нужно устройство установки (вращения относительно гравитации), используйте , которое объединяет данные акселерометра, гироскопа и магнитометра.
GPS и данные о местоположении с основным местоположением
Настройте CLLocationManager для получения обновлений местоположения. Настройте желаемую точность на основе активности. Для наружных пробежек подходит; для ходьбы в помещении экономит батарею.
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 5 // meters
locationManager.startUpdatingLocation()
Внедрить метод делегирования для обработки новых координат. Используйте свойство горизонтальной точности для фильтрации показаний низкого качества. Для картографирования маршрута храните координаты вместе с временными метками.
Обработка данных датчиков в полезные метрики
Сырые данные датчиков шумны. Процессинговые этапы обычно включают фильтрацию, калибровку и вычисления.
Счет шагов с акселерометра
Используя алгоритм обнаружения пиков по величине ускорения. Общий подход заключается в вычислении евклидовой нормы (sqrt(x2+y2+z2)), применении фильтра высокого прохода для удаления гравитации, а затем обнаружении пиков выше порога. Для производства рассмотрите возможность использования встроенного CMPedometer , который обеспечивает подсчет шагов и каденцию без необходимости самостоятельно осуществлять обнаружение.
if CMPedometer.isStepCountingAvailable() {
var pedometer = CMPedometer()
pedometer.startUpdates(from: Date()) { (data, error) in
if let steps = data?.numberOfSteps {
// update UI
}
}
}
Также, CMPedometer может обеспечить расстояние, скорость и этажи, вознесенные/спущенные.
Классификация деятельности
Используйте CMMotionActivityManager для автоматической классификации состояния движения пользователя (ходьба, бег, езда на велосипеде, стационарное движение). Это уменьшает необходимость в отдельных алгоритмах обнаружения и обеспечивает контекст высокого уровня.
let activityManager = CMMotionActivityManager()
activityManager.startActivityUpdates(to: .main) { (activity) in
if activity?.walking == true {
// treat as walking
} else if activity?.running == true {
// treat as running
}
}
Расстояние и скорость от GPS
Расчет расстояния между последовательными точками местоположения с использованием метода расстояния (от:) на хлорирование. Сумма расстояний для получения полного расстояния. Скорость доступна через свойство (м/с). Отфильтровать невероятные скорости (например, > 30 м/с для человеческой деятельности).
Отображение данных: диаграммы и карты
Визуальная обратная связь мотивирует пользователей. Для карт маршрута используйте MKMapView и рисуйте записанные координаты, связывающие полилин, для показателей производительности используйте Charts (популярная библиотека с открытым исходным кодом) или Apple Swift Charts фреймворк (iOS 16+). Покажите сводную статистику, такую как средний темп, зоны сердечного ритма и профиль высоты.
import MapKit
let polyline = MKPolyline(coordinates: &coordinates, count: coordinates.count)
mapView.addOverlay(polyline)
Для сердечного ритма, если он подключен через HealthKit или Bluetooth, отображайте график в реальном времени с использованием WKInterfaceGraphic или SwiftUI Чарт вид.
Обработка справочных обновлений
Приложения для фитнеса часто должны собирать данные, когда приложение находится в фоновом режиме. Включить Режимы фона и выбрать «Обновления местоположения». Для непрерывного фонового местоположения используйте . Для мониторинга значительных изменений (менее частый, дружественный к батарее) используйте .
Для данных о движении фоновые обновления ограничены. Система может доставлять обновления о движении только в то время, когда приложение находится на переднем плане или вскоре после обновления местоположения. Для повышения надежности рассмотрите возможность использования CLActivityType , установленного на , чтобы намекнуть системе, что данные о местоположении связаны с тренировками.
Интеграция данных и HealthKit
Храните данные о тренировках постоянно.
- Основные данные — полезны для сложных объектов и отношений.
- SQLite — легкий, прямой SQL-контроль.
- По умолчанию пользователя — только для небольших настроек, а не для журналов датчиков.
- HealthKit — центральное хранилище данных о здоровье Apple. Написание тренировок для HealthKit делает их доступными для Apple Health и других приложений.
Для интеграции HealthKit сначала запросите разрешение на запись данных тренировки и чтение соответствующих образцов (скорость сердечных сокращений, расстояние). Затем создайте объект HKWorkout и сохраните его:
let healthStore = HKHealthStore()
let workout = HKWorkout(activityType: .running, start: startDate, end: endDate, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { (success, error) in
// handle
}
Чтение образцов частоты сердечных сокращений во время тренировки может быть выполнено одновременно с использованием HKAnchoredObjectQuery или HKObserverQuery .
Оптимизация жизни и производительности батареи
Непрерывное использование датчиков истощает батарею. Применяйте эти стратегии:
- Отрегулируйте интервалы обновления — используйте более низкую частоту для обновлений пользовательского интерфейса, более высокую только при необходимости.
- Использовать фильтрацию расстояния — Для GPS установите до разумного значения (например, 10 метров).
- Пауза при неподвижном — Используйте CMMotionActivityManager для обнаружения неподвижных периодов и остановки обновлений GPS.
- Отложенные обновления — В iOS 6+ вы можете отложить обновления местоположения для экономии энергии с помощью .
- Обработка матчей — Сбор данных в памяти и запись в хранилище периодически (например, каждые 10 минут).
Тестирование и отладка сенсорных данных
Тестирование на симуляторе ограничено. Всегда тестируйте на реальных устройствах точные данные акселерометра, GPS и частоты сердечных сокращений. Используйте функцию Xcode Симулируйте местоположение для тестирования маршрутов свободного движения. Для данных о движении вы можете использовать инструменты отладки Core Motion в меню разработчика на устройстве. Считывания датчиков журнала с временными метками для проверки правильности. Также тестируйте фоновое поведение, включив «Background Fetch» и имитируя условия сети.
Пользовательский опыт и соображения конфиденциальности
Конфиденциальность имеет решающее значение. Следуйте рекомендациям Apple по обзору магазина приложений и придерживайтесь четкой политики конфиденциальности. Никогда не обменивайтесь данными датчиков без явного согласия. Используйте обработку на устройстве, где это возможно. Для аналитики, анонимизации и агрегирования.
Пользовательский опыт должен включать:
- Экран на борту, который объясняет использование датчиков и преимущества.
- Обратная связь в реальном времени во время тренировок (аудиокниги, тактильная обратная связь).
- Возможность просматривать, редактировать и удалять данные тренировки.
- Функциональность оффлайн — хранение данных локально и синхронизация при наличии сети.
Будущие улучшения
Подумайте о добавлении:
- Интеграция с Apple Watch для отслеживания частоты сердечных сокращений и тренировок.
- Модели машинного обучения (Core ML) для расширенного распознавания активности.
- Социальные функции (лидерборды, вызовы) с помощью CloudKit.
- Для этого необходимо использовать AR (FLT:0) ARKit (FLT:1).
Заключение
Создание приложения для отслеживания фитнеса с интеграцией данных датчиков в iOS является полезной задачей. Используя Core Motion, Core Location и HealthKit, вы можете создать приложение, которое обеспечивает точную, действенную информацию при уважении конфиденциальности пользователей. Сосредоточьтесь на чистом коде, эффективности батареи и бесшовном пользовательском опыте. Начните с малого с подсчета шагов и местоположения, затем расширяйте до сердечного ритма и расширенной аналитики. Для официальной документации, обратитесь к Core Motion , Core Location и HealthKit ссылки.