El framework Core Motion es un componente del sistema iOS que proporciona acceso a los datos del acelerómetro, giróscopo, magnetómetro y podómetro en dispositivos Apple. Según la Apple Developer Documentation, 2025, el framework procesa datos brutos de los sensores y los convierte en métricas comprensibles: aceleración, velocidad angular, orientación y cantidad de pasos. Una API única para todos los sensores de movimiento permite a los desarrolladores crear podómetros, aplicaciones de fitness y juegos con control por inclinación del dispositivo.
Puntos clave
Core Motion es un framework de sistema de Apple, presentado en iOS 4 para trabajar con sensores de movimiento del dispositivo. Proporciona una interfaz unificada para acceder al acelerómetro, giróscopo, magnetómetro y podómetro, liberando al desarrollador de la necesidad de trabajar con controladores de hardware a bajo nivel.
La ventaja clave de Core Motion es el filtrado por hardware de datos. El framework combina automáticamente las lecturas del acelerómetro y el giróscopo para calcular la userAcceleration pura sin el componente gravitacional, y también proporciona la orientación del dispositivo en el espacio en forma de cuaterniones y ángulos de Euler.
Según Apple WWDC 2023, Core Motion se utiliza en más del 80% de las aplicaciones de fitness en la App Store. El framework está optimizado para el consumo de energía: la frecuencia de muestreo de los sensores disminuye automáticamente cuando no hay suscriptores, prolongando la duración de la batería del dispositivo.
Una característica arquitectónica importante es el uso del coprocesador de la serie M (Motion coprocessor), que procesa los datos de los sensores de movimiento independientemente del procesador principal de la serie A. A partir del chip M7 (iPhone 5S), el coprocesador recopila continuamente datos del acelerómetro y el giróscopo, permitiendo que CMPedometer y CMAltimeter funcionen en segundo plano con la pantalla bloqueada consumiendo menos de 1 mW. Esto fue posible gracias al aislamiento del hardware: el coprocesador tiene su propia memoria no volátil y bus de datos independiente del sistema principal.
La arquitectura de Core Motion se basa en un modelo singleton a través de CMMotionManager. La aplicación obtiene una única instancia del administrador y a través de ella configura la frecuencia de actualización, inicia o detiene la recopilación de datos para cada tipo de sensor. Los datos llegan a través de bloques de cierre en el intervalo especificado.
El framework utiliza dos modos de obtención de datos: pull (sondeo activo mediante startAccelerometerUpdates) y push (recepción pasiva mediante startAccelerometerUpdatesToQueue). El modo push es preferible para aplicaciones de UI, ya que los datos se entregan en la cola especificada sin bloquear el hilo principal.
import CoreMotion
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
guard motionManager
.isAccelerometerAvailable else { return }
motionManager.startAccelerometerUpdates(
to: OperationQueue.current()!
) { data, _ in
guard let accel = data?.acceleration else { return }
print("X: \(accel.x), Y: \(accel.y), Z: \(accel.z)")
}
Core Motion proporciona acceso a cuatro categorías de sensores: el acelerómetro mide la aceleración lineal en tres ejes, el giróscopo mide la velocidad angular de rotación y el magnetómetro mide la intensidad del campo magnético para la brújula. La cuarta categoría son los datos combinados de CMDeviceMotion, que incluyen lecturas filtradas de todos los sensores.
CMDeviceMotion es la clase más valiosa para el desarrollo. Proporciona userAcceleration (aceleración sin gravedad), rotationRate (velocidad de rotación), magneticField (vector del campo magnético) y attitude (orientación del dispositivo como cuaternión o ángulos de Euler). Para calcular attitude, Core Motion utiliza la fusión de sensores del giróscopo y el acelerómetro mediante un algoritmo similar a un filtro complementario.
El magnetómetro se utiliza para la corrección de deriva del giróscopo. Un giróscopo puro acumula errores con el tiempo debido a la deriva térmica y el ruido: el magnetómetro y el acelerómetro corrigen este error, proporcionando una precisión de orientación de 1 a 2 grados en posición estática.
guard motionManager
.isDeviceMotionAvailable else { return }
motionManager.deviceMotionUpdateInterval = 1.0 // 1 Hz
motionManager.startDeviceMotionUpdates(
using: .xArbitraryZVertical,
to: OperationQueue.current()!
) { motion, _ in
guard let attitude = motion?.attitude else { return }
print("Roll: \(attitude.roll)")
print("Pitch: \(attitude.pitch)")
print("Yaw: \(attitude.yaw)")
}
CMPedometer es una clase para contar pasos, distancia recorrida y ritmo de movimiento. Utiliza datos del acelerómetro con procesamiento por hardware en el coprocesador de movimiento de la serie M (M7/M8/M9/M10/M11). Esto permite que funcione en segundo plano con un consumo mínimo de energía: aproximadamente un 1% de batería por 8 horas de seguimiento continuo.
CMAltimeter es una clase para determinar la altitud relativa basada en el barómetro instalado en el iPhone 6 y versiones posteriores. Muestra el cambio de altitud con respecto al punto de inicio con una precisión de aproximadamente 1 metro. Se utiliza en aplicaciones de fitness para contar pisos y en aplicaciones de navegación para determinar cambios de elevación.
Los datos de CMPedometer están disponibles con un retraso de no más de 5 segundos para lecturas actuales. Para datos históricos, hay disponibles hasta 7 días a través de queryPedometerData. El podómetro reconoce automáticamente caminar, correr y andar en bicicleta; estos tipos de actividad están disponibles a través de queryPedometerData con filtrado por tipo.
La precisión de CMPedometer es de aproximadamente 95% al caminar normalmente y disminuye al 90% al correr. La precisión se ve afectada por: la colocación del teléfono en un bolsillo o mochila, el tipo de calzado y la superficie. Apple recomienda usar CMPedometer en combinación con Core Location para determinar la distancia al aire libre: el GPS proporciona una distancia más precisa mientras que Core Motion se encarga del conteo de pasos.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Pasos: \(pedData.numberOfSteps)")
print("Distancia: \(pedData.distance)")
}
// Acceso al altímetro
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Altitud: \(data?.relativeAltitude)")
}
La integración de Core Motion no requiere permisos especiales ni entitlements — basta con añadir la importación del framework y crear una instancia de CMMotionManager. Sin embargo, para CMPedometer a partir de iOS 11 se requiere autorización a través de CMStepCounter o mediante el uso de CMPedometer con un diálogo de permiso del sistema.
El proceso de integración incluye: crear un CMMotionManager, verificar la disponibilidad del sensor mediante isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, configurar el intervalo de actualización e iniciar la recopilación de datos. Es importante detener las actualizaciones mediante stopAccelerometerUpdates cuando los datos ya no sean necesarios, ya que esto es crítico para el consumo de energía.
Para el funcionamiento en segundo plano, CMPedometer y CMAltimeter no requieren configuración adicional — utilizan el coprocesador de movimiento. Para CMMotionManager, el funcionamiento en segundo plano no está disponible: los datos se recopilan solo cuando la aplicación está activa y en primer plano. La única condición para CMPedometer es que la aplicación debe haber sido iniciada al menos una vez por el usuario después de la instalación para inicializar la suscripción a las actualizaciones en segundo plano de iOS.
Core Motion admite frecuencia de muestreo adaptativa: si la aplicación no necesita datos en tiempo real, basta con establecer el intervalo en 1–5 Hz en lugar de 100 Hz. Para aplicaciones de fitness, la frecuencia óptima es de 10 Hz para CMMotionManager y 1 Hz para CMPedometer. Apple recomienda reducir la frecuencia al mínimo necesario para un funcionamiento correcto.
Para juegos con control por inclinación, se necesita una frecuencia de 60–100 Hz para garantizar una respuesta suave. En este caso, es importante usar startDeviceMotionUpdates con una cola separada y procesar los datos lo más rápido posible. Según Apple, 60 Hz consume aproximadamente el doble de energía que 30 Hz.
Al trabajar con Core Motion, es importante considerar la compatibilidad del dispositivo: el giróscopo está ausente en el iPhone 3GS y iPad de 1.ª generación, el magnetómetro está ausente en todos los iPads sin módulo celular. Los métodos estáticos isAccelerometerAvailable, isGyroAvailable e isDeviceMotionAvailable de la clase CMMotionManager se utilizan para verificar la disponibilidad de los sensores. En el simulador, Core Motion devuelve datos de prueba — para depurar con un sensor real, siempre se necesita un dispositivo Apple físico.
// Configuración óptima para una aplicación de fitness
motionManager.deviceMotionUpdateInterval = 0.1 // 10 Hz
motionManager.startDeviceMotionUpdates(
to: .main
) { [weak self] motion, error in
guard let self = self,
let motion = motion else { return }
if motion.userAcceleration.magnitude() > 2.0 {
self.detectedSignificantMovement()
}
}
Preguntas frecuentes
Sí, Core Motion funciona en todos los dispositivos Apple con los sensores necesarios. El acelerómetro está disponible en todos los iPhone, iPad y iPod touch. El giróscopo está en todos los iPhone 4 y posteriores, iPad 2 y posteriores. El magnetómetro solo está disponible en iPhone, no en iPad. El barómetro está en iPhone 6 y posteriores.
El impacto en la batería depende de la frecuencia de muestreo. A 100 Hz, Core Motion consume aproximadamente un 5–7% de batería por hora. A 10 Hz, aproximadamente un 1–2% por hora. CMPedometer en el coprocesador de movimiento consume menos del 1% en 8 horas de funcionamiento. Apple recomienda detener siempre las actualizaciones cuando no se necesiten datos.
Sí, CMPedometer proporciona una solución lista para usar como podómetro sin necesidad de procesar datos brutos del acelerómetro. La clase reconoce automáticamente los pasos con una precisión de aproximadamente el 95% al caminar y el 90% al correr. Para un detector de pasos personalizado, se puede usar CMMotionManager con su propio algoritmo.
Core Motion está integrado en iOS a nivel del sistema y utiliza el coprocesador de la serie M para el procesamiento de baja energía. Android usa SensorManager con acceso directo a los controladores de hardware, pero no tiene un coprocesador especializado, lo que aumenta el consumo de energía durante el seguimiento en segundo plano.
Para CMPedometer en iOS 11 y versiones posteriores, se requiere permiso del usuario. La solicitud se realiza automáticamente al crear un CMPedometer y muestra un diálogo del sistema. En Info.plist, es necesario agregar la clave NSMotionUsageDescription con una descripción de por qué la aplicación necesita acceso a los datos de movimiento.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también