Contar pasos en iOS usando el framework HealthKit
Clase 20 de 31 • Curso de Integración Nativa iOS
Resumen
¿Cómo utilizar HealthKit para contar pasos en iOS?
En el desarrollo de aplicaciones para iOS, el uso de frameworks especializados es esencial para maximizar la funcionalidad de nuestras aplicaciones. HealthKit, un potente marco de trabajo de Apple, permite a las apps acceder a datos de salud del usuario. Exploraremos cómo utilizarlo para contar los pasos que da un usuario con su iPhone.
¿Cómo configurar el proyecto para utilizar HealthKit?
Para comenzar a integrar HealthKit en tu aplicación, lo primero es preparar tu entorno de desarrollo:
-
Configuraciones del Proyecto: Abre tu proyecto en Xcode, dirígete a la sección de 'Signing & Capabilities'. Añade la capacidad de 'HealthKit' al clic en el botón '+' y seleccionando 'HealthKit'.
-
Habilitar Funciones Clínicas: Asegúrate de habilitar las funciones necesarias, como 'HealthKit Background Delivery', para rastrear eficientemente el conteo de pasos. Esto evita que se solicite constantemente permiso al usuario y se conecta directamente con la app de salud por defecto en iPhones.
¿Cómo interactuar con HealthKit desde el código?
Ahora, pasemos a la parte del código donde pondremos en práctica el uso de HealthKit:
import HealthKit
class HealthStore {
private let healthStore = HKHealthStore()
func requestAuthorization(completion: @escaping (Bool) -> Void) {
let stepType = HKQuantityType.quantityType(forIdentifier: .stepCount)!
let typesToRead: Set<HKObjectType> = [stepType]
healthStore.requestAuthorization(toShare: nil, read: typesToRead) { success, error in
completion(success)
}
}
}
¿Cómo definir funciones para contar pasos?
El conteo de pasos se realiza a través de consultas a HealthKit, definiendo diferentes rangos de fechas:
-
Obtener pasos de los últimos siete días:
func calculateSteps(completion: @escaping (Double) -> Void) { let stepType = HKSampleType.quantityType(forIdentifier: .stepCount)! let startDate = Calendar.current.date(byAdding: .day, value: -7, to: Date())! let predicate = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: .strictStartDate) let query = HKStatisticsQuery(quantityType: stepType, quantitySamplePredicate: predicate, options: [.cumulativeSum]) { _, result, _ in var resultCount = 0.0 resultCount = result?.sumQuantity()?.doubleValue(for: HKUnit.count()) ?? 0.0 completion(resultCount) } healthStore.execute(query) }
-
Pasos desde esta mañana hasta ahora:
func calculateStepsToday(completion: @escaping (Double) -> Void) { let stepType = HKSampleType.quantityType(forIdentifier: .stepCount)! let startDate = Calendar.current.startOfDay(for: Date()) let predicate = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: .strictStartDate) let query = HKStatisticsQuery(quantityType: stepType, quantitySamplePredicate: predicate, options: [.cumulativeSum]) { _, result, _ in var resultCount = 0.0 resultCount = result?.sumQuantity()?.doubleValue(for: HKUnit.count()) ?? 0.0 completion(resultCount) } healthStore.execute(query) }
-
Pasos desde el último reinicio del dispositivo:
func calculateStepsSinceLastBoot(completion: @escaping (Double) -> Void) { let stepType = HKSampleType.quantityType(forIdentifier: .stepCount)! let startDate = Date(timeIntervalSinceNow: -ProcessInfo.processInfo.systemUptime) let predicate = HKQuery.predicateForSamples(withStart: startDate, end: Date(), options: .strictStartDate) let query = HKStatisticsQuery(quantityType: stepType, quantitySamplePredicate: predicate, options: [.cumulativeSum]) { _, result, _ in var resultCount = 0.0 resultCount = result?.sumQuantity()?.doubleValue(for: HKUnit.count()) ?? 0.0 completion(resultCount) } healthStore.execute(query) }
¿Cómo mostrar los resultados en la interfaz de usuario?
Una vez que tus funciones para calcular los pasos estén listas, debes integrarlas en la interfaz de usuario:
struct ContentView: View {
@State private var stepsLastSevenDays: Double = 0.0
private let healthStore = HealthStore()
var body: some View {
VStack {
Text("Pasos en los últimos 7 días: \(stepsLastSevenDays, specifier: "%.0f")")
.onAppear {
healthStore.requestAuthorization { success in
if success {
healthStore.calculateSteps { steps in
self.stepsLastSevenDays = steps
}
}
}
}
}
}
}
¿Qué recomendaciones seguir para el desarrollo?
-
Prueba en Dispositivos Reales: Las simulaciones no son suficientes para evaluar el conteo de pasos. Asegúrate de probar tu aplicación en un dispositivo físico.
-
Manejo de Errores: Agrega control de errores para manejar cierres inesperados y problemas de red al consultar los datos de HealthKit.
-
Consentimiento del Usuario: Asegúrate de pedir permisos necesarios al usuario para acceder a sus datos de salud de forma clara.
El uso adecuado de HealthKit no solo mejora tus aplicaciones, sino que también ofrece a los usuarios una mejor experiencia al permitirles controlar su salud de manera eficiente. Sigue desarrollando tus habilidades y explorando nuevas formas de integrar tecnologías innovadoras.