Het Core Motion-framework — een iOS-systeemcomponent dat toegang biedt tot gegevens van de accelerometer, gyroscoop, magnetometer en stappenteller op Apple-apparaten. Volgens Apple Developer Documentation, 2025 verwerkt het framework ruwe sensorgegevens en zet deze om in begrijpelijke metrieken — versnelling, hoeksnelheid, oriëntatie en aantal stappen. Uniforme API voor alle bewegingssensoren stelt ontwikkelaars in staat stappentellers, fitnessapps en spellen te maken die worden bestuurd door het kantelen van het apparaat.
Belangrijkste punten
Core Motion — het systeemframework van Apple, geïntroduceerd in iOS 4 voor het werken met de bewegingssensoren van het apparaat. Het biedt een uniforme interface voor toegang tot de accelerometer, gyroscoop, magnetometer en stappenteller, waardoor de ontwikkelaar niet op laag niveau met hardwarestuurprogramma's hoeft te werken.
Het belangrijkste voordeel van Core Motion is hardwarematige filtering van gegevens. Het framework combineert automatisch de metingen van de accelerometer en gyroscoop om zuivere userAcceleration zonder zwaartekrachtcomponent te berekenen en geeft ook de oriëntatie van het apparaat in de ruimte in de vorm van quaternionen en Eulerhoeken.
Volgens Apple WWDC 2023 wordt Core Motion gebruikt in meer dan 80% van de fitnessapps in de App Store. Het framework is geoptimaliseerd voor energieverbruik — de pollingfrequentie van sensoren wordt automatisch verlaagd wanneer er geen abonnees zijn, waardoor de batterijduur van het apparaat wordt verlengd.
Een belangrijk architectonisch kenmerk is het gebruik van de M-serie coprocessor (Motion coprocessor), die gegevens van bewegingssensoren verwerkt onafhankelijk van de hoofdprocessor uit de A-serie. Vanaf de M7-chip (iPhone 5S) verzamelt de coprocessor continu gegevens van de accelerometer en gyroscoop, waardoor CMPedometer en CMAltimeter op de achtergrond kunnen werken met een vergrendeld scherm met een stroomverbruik van minder dan 1 mW. Dit werd mogelijk dankzij hardware-isolatie: de coprocessor heeft zijn eigen niet-vluchtige geheugen en gegevensbus, onafhankelijk van het hoofdsysteem.
De architectuur van Core Motion is gebouwd volgens het singleton-model via CMMotionManager. De app krijgt één exemplaar van de manager en configureert daarmee de updatefrequentie, start of stopt het verzamelen van gegevens van elk type sensor. Gegevens worden geleverd via blokken met het opgegeven interval.
Het framework gebruikt twee modi voor het verkrijgen van gegevens: pull (actief pollen via startAccelerometerUpdates) en push (passief ontvangen via startAccelerometerUpdatesToQueue). Push-modus heeft de voorkeur voor UI-apps, omdat gegevens worden geleverd aan de opgegeven wachtrij zonder de hoofdthread te blokkeren.
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 biedt toegang tot vier categorieën sensoren: de accelerometer meet lineaire versnelling langs drie assen, de gyroscoop — de hoeksnelheid van rotatie, de magnetometer — de sterkte van het magnetisch veld voor het kompas. De vierde categorie — gecombineerde CMDeviceMotion-gegevens, die de gefilterde metingen van alle sensoren omvatten.
CMDeviceMotion — de meest waardevolle klasse voor ontwikkeling. Het biedt userAcceleration (versnelling zonder zwaartekracht), rotationRate (rotatiesnelheid), magneticField (vector van het magnetisch veld) en attitude (oriëntatie van het apparaat in de vorm van een quaternion of Eulerhoeken). Voor het berekenen van attitude gebruikt Core Motion een fusie van gyroscoop- en accelerometergegevens volgens een algoritme dat vergelijkbaar is met een complementair filter.
De magnetometer wordt gebruikt voor correctie van drift van de gyroscoop. Een pure gyroscoop accumuleert na verloop van tijd fouten door temperatuurdrift en ruis — de magnetometer en accelerometer corrigeren deze fout en zorgen voor een oriëntatienauwkeurigheid van 1–2 graden in statische positie.
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 — klasse voor het tellen van stappen, afgelegde afstand en bewegings tempo. Het gebruikt accelerometergegevens met hardwareverwerking op de M-serie (M7/M8/M9/M10/M11) bewegingscoprocessor. Dit maakt werken op de achtergrond mogelijk met minimaal energieverbruik — ongeveer 1% batterij voor 8 uur ononderbroken tracking.
CMAltimeter — klasse voor het bepalen van relatieve hoogte op basis van de barometer, geïnstalleerd in iPhone 6 en nieuwer. Toont hoogteverandering ten opzichte van het startpunt met een nauwkeurigheid van ongeveer 1 meter. Wordt gebruikt in fitnessapps voor het tellen van verdiepingen en in navigatieapps voor het bepalen van hoogteverschillen.
CMPedometer-gegevens zijn beschikbaar met een vertraging van niet meer dan 5 seconden voor actuele metingen. Voor historische gegevens is een selectie over de laatste 7 dagen beschikbaar via queryPedometerData. De stappenteller herkent automatisch lopen, rennen en rijden — deze activiteitstypen zijn beschikbaar via queryPedometerData met een filter op type.
De nauwkeurigheid van CMPedometer is ongeveer 95% bij normaal lopen en daalt tot 90% bij rennen. De nauwkeurigheid wordt beïnvloed door: plaatsing van de telefoon in een zak of rugzak, type schoeisel en oppervlak. Apple raadt aan CMPedometer te gebruiken in combinatie met Core Location voor het bepalen van afstand in de open lucht — GPS zorgt voor een nauwkeurigere afstand en Core Motion voor het tellen van stappen.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Stappen: \(pedData.numberOfSteps)")
print("Afstand: \(pedData.distance)")
}
// Toegang tot altimeter
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Hoogte: \(data?.relativeAltitude)")
}
Integratie van Core Motion vereist geen speciale machtigingen of entitlement — het is voldoende om het framework te importeren en een instantie van CMMotionManager te maken. Voor CMPedometer is vanaf iOS 11 echter een autorisatieverzoek via CMStepCounter of het gebruik van CMPedometer met een toestemmingsverzoek via een systeemdialoog vereist.
Het integratieproces omvat: het maken van CMMotionManager, het controleren van de beschikbaarheid van de sensor via isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, het instellen van het update-interval en het starten van het ontvangen van gegevens. Het is belangrijk om updates te stoppen via stopAccelerometerUpdates wanneer gegevens niet nodig zijn — dit is cruciaal voor het energieverbruik.
Voor achtergrondwerk hebben CMPedometer en CMAltimeter geen extra instellingen nodig — ze gebruiken de bewegingscoprocessor. Voor CMMotionManager is achtergrondwerk niet beschikbaar — gegevens worden alleen verzameld wanneer de app actief is en op de voorgrond staat. De enige voorwaarde voor CMPedometer — de app moet ten minste één keer door de gebruiker zijn gestart na installatie om het abonnement op achtergrondupdates van iOS te initialiseren.
Core Motion ondersteunt adaptieve pollingfrequentie: als de app geen realtime gegevens nodig heeft, volstaat het om een interval van 1–5 Hz in te stellen in plaats van 100 Hz. Voor fitnessapps is de optimale frequentie 10 Hz voor CMMotionManager en 1 Hz voor CMPedometer. Apple raadt aan de frequentie te verlagen tot het minimum dat nodig is voor correcte werking.
Voor spellen die worden bestuurd door kantelen is een frequentie van 60–100 Hz nodig om vloeiende reacties te garanderen. In dit geval is het belangrijk om startDeviceMotionUpdates met een aparte wachtrij te gebruiken en gegevens zo snel mogelijk te verwerken. Volgens Apple verbruikt een frequentie van 60 Hz ongeveer 2 keer meer energie dan 30 Hz.
Bij het werken met Core Motion moet rekening worden gehouden met apparaatcompatibiliteit: de gyroscoop ontbreekt op iPhone 3GS en iPad van de 1e generatie, de magnetometer — op alle iPads zonder cellulaire module. Voor het controleren van de beschikbaarheid van sensoren worden de statische methoden isAccelerometerAvailable, isGyroAvailable en isDeviceMotionAvailable van de klasse CMMotionManager gebruikt. In de simulator retourneert Core Motion testgegevens — voor foutopsporing op een echte sensor is altijd een fysiek Apple-apparaat nodig.
// Optimale configuratie voor 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()
}
}
Veelgestelde vragen
Ja, Core Motion werkt op alle Apple-apparaten met de benodigde sensoren. De accelerometer zit in alle iPhone, iPad en iPod touch. De gyroscoop — in alle iPhone 4 en nieuwer, iPad 2 en nieuwer. De magnetometer — alleen in iPhone, niet in iPad. De barometer — in iPhone 6 en nieuwer.
De impact op de batterij hangt af van de pollingfrequentie. Bij 100 Hz verbruikt Core Motion ongeveer 5–7% batterij per uur. Bij 10 Hz — ongeveer 1–2% per uur. CMPedometer op de bewegingscoprocessor verbruikt minder dan 1% over 8 uur gebruik. Apple raadt aan altijd updates te stoppen wanneer gegevens niet nodig zijn.
Ja, CMPedometer biedt een kant-en-klare oplossing voor een stappenteller zonder dat u ruwe accelerometergegevens hoeft te verwerken. De klasse herkent automatisch stappen met een nauwkeurigheid van ongeveer 95% bij lopen en 90% bij rennen. Voor een aangepaste stappendetector kan CMMotionManager met een eigen algoritme worden gebruikt.
Core Motion is geïntegreerd in iOS op systeemniveau en gebruikt de M-serie coprocessor voor energiezuinige verwerking. Android gebruikt SensorManager met directe toegang tot hardwarestuurprogramma's, maar heeft geen gespecialiseerde coprocessor, wat het energieverbruik bij achtergrondtracking verhoogt.
Voor CMPedometer in iOS 11 en nieuwer is toestemming van de gebruiker vereist. Het verzoek wordt automatisch uitgevoerd bij het maken van CMPedometer en roept een systeemdialoog op. In Info.plist moet de sleutel NSMotionUsageDescription worden toegevoegd met een beschrijving waarom de app toegang nodig heeft tot bewegingsgegevens.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook