A Core Motion keretrendszer — egy iOS rendszerkomponens, amely hozzáférést biztosít a gyorsulásmérő, giroszkóp, magnetométer és lépésszámláló adataihoz Apple eszközökön. A Apple Developer Documentation, 2025 szerint a keretrendszer feldolgozza az érzékelők nyers adatait és érthető metrikákká alakítja — gyorsulás, szögsebesség, tájolás és lépésszám. Egységes API minden mozgásérzékelőhöz lehetővé teszi a fejlesztők számára lépésszámlálók, fitnesz alkalmazások és az eszköz döntésével vezérelt játékok készítését.
Főbb pontok
Core Motion — az Apple rendszerkeretrendszere, amelyet az iOS 4-ben vezettek be az eszköz mozgásérzékelőivel való munkához. Egységes interfészt biztosít a gyorsulásmérő, giroszkóp, magnetométer és lépésszámláló eléréséhez, megszabadítva a fejlesztőt az alacsony szintű hardver-illesztőprogramokkal való munkától.
A Core Motion kulcsfontosságú előnye az adatok hardveres szűrése. A keretrendszer automatikusan egyesíti a gyorsulásmérő és giroszkóp leolvasásait a tiszta userAcceleration kiszámításához gravitációs komponens nélkül, valamint megadja az eszköz térbeli tájolását kvaterniók és Euler-szögek formájában.
Az Apple WWDC 2023 szerint a Core Motion az App Store fitneszalkalmazásainak több mint 80%-ában használatos. A keretrendszer energiafogyasztásra optimalizált — az érzékelők lekérdezési gyakorisága automatikusan csökken előfizetők hiányában, meghosszabbítva az eszköz akkumulátorának élettartamát.
Fontos architektúrális jellemző — az M-sorozatú koprocesszor (Motion coprocessor) használata, amely a mozgásérzékelők adatait a fő A-sorozatú processzortól függetlenül dolgozza fel. Az M7 chip-től (iPhone 5S) kezdve a koprocesszor folyamatosan gyűjti a gyorsulásmérő és giroszkóp adatait, lehetővé téve a CMPedometer és CMAltimeter számára a háttérben való munkát zárt képernyő mellett, kevesebb mint 1 mW energiafogyasztással. Ez a hardveres izolációnak köszönhetően vált lehetővé: a koprocesszor saját nem felejtő memóriával és adatbusszal rendelkezik, amely független a fő rendszertől.
A Core Motion architektúrája a szingleton modell szerint épül fel a CMMotionManager-en keresztül. Az alkalmazás egyetlen menedzser példányt kap, és azon keresztül konfigurálja a frissítési gyakoriságot, elindítja vagy leállítja az adatgyűjtést minden érzékelő típushoz. Az adatok blokkokon keresztül, meghatározott időközönként érkeznek.
A keretrendszer két módot használ az adatok lekérésére: pull (aktív lekérdezés a startAccelerometerUpdates segítségével) és push (passzív fogadás a startAccelerometerUpdatesToQueue segítségével). A push mód előnyösebb UI alkalmazásokhoz, mivel az adatok a megadott sorba kerülnek a fő szál blokkolása nélkül.
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 négy érzékelő kategóriához biztosít hozzáférést: a gyorsulásmérő lineáris gyorsulást mér három tengely mentén, a giroszkóp — a forgás szögsebességét, a magnetométer — a mágneses mező erősségét az iránytűhöz. A negyedik kategória — a CMDeviceMotion egyesített adatai, amelyek az összes érzékelő szűrt leolvasásait tartalmazzák.
CMDeviceMotion — a legértékesebb osztály a fejlesztéshez. userAcceleration-t (gyorsulás gravitáció nélkül), rotationRate-t (forgási sebesség), magneticField-et (mágneses mező vektora) és attitude-ot (az eszköz tájolása kvaternió vagy Euler-szögek formájában) biztosít. Az attitude kiszámításához a Core Motion a giroszkóp és gyorsulásmérő adatainak fúzióját használja egy komplementer szűrőhöz hasonló algoritmussal.
A magnetométer a giroszkóp drift korrekciójára szolgál. A tiszta giroszkóp idővel hibát halmoz fel a hőmérsékleti drift és zaj miatt — a magnetométer és gyorsulásmérő korrigálja ezt a hibát, 1–2 fokos tájolási pontosságot biztosítva statikus helyzetben.
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 — osztály lépések, megtett távolság és mozgási tempó számlálásához. A gyorsulásmérő adatait használja hardveres feldolgozással az M-sorozatú (M7/M8/M9/M10/M11) mozgáskoprocesszoron. Ez lehetővé teszi a háttérben való munkát minimális energiafogyasztással — körülbelül 1% akkumulátor 8 óra folyamatos követéshez.
CMAltimeter — osztály a relatív magasság meghatározására az iPhone 6 és újabb készülékekbe épített barométer alapján. A magasságváltozást a kiindulási ponthoz képest körülbelül 1 méteres pontossággal mutatja. Fitnesz alkalmazásokban szintszámoláshoz és navigációs alkalmazásokban magasságkülönbségek meghatározásához használják.
A CMPedometer adatok legfeljebb 5 másodperces késéssel érhetők el az aktuális leolvasásokhoz. Történeti adatokhoz az elmúlt 7 napból lehet választani a queryPedometerData segítségével. A lépésszámláló automatikusan felismeri a gyaloglást, futást és vezetést — ezek a tevékenységtípusok elérhetők a queryPedometerData segítségével típus szerinti szűrővel.
A CMPedometer pontossága normál gyaloglásnál körülbelül 95%, futásnál 90%-ra csökken. A pontosságot befolyásolják: a telefon elhelyezése zsebben vagy hátizsákban, a lábbeli típusa és a felület. Az Apple a CMPedometer használatát javasolja a Core Location-al kombinálva a szabadtéri távolság meghatározásához — a GPS pontosabb távolságot, a Core Motion pedig lépésszámlálást biztosít.
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("Lépések: \(pedData.numberOfSteps)")
print("Távolság: \(pedData.distance)")
}
// Hozzáférés a magasságmérőhöz
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("Magasság: \(data?.relativeAltitude)")
}
A Core Motion integrálása nem igényel különleges engedélyeket vagy entitlement-et — elég hozzáadni a keretrendszer importját és létrehozni egy CMMotionManager példányt. Azonban a CMPedometer esetében iOS 11-től kezdve engedélykérés szükséges a CMStepCounter-en keresztül vagy a CMPedometer használata rendszerpárbeszédablakon keresztüli engedélykéréssel.
Az integrációs folyamat magában foglalja: CMMotionManager létrehozása, az érzékelő elérhetőségének ellenőrzése az isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable segítségével, a frissítési időköz beállítása és az adatok fogadásának elindítása. Fontos a frissítések leállítása a stopAccelerometerUpdates segítségével, amikor az adatokra nincs szükség — ez kritikus az energiafogyasztás szempontjából.
A háttérmunkához a CMPedometer és CMAltimeter nem igényel további beállításokat — a mozgáskoprocesszort használják. A CMMotionManager esetében a háttérmunka nem elérhető — az adatok csak akkor gyűlnek, amikor az alkalmazás aktív és az előtérben van. Az egyetlen feltétel a CMPedometer esetében — az alkalmazást legalább egyszer el kell indítania a felhasználónak a telepítés után a háttérfrissítésekre való feliratkozás inicializálásához iOS-ből.
A Core Motion támogatja az adaptív lekérdezési gyakoriságot: ha az alkalmazásnak nincs szüksége valós idejű adatokra, elég 1–5 Hz-es időközt beállítani 100 Hz helyett. Fitnesz alkalmazásokhoz az optimális gyakoriság 10 Hz a CMMotionManager és 1 Hz a CMPedometer esetében. Az Apple javasolja a gyakoriság csökkentését a megfelelő működéshez szükséges minimumra.
A döntéssel vezérelt játékokhoz 60–100 Hz-es gyakoriság szükséges a reakció simaságának biztosításához. Ebben az esetben fontos a startDeviceMotionUpdates használata külön sorral és az adatok minél gyorsabb feldolgozása. Az Apple szerint a 60 Hz-es gyakoriság körülbelül kétszer annyi energiát fogyaszt, mint a 30 Hz.
A Core Motion használatakor figyelembe kell venni az eszköz kompatibilitást: a giroszkóp hiányzik az iPhone 3GS és iPad 1. generációból, a magnetométer — minden cellamodul nélküli iPad-ből. Az érzékelők elérhetőségének ellenőrzéséhez a CMMotionManager osztály statikus isAccelerometerAvailable, isGyroAvailable és isDeviceMotionAvailable metódusai használhatók. A szimulátorban a Core Motion tesztadatokat ad vissza — a valódi érzékelőn történő hibakereséshez mindig fizikai Apple eszköz szükséges.
// Optimális beállítás fitnesz alkalmazáshoz
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()
}
}
Gyakran ismételt kérdések
Igen, a Core Motion minden olyan Apple eszközön működik, amely rendelkezik a szükséges érzékelőkkel. A gyorsulásmérő minden iPhone, iPad és iPod touch készülékben megtalálható. A giroszkóp — minden iPhone 4 és újabb, iPad 2 és újabb készülékben. A magnetométer — csak iPhone-ban, iPad-ben nincs. A barométer — iPhone 6 és újabb készülékekben.
Az akkumulátorra gyakorolt hatás a lekérdezési gyakoriságtól függ. 100 Hz-en a Core Motion körülbelül 5–7% akkumulátort fogyaszt óránként. 10 Hz-en — körülbelül 1–2% óránként. A CMPedometer a mozgáskoprocesszoron kevesebb mint 1%-ot fogyaszt 8 óra alatt. Az Apple azt javasolja, hogy mindig állítsa le a frissítéseket, amikor nincs szükség az adatokra.
Igen, a CMPedometer kész megoldást kínál a lépésszámlálóhoz anélkül, hogy a gyorsulásmérő nyers adatait kellene feldolgozni. Az osztály automatikusan felismeri a lépéseket körülbelül 95%-os pontossággal gyaloglásnál és 90%-kal futásnál. Egyéni lépésdetektorhoz a CMMotionManager használható saját algoritmussal.
A Core Motion rendszerszinten integrálódik az iOS-be, és az M-sorozatú koprocesszort használja alacsony energiafogyasztású feldolgozáshoz. Az Android a SensorManager-t használja közvetlen hozzáféréssel a hardver-illesztőprogramokhoz, de nem rendelkezik speciális koprocesszorral, ami növeli az energiafogyasztást a háttérkövetés során.
A CMPedometer esetében iOS 11 és újabb rendszereken felhasználói engedély szükséges. A kérés automatikusan megtörténik a CMPedometer létrehozásakor, és rendszerpárbeszédablakot jelenít meg. Az Info.plist-ben hozzá kell adni az NSMotionUsageDescription kulcsot egy leírással arról, hogy az alkalmazásnak miért van szüksége a mozgásadatokhoz való hozzáférésre.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is