Das Core Motion Framework ist eine Systemkomponente von iOS, die Zugriff auf Daten von Beschleunigungssensor, Gyroskop, Magnetometer und Schrittzähler auf Apple-Geräten bietet. Laut der Apple Developer Documentation, 2025 verarbeitet das Framework Rohdaten der Sensoren und wandelt sie in verständliche Metriken um — Beschleunigung, Winkelgeschwindigkeit, Orientierung und Schrittzahl. Eine einheitliche API für alle Bewegungssensoren ermöglicht es Entwicklern, Schrittzähler, Fitness-Apps und Spiele mit Neigungssteuerung zu erstellen.
Wichtige Punkte
Core Motion ist ein System-Framework von Apple, das in iOS 4 für die Arbeit mit den Bewegungssensoren des Geräts eingeführt wurde. Es bietet eine einheitliche Schnittstelle für den Zugriff auf Beschleunigungssensor, Gyroskop, Magnetometer und Schrittzähler und befreit den Entwickler von der Arbeit mit Hardware-Treibern auf niedriger Ebene.
Der Hauptvorteil von Core Motion ist die Hardware-Filterung von Daten. Das Framework kombiniert automatisch die Messwerte von Beschleunigungssensor und Gyroskop, um die reine userAcceleration ohne die Gravitationskomponente zu berechnen, und liefert auch die Orientierung des Geräts im Raum in Form von Quaternionen und Euler-Winkeln.
Laut Apple WWDC 2023 wird Core Motion in über 80% der Fitness-Apps im App Store verwendet. Das Framework ist für den Stromverbrauch optimiert — die Abfragefrequenz der Sensoren wird automatisch reduziert, wenn keine Abonnenten vorhanden sind, was die Akkulaufzeit des Geräts verlängert.
Ein wichtiges architektonisches Merkmal ist die Verwendung des M-Serie-Koprozessors (Motion coprocessor), der Bewegungsdaten unabhängig vom Hauptprozessor der A-Serie verarbeitet. Ab dem M7-Chip (iPhone 5S) sammelt der Koprozessor kontinuierlich Daten von Beschleunigungssensor und Gyroskop, sodass CMPedometer und CMAltimeter im Hintergrund bei gesperrtem Bildschirm mit einem Verbrauch von weniger als 1 mW arbeiten können. Dies wurde durch Hardware-Isolation ermöglicht: Der Koprozessor verfügt über eigenen nichtflüchtigen Speicher und einen vom Hauptsystem unabhängigen Datenbus.
Die Core Motion Architektur basiert auf einem Singleton-Modell über CMMotionManager. Die Anwendung erhält eine einzige Instanz des Managers und konfiguriert darüber die Update-Frequenz, startet oder stoppt die Datenerfassung für jeden Sensortyp. Die Daten treffen über Closure-Blöcke im angegebenen Intervall ein.
Das Framework verwendet zwei Modi zur Datenerfassung: Pull (aktives Abfragen über startAccelerometerUpdates) und Push (passiver Empfang über startAccelerometerUpdatesToQueue). Der Push-Modus ist für UI-Anwendungen vorzuziehen, da die Daten in der angegebenen Warteschlange zugestellt werden, ohne den Hauptthread zu blockieren.
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 bietet Zugriff auf vier Sensorkategorien: Der Beschleunigungssensor misst die lineare Beschleunigung entlang dreier Achsen, das Gyroskop misst die Winkelrotationsgeschwindigkeit und das Magnetometer misst die Magnetfeldstärke für den Kompass. Die vierte Kategorie sind die kombinierten CMDeviceMotion-Daten, die gefilterte Messwerte aller Sensoren enthalten.
CMDeviceMotion ist die wertvollste Klasse für die Entwicklung. Sie bietet userAcceleration (Beschleunigung ohne Schwerkraft), rotationRate (Rotationsgeschwindigkeit), magneticField (Magnetfeldvektor) und attitude (Geräteorientierung als Quaternion oder Euler-Winkel). Zur Berechnung der attitude verwendet Core Motion eine Sensorfusion von Gyroskop und Beschleunigungssensor mit einem Algorithmus, der einem Komplementärfilter ähnelt.
Das Magnetometer wird zur Korrektur der Gyroskopdrift verwendet. Ein reines Gyroskop akkumuliert im Laufe der Zeit Fehler aufgrund von Temperaturdrift und Rauschen — das Magnetometer und der Beschleunigungssensor korrigieren diesen Fehler und bieten eine Orientierungsgenauigkeit von 1–2 Grad in statischer Position.
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 — eine Klasse zum Zählen von Schritten, zurückgelegter Strecke und Bewegungstempo. Sie verwendet Beschleunigungsdaten mit Hardware-Verarbeitung auf dem M-Serie-Bewegungskoprozessor (M7/M8/M9/M10/M11). Dies ermöglicht den Betrieb im Hintergrund mit minimalem Stromverbrauch — etwa 1% Akku pro 8 Stunden kontinuierlicher Verfolgung.
CMAltimeter — eine Klasse zur Bestimmung der relativen Höhe basierend auf dem Barometer, das im iPhone 6 und neuer installiert ist. Sie zeigt die Höhenänderung relativ zum Startpunkt mit einer Genauigkeit von etwa 1 Meter. Sie wird in Fitness-Apps zum Zählen von Stockwerken und in Navigations-Apps zur Bestimmung von Höhenunterschieden verwendet.
CMPedometer-Daten sind mit einer Verzögerung von maximal 5 Sekunden für aktuelle Messwerte verfügbar. Für historische Daten steht ein Abruf von bis zu 7 Tagen über queryPedometerData zur Verfügung. Der Schrittzähler erkennt automatisch Gehen, Laufen und Radfahren — diese Aktivitätstypen sind über queryPedometerData mit Filterung nach Typ verfügbar.
Die Genauigkeit von CMPedometer beträgt etwa 95% beim normalen Gehen und sinkt auf 90% beim Laufen. Die Genauigkeit wird beeinflusst durch: die Position des Telefons in der Tasche oder im Rucksack, den Schuh Typ und den Untergrund. Apple empfiehlt, CMPedometer in Kombination mit Core Location zur Entfernungsbestimmung im Freien zu verwenden — GPS liefert eine genauere Entfernung, während Core Motion die Schrittzählung übernimmt.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Schritte: \(pedData.numberOfSteps)")
print("Strecke: \(pedData.distance)")
}
// Zugriff auf den Höhenmesser
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Höhe: \(data?.relativeAltitude)")
}
Die Integration von Core Motion erfordert keine speziellen Berechtigungen oder Entitlements — fügen Sie einfach den Framework-Import hinzu und erstellen Sie eine CMMotionManager-Instanz. Für CMPedometer ab iOS 11 ist jedoch eine Autorisierung über CMStepCounter oder die Verwendung von CMPedometer mit einem Systemberechtigungsdialog erforderlich.
Der Integrationsprozess umfasst: Erstellen eines CMMotionManager, Überprüfen der Sensorverfügbarkeit über isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, Einstellen des Aktualisierungsintervalls und Starten der Datenerfassung. Es ist wichtig, Updates über stopAccelerometerUpdates zu stoppen, wenn keine Daten mehr benötigt werden — dies ist entscheidend für den Stromverbrauch.
Für den Hintergrundbetrieb benötigen CMPedometer und CMAltimeter keine zusätzliche Konfiguration — sie verwenden den Bewegungskoprozessor. Für CMMotionManager ist der Hintergrundbetrieb nicht verfügbar — Daten werden nur gesammelt, wenn die App aktiv und im Vordergrund ist. Die einzige Bedingung für CMPedometer ist, dass die App nach der Installation mindestens einmal vom Benutzer gestartet worden sein muss, um das Abonnement für Hintergrundaktualisierungen von iOS zu initialisieren.
Core Motion unterstützt adaptive Abfragefrequenz: Wenn die App keine Echtzeitdaten benötigt, reicht es, das Intervall auf 1–5 Hz statt 100 Hz einzustellen. Für Fitness-Apps beträgt die optimale Frequenz 10 Hz für CMMotionManager und 1 Hz für CMPedometer. Apple empfiehlt, die Frequenz auf das für den korrekten Betrieb notwendige Minimum zu reduzieren.
Für Spiele mit Neigungssteuerung ist eine Frequenz von 60–100 Hz erforderlich, um eine reibungslose Reaktion zu gewährleisten. In diesem Fall ist es wichtig, startDeviceMotionUpdates mit einer separaten Warteschlange zu verwenden und die Daten so schnell wie möglich zu verarbeiten. Laut Apple verbraucht 60 Hz etwa 2-mal mehr Strom als 30 Hz.
Bei der Arbeit mit Core Motion ist die Gerätekompatibilität zu beachten: Das Gyroskop fehlt auf dem iPhone 3GS und iPad der 1. Generation, das Magnetometer fehlt auf allen iPads ohne Mobilfunkmodul. Zur Überprüfung der Sensorverfügbarkeit werden die statischen Methoden isAccelerometerAvailable, isGyroAvailable und isDeviceMotionAvailable der Klasse CMMotionManager verwendet. Im Simulator gibt Core Motion Testdaten zurück — zum Debuggen auf einem echten Sensor ist immer ein physisches Apple-Gerät erforderlich.
// Optimale Einstellung für Fitness-App
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()
}
}
Häufig gestellte Fragen
Ja, Core Motion funktioniert auf allen Apple-Geräten mit den erforderlichen Sensoren. Der Beschleunigungssensor ist auf allen iPhone, iPad und iPod touch verfügbar. Das Gyroskop ist auf allen iPhone 4 und neuer, iPad 2 und neuer verfügbar. Das Magnetometer ist nur auf dem iPhone verfügbar, nicht auf dem iPad. Das Barometer ist auf dem iPhone 6 und neuer verfügbar.
Die Auswirkung auf den Akku hängt von der Abfragefrequenz ab. Bei 100 Hz verbraucht Core Motion etwa 5–7% Akku pro Stunde. Bei 10 Hz — etwa 1–2% pro Stunde. CMPedometer auf dem Bewegungskoprozessor verbraucht weniger als 1% über 8 Stunden Betrieb. Apple empfiehlt, Updates immer zu stoppen, wenn keine Daten benötigt werden.
Ja, CMPedometer bietet eine fertige Lösung für einen Schrittzähler, ohne dass Rohdaten des Beschleunigungssensors verarbeitet werden müssen. Die Klasse erkennt automatisch Schritte mit etwa 95% Genauigkeit beim Gehen und 90% beim Laufen. Für einen benutzerdefinierten Schritt Detektor können Sie CMMotionManager mit Ihrem eigenen Algorithmus verwenden.
Core Motion ist auf Systemebene in iOS integriert und verwendet den M-Serie-Koprozessor für die energiearme Verarbeitung. Android verwendet SensorManager mit direktem Zugriff auf Hardware-Treiber, hat jedoch keinen spezialisierten Koprozessor, was den Stromverbrauch bei der Hintergrundverfolgung erhöht.
Für CMPedometer unter iOS 11 und neuer ist eine Benutzerberechtigung erforderlich. Die Anfrage wird automatisch beim Erstellen eines CMPedometer gestellt und zeigt einen Systemdialog an. In der Info.plist muss der Schlüssel NSMotionUsageDescription mit einer Beschreibung hinzugefügt werden, warum die App Zugriff auf Bewegungsdaten benötigt.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch